行指针传参 分数 10 作者 叶斌 单位 成都信息工程大学 利用行指针传参实现二维数
时间: 2023-12-14 21:33:44 浏览: 153
```c
#include <stdio.h>
#include <stdlib.h>
void input(int (*p)[5], int m, int n); // 输入矩阵
void output(int (*p)[5], int m, int n); // 输出矩阵
void find_max(int (*p)[5], int m, int n); // 找到最大值并放在中心
void find_min(int (*p)[5], int m, int n); // 找到最小值并放在四角
int main()
{
int a[5][5];
input(a, 5, 5);
find_max(a, 5, 5);
find_min(a, 5, 5);
output(a, 5, 5);
return 0;
}
void input(int (*p)[5], int m, int n)
{
printf("请输入%d行%d列的矩阵:\n", m, n);
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", *(p + i) + j);
}
}
}
void output(int (*p)[5], int m, int n)
{
printf("处理后的矩阵为:\n");
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", *(*(p + i) + j));
}
printf("\n");
}
}
void find_max(int (*p)[5], int m, int n)
{
int max = **p, row = 0, col = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (*(*(p + i) + j) > max)
{
max = *(*(p + i) + j);
row = i;
col = j;
}
}
}
*(*(p + row) + col) = *(*(p + m / 2) + n / 2);
*(*(p + m / 2) + n / 2) = max;
}
void find_min(int (*p)[5], int m, int n)
{
int min = **p, row = 0, col = 0;
for (int i = 0; i < m; i += m - 1)
{
for (int j = 0; j < n; j += n - 1)
{
if (*(*(p + i) + j) < min)
{
min = *(*(p + i) + j);
row = i;
col = j;
}
}
}
*(*(p + row) + col) = *(*(p + 0) + 0);
*(*(p + 0) + 0) = min;
}
```
阅读全文