问答题 下列给定程序中,函数proc()的功能是:输出M行M列整数方阵,然后求两条对角线上的各元素之和并将其返回。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行。也不得更改程序的结构。
试题程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#define M 5
//****found****
int proc(int n, int xx[][])
{
int i, j, sum=0;
printf("/nThe%d x%d matrix:/n", M, M);
for(i=0; i<M; i++)
{
for(j=0; j<M; j++)
//****found****
printf("%4f", xx[i][j]);
printf("/n");
}
for(i=0; i<n; i++)
sum+=xx[i][i]+xx[i][n-i-1];
return(sum);
}
void main()
int arr[M][M]={{1, 4, 3, 2, 4}, {4, 6, 2, 5, 0}, {3, 5, 2, 0, 1}, {7, 0, 5, 7, 3}, {5, 3.1, 9, 2}};
system("CLS");
printf("/nThe sum of all elements on 2 diagnals is%d", proc(M, arr));
}
【正确答案】
【答案解析】(1)错误:int proc(int n, int xx[][])
正确:int proc(int n, int xx[][M])
(2)错误:printf("%4f", xx[i][j]);
正确:printf("%4d", xx[i][j]); [解析] 从主函数中的调用语句可知,实参中的一个为二维数组,因此其形参类型也应该一样,而二维时,其列下标必须是常量,因此把“int proc(int n, int xx[][])”改为“intproc(int n, int xx[][M])”。从形参中可知xx数组是整型数组,因此其输出的控制应为整型,故把printf中的"%4f"改为"%4d"。