C/PTA ------ 12.指针1(课外实践)
- 一.函数题
-
- [6-1 删除字符串中数字字符](#6-1 删除字符串中数字字符)
- [6-2 找最大值及其下标](#6-2 找最大值及其下标)
- [6-3 求两数平方根之和](#6-3 求两数平方根之和)
- [6-4 求一组数中的最大值、最小值和平均值](#6-4 求一组数中的最大值、最小值和平均值)
- [6-5 两个4位正整数的后两位互换](#6-5 两个4位正整数的后两位互换)
- [6-6 判断回文字符串](#6-6 判断回文字符串)
- 二.程序题
-
- [7-1 求矩阵每行元素的和](#7-1 求矩阵每行元素的和)
一.函数题
6-1 删除字符串中数字字符
c
void delnum(char* s)
{
int i = 0;
int j = 0;
while (s[i] != '\0')
{
if (!(s[i] <= '9' && s[i] >= '0'))
{
s[j] = s[i];
j++;
}
i++;
}
s[j] = '\0';
}
6-2 找最大值及其下标
c
int fun(int* a, int* b, int n)
{
int max = a[0];
for (int i = 1; i < n; i++)
{
if (max < a[i])
{
max = a[i];
*b = i;
}
}
return max;
}
6-3 求两数平方根之和
c
double fun(double* a, double* b)
{
double sum = sqrt(*a) + sqrt(*b);
return sum;
}
6-4 求一组数中的最大值、最小值和平均值
c
float fun(int a[], int n, int* max, int* min)
{
float p = (float)a[0];
*max = a[0];
*min = a[0];
for (int i = 1; i < n; i++)
{
p += (float)a[i];
if (a[i] < *min)
*min = a[i];
if (a[i] > *max)
*max = a[i];
}
return p / n;
}
6-5 两个4位正整数的后两位互换
c
void fun(int* p, int* q)
{
int a1 = 0, a2 = 0;
int b1 = 0, b2 = 0;
while (*p > 100)
{
a1 = *p % 10;
*p /= 10;
a2 = *p % 10;
*p /= 10;
}
while (*q > 100)
{
b1 = *q % 10;
*q /= 10;
b2 = *q % 10;
*q /= 10;
}
*p = *p * 100 + b2 * 10 + b1;
*q = *q*100 + a2 * 10 + a1;
}
6-6 判断回文字符串
c
bool palindrome(char* s)
{
int left = 0;
int right = strlen(s) - 1;
while (left < right)
{
if (s[left] != s[right])
return false;
left++;
right--;
}
return true;
}
二.程序题
7-1 求矩阵每行元素的和
c
#define N 6
int main()
{
int m, n, sum = 0;
int a[N][N];
int(*p)[N];
int i, j;
p = a;
scanf("%d%d", &m, &n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &*(*(p + i) + j));
}
}
for (i = 0; i < m; i++)
{
sum = 0;
for (j = 0; j < n; j++)
{
sum = sum + *(*(p + i) + j);
}
printf("%d\n", sum);
}
return 0;
}