请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。
#include<stdio.h> void func(int arr[4][4], int pp[4]) { int i,j; for (j = 0; j < 4; j++)//本题的特殊性在于输出每列最大的元素,因此应当固定列的基础去遍历行 { pp[j] = arr[0][j];//遍历不同列时,将原始数组每列第一个元素赋给目标数组 for (i = 1; i < 4; i++)//遍历数组各行,注意行数是从1开始而不是0 { if (arr[i][j] > pp[j]) pp[j] = arr[i][j];//将每列最大的数储存在目标数组中 } } } main() { int i, j, arr[4][4],pp[4]; printf("请输入原始数组:\n"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) scanf_s("%d", &arr[i][j]); } func(arr, pp); printf("整理后的数组为:"); for (i = 0; i < 4; i++) { printf("%d ", pp[i]); } }
在拿到该题时,一部分人可能会想到重新定义一个数组max[N]将每列元素的最大值存放在该数组中,如上面所示,直接使max[N]=pp[N]是不能实现两个数组中元素对应赋值,而且定义第三个变量再与pp数组建立联系明显增加了代码量,出错率也会大大提高。