问答题
给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是"幻方",若是,函数返回值为1;若不是,函数返回值为0。"幻方"的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。
例如,以下3×3的矩阵就是一个"幻方":
4 9 2
3 5 7
8 1 6
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BIANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
1 #include<Stdio.h>
2 #define N 3
3 int fun(int(*a)[N])
4 { int i,j,m1,m2,row,colum;
5 m1=m2=0;
6 for(i=0;i<N;i++)
7 { j=N—i—1;m1+=a[i][i];
8 m2+=a[i][j];}
9 if(m1!=m2)return 0;
10 for(i=0;i<N;i++){
11 /*********found*********/
12 row=colum=
【1】
;
13 for(j=0;j<N;j++)
14 {row+=a[i][j];
15 colum+=a[j][i];)
16 /*********found*********/
17 if((row!=colum)
【2】
(row!=m1))
18 return 0 ;
19 }
20 /*********found*********/
21 return
【3】
;
22 }
23 main()
24 { int x[N][N],i,j; .
25 printf("Enter number for array:\n");
26 for(i=0;i<N ;i++)
27 for(j=0;j<N;j++)
28 scanf("%d",&x[i][j]);
29 printf("Array:\n");
30 for(i=0;i<N;i++)
31 { for(j=0;j<N;j++)
32 printf("%3d",x[i][j]);
33 printf("\n");
34 }
35 if(fun(x))
36 printf("The Array is amagic square.\n");
37 else
38 printf("The Array isn'ta magic square.\n");
39 }
【正确答案】正确答案:(1)0 (2)‖ (3)1
【答案解析】解析:填空1:本题考查为变量赋初值,在这里row+=a[i][j]代表是每行的总和,colum+=a[j][i]代表的是每列的总和,因而row,colum在初始化时应该为零,此空应该填0。 填空2:本题考查了if条件语句,此句if判断代表每行的总和与列是否相等,每行的总和是否与对角线的总和相等,两者若有一个不成立,即返回0,因而此空应该填写‖。 填空3:题目要求若矩阵是“幻方”,则函数返回值为1,因而此空应该填写1。