1、国家二级 C语言机试(操作题)模拟试卷 384及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:判定形参 a所指的 NN(规定 N为奇数 )的矩阵是否是 “幻方 ”,若是,函数返回值为 1;不是,函数返回值为 0。 “幻方 ”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。 例如,以下 33的矩阵就是一个 “幻方 ”: 4 9 2 3 5 7 8 1 6 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的 结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行前删行也不得更改程序的结构 ! 1 #include stdio h
2、 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+=aii; m2+=aij; 8 if(m1!=m2)return 0; 9 for(i=0 ; i N; i+) 10 *found* 11 row=colum=_1_; 12 for(j=0; j N; j+) 13 row+=aij; colum+=aji; 14 *found* 15 if(row!=colum) _2_ (row!=m1) return 0; 16
3、 17 *found* 18 return _3_; 19 20 main() 21 int xNN, i, j; 22 printf(Enter number for array: n); 23 for(i=0; i N; i+) 24 for(j=0; j N; j+)scanf( d, xij); 25 printf(Array: n); 26 for(2=0; i N; i+) 27 for(j=0; j N; j+) printf( 3d, xij); 28 printf( n); 29 30 if(fun(x)printf(The Array isa magic square n)
4、; 31 else printf(The Array isnt a magic square n); 32 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:把主函数中输入的 3个数,最大的放在 a中,最小的放在 c中,中间的放在 b中。 例如,输入的数为: 55 12 34,输出结果应当是: a=55 0, b=34 0,c=12 0。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 1 #include stdio h 2 void fun(float *a, float *b, float * c) 3 4
5、 *found* 5 float *k; 6 if(*a *b) 7 k=*a; *a=*b; *b=k; 8 *found* 9 if(*a *c) 10 k=*c; *c=*a; *a=k, 11 if(*b *c) 12 k=*b; *b=*c; *c=k; 13 14 main() 15 float a, b, c; 16 printf(Input a b c: ); scanf( f f f, int s; ) STU; 6 void fun(STU a, STU *s) 7 8 9 main() 10 STU aN=A01, 81, A02”, 89, A03, 66, A04,
6、87,A05, 77, A06, 90, A07, 79, A08, 61, A09, 80, A10,71, m; 11 int i; void NONO(); 12 printf(* The original data * n); 13 for(i=0; i N; i+)printf(No= s Mark= d n, ai num, ai s); 14 fun(a, 18 19 void NONO() 20 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * 21 FILE *rf, *wf; 22 STU aN, m; 23 int i; 24 rf=fopen(in d
7、at, r); 25 wf=fopen(out dat, w); 26 for(i=0; i 10; i+)fscanf(rf, s d, ai mum, ai s); 27 fun(a, m); 28 fprintf(wf, The lowest: s, d n, m num, m s); 29 fclose(rf); 30 fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 384答案与解析 一、程序填空题 1 【正确答案】 (1)0 (2) (3)1 【试题解析】 函数 fun的功能是判定形参 a所指的 NN的矩阵是否是 ”幻方 ”。第一空:由 “row+=aij; colu
8、m+=aji; ”可知 row是计算行和, colum是计算列和,故第一空处的初始化应将行和与列和初始化为 0,即第一空处应为 “0”。第二空: “if(now!=colum)_2_(mw!=m1)return 0; ”如果行和不等于列和,那么矩阵不是幻方,如果行和不等对角线和,那么矩阵也不是幻方,即两者是或的关系,故第二空处应为 “第三空:不是幻方的情况在前面都会返回 0, 所有不是幻方的情况都已经考虑到了,剩下的就是幻方,故第三空处为 “1”。 二、程序修改题 2 【正确答案】 (1)float k; (2)if(*a *c) 【试题解析】 函数对三个数进行两两比较,实现判断。 (1)第一
9、个标识下的变量 k是在比较过程中,临时存放数据的变量,因此 k不应是指针,所以将 “float*k; ”改为 “float k; ”。 (2)分析函数中第一个 if语句,如果主函数中 a b,则对调,把大数放在 a中;分析第二个 if语句,如果主函数中的 a c,则进行对调,又把大数放 在 c中,这样的逻辑显然是混乱的。因此第二个标识下 “if(*a *c)”应该改为 “if(*a *c)”。 三、程序设计题 3 【正确答案】 1 int i, min=a0 s, j=0; 2 for(i=1; i N; i+) 3 if(min ai s) *如果最低分 min仍大于当前分 * 4 j=i; *记住位置 + 5 min=ai s; *把当前分赋值给 min* 6 7 *s=aj; 【试题解析】 (1)首先指 定第一个成绩为最低分数。 (2)再使用一个 for循环把所有的成绩进行比较,找出最低的分数来。