1、国家二级 C语言机试(操作题)模拟试卷 536及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 判定形参 a所指的 NN(规定 N为奇数 )的矩阵是否是 ”幻方 ”,若是,函数返回值为1;若不是,函数返回值为 0。 ”幻方 ”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。 例如,以下 33的矩阵就是一个 “幻方 “: 4 9 2 3 5 7 8 1 6 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的 结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio
2、h #define N 3 int fun(int(*a)N) int i, j, m1, m2, row, colum; ml=m2=0; for(i=0; i N; i+) j=N i一 1; ml+=aii; m2+=aij; ) if(m1!=m2)return 0; for(i=0; i N; i+) *found* row=colum=【 1】 ; for(j=0 ; j N; j+) row+=aij; colum+=aji; *found* if(row!=colum)【 2】 (row!=m1) return 0 ; *found* return【 3】 ; main() i
3、nt xNN, i, j; printf(“Enter number for ar- ray: n“); for(i=0; i N; i+) for(j=0; j N; j+) scanf(“ cl”, &xij); printf(“Array: n“); for(i=0; i N; i+) for(j=0; j N; j+) printf(“ 3 d“, xij); printf(“ n“); if(fun(x) printf(“The Array is a magic square n“); else printf(“The Array isnt a magic square n“); 二
4、、程序修改题 2 下列给定程序中,函数 fun的功能是:传入一个整数 m,计算如下公式的值。例如,若输入 5,则应输出一 0 283333。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODl1 C中,不要改动main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #iticlude stdio h double fun(int m) double t=1 0; int i; for(i=2; i =m; i+) *found* t=1 0 1i; *found* ; void main
5、()int m; system(“CLS“); printf(“nPlease enter 1 inte-get numbers: n“); scanf(“ d“, m); printf(“ n nThe result is 1f n“, fun(m); 三、程序设计题 3 请编写一个函数,用来删除字符串中的所有空格。 例如,输入 asd af aa z67,则输出为 asdafaaz67。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #nclude
6、ctype h #include conio h #include stdlib h void fun(char, Ic str) main() char str81; char Nsg=”Input a string: “; int n; FILE*out; printf(Nsg); gets(str); puts(str); fun(str); printf(“*str: s、 n“, str); * out=fopen(“out dat“, “w“); fun(Nsg); fprintf(out, “ s“, Nsg); fclose(out); * 国家二级 C语言机试(操作题)模拟试
7、卷 536答案与解析 一、程序填空题 1 【正确答案】 (1)0 (2)| (3)1 【试题解析】 填空 1:本题考查为变量赋初值,在这里 mw+=aij代表是每行的总和, colum+=aji代表的是每列的总和,因而 row, colum在初始化时应该为零,此空应该填 0。 填空 2:本题考查了 if条件语句,此句 if判断代表每行的总和与列是否相等,每行的总和是否与 对角线的总和相等,两者若有一个不成立,即返回 0,因而此空应该填写 |。 填空 3:题目要求若矩阵是 “幻方 ”,则函数返回值为 1,因而此空应该填写 1。 二、程序修改题 2 【正确答案】 (1)t-=1.0/i; (2)r
8、etum t; 【试题解析】 (1)变量 t存放公式的和,通过循环语句进行复合运算,因此此处应改为 t -=1.0/i;,注意此处应进行变量的类型转换。 (2)循环结束后应将和值返回给主函数。 三、程序设计题 3 【正确答案】 void fun (char*str) int i=0; char *p=str; while(*p) if( *p!=) /*删除空格 * stri+=*p; p+; stri=0; *加上结束 符 */ 【试题解析】 本题要求删除所有空格,即保留除了空格以外的其他所有字符。由于 C语言中没有直接删除字符的操作,所以对不需要删除的字符采用 “保留 ”的操作。用指针 p指向字符串中的每一个字符,每指向到一个字符都判断其是否为空格,若不是空格则保存到 stri。