给定程序MODI1.c中函数劬的功能:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
    给定源程序如下:
#include <stdio.h>

#define  M   5
/************found************/
int  fun(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( "%f ", xx[i][j] );
    printf("\n");
  }
  for( i = 0 ; i < n ; i++ )
    sum += xx[i][i]+xx[i][ n-i-1 ];
  return( sum );
}

main( )
{  int  aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},
          {6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
  printf ( "\nThe sum of all elements on 2 diagnals is %d.",fun( M, aa ));
}

【正确答案】

(1)int fun(int n,int xx[][M])

(2)printf("%d",xx[i][j]);


【答案解析】

(1)当用数组作为函数的形参时,可以不定义数组的行数,但一定要定义数组的列数。

(2)该处错误比较隐蔽,一般C语言上机考试很少涉及printf函数中的错误,此处只要明白格式字符d和f的区别就可以了。格式字符d表示以带符号的十进制形式输出整数(正整数不输出符号);格式字符f表示以小数形式输出单精度、双精度数据,隐含输出6位小数。