改错题
1. 下列给定程序中,函数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[][])”改为“int proc(int n,int xx[][M])”。由形参可知xx数组是整型数组,因此,其输出的控制应为整型,故把printf()中的“"%4f"”改为“"%4d"”。