问答题 请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。
例如:二维数组中的值为:
1 3 5 7 9
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0
则函数值为61。
注意:部分源程序存在文件PROG1. C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio. h>
#define M 4
#define N 5
int fun(int a[M][N])
{
}
main( )
{int aa[M][N]=({1, 3, 5, 7, 9), {2, 9, 9, 9, 4}, {6, 9, 9, 9, 8), {1, 3, 5, 7, 0}};
int i, j, y; void NONO( );
printf("The original data is:/n");
for(i=0; i<M; i++)
{ for(j=0; j<N; j++)printf
("%6d", aa[i][j]);
printf("/n");
}
Y=fun(aa);
printf("/nThe sum:%d/n", y);
printf("/n");
NONO( );
}
void NONO( )
{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
int i, j, y, k, aa[M][N];
FILE *rf, *wf;
rf=fopen("in. dat", "r");
wf=fopen("out. dat", "w");
for(k=0; k<10; k++) {
for(i=0; i<M; i++)
for(j=0; j<N; j++) fscanf(rf. "%d", &aa[i][j]);
y=fun(aa);
fprintf(wf, "%d/n", y);
}
fclose(rf);
fclose(wf);
}
【正确答案】
【答案解析】int tot=0, i, j;
for(i=0; i<N; i++) {
tot+=a[0][i];
tot+=a[M-1][i];
}
for(i=1; i<M-1; i++) {
tot+=a[i][0];
tot+=a[i][N-1];
}
return tot; [解析] 该程序功能是求出二维数组周边元素之和。其中周边元素是指数组的最上和最下的两行,最左和最右的两列。数组第一行元素的行下标为0,最后一行元素的行下标为“M-1”,第一列的列下标为0,最后一列的列下标为“N-1”。
进入fun函数,根据前面的分析:求周边元素的和,可以采用两个循环分别把行元素和列元素相加。但要避免把周边元素重复相加。
[考点] 二维数组、for循环语句。