改错题 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"”。