B085

01-程序填空题 田少松, 软件154 403浏览

所属年份:2010.9;2011.3;2011.9;
给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是”幻方”,若是,函数返回值为1;若不是,函数返回值为0。”幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。
例如,以下3×3的矩阵就是一个”幻方”:
4  9  2
3  5  7
8  1  6
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。

注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!

#include  <stdio.h>
#define   N   3
int fun(int  (*a)[N])
{
    int  i,j,m1,m2,row,colum;
    m1=m2=0;
    for(i=0; i<N; i++)
    {
        j=N-i-1;
        m1+=a[i][i];
        m2+=a[i][j];
    }
    if(m1!=m2) return  0;
    for(i=0; i<N; i++)
    {
        /**********found**********/
        row=colum= __1__;
        for(j=0; j<N; j++)
        {
            row+=a[i][j];
            colum+=a[j][i];
        }
        /**********found**********/
        if( (row!=colum) __2__ (row!=m1) ) return 0;
    }
    /**********found**********/
    return  __3__;
}

main()
{
    int  x[N][N],i,j;
    printf("Enter number for array:\n");
    for(i=0; i<N; i++)
        for(j=0; j<N; j++)  scanf("%d",&x[i][j]);
    printf("Array:\n");
    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)  printf("%3d",x[i][j]);
        printf("\n");
    }
    if(fun(x)) printf("The Array is a magic square.\n");
    else printf("The Array isn't a magic square.\n");
}

【参考答案】

(1)0  
(2)||  
(3)1

【解题思路】
填空1:本题考查为变量赋初值,在这里row+=a[i][j]代表是每行的总和, colum+=a[j][i]代表的是每列的总和,因而row,colum在初始化时应该为零,此空应该填0。
填空2:本题考查了if条件语句,此句if判断代表每行的总和与列是否相等,每行的总和是否与对角线的总和相等,两者若有一个不成立,即返回0,因而此空应该填写||。
填空3:题目要求若矩阵是”幻方”,则函数返回值为1,因而此空应该填写1。