1、二级 C语言笔试操作题-9 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun的功能是:判定形参 a所指的 NN(规定 N为奇数)的矩阵是否是“幻方”,若是,则函数返回值为 1;若不是,则函数返回值为 0。“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。例如,以下 33的矩阵就是一个“幻方”:4 9 23 5 78 1 6请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.
2、h#defineN 3int fun(int(*a)N)int i,j,m 1,m2,row,eolum;m1=m2=0;for(i=0;iN;i+)j=N-i-1;m1+=aii;m2+=aij;if(m1!=m2)return 0;for(i=0;iN;i+)/*found*/row=colum=_;for(j=0;jN;j+)(row+=aij;colum+=aji;/*found*/if(row!=colum)_(row!=m1)return0;/*found*/return_;main()int xNN,i,j;printf(“Enter number for array:/n“);
3、for(i=0;iN;i+)for(j=0;jN;j+)scanf(“%d“xij);printf(“Array:/n“);for(i=0;iN;i+)for(j=0;jN;j+)printf(“%3d“,xij);printf(“/n“);if(fun(x)printf(“The Array is a magic square./n“);else printf(“The Array isnt a magic square./n“);(分数:30.00)填空项 1:_二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun的功能是:传入一个整数 m,计算如下公式的值。t=
4、1/2-1/3-1/m例如,若输入 5,则应输出-0.283333。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdlib.h#includeconio.h#includestdio.hdouble fun(int m)double t=1.0;int i;for(i=2;i=m;i+)/*found*/t=1.0-1/i;/*found*/void main()int m;printf(“/nPlease enter 1 integer number:/n“);scanf(“%d“,m);print
5、f(“/n/nThe result is%lf/n“,fun(m);(分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.请编写一个函数,用来删除字符串中的所有空格。例如,输入 asd afaa z67,则输出为 asdafaaz67。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includestdio.h#includectype.h#includeconio.hvoid fun(char*str)main()char str81;char Msg=“Input a string:“;
6、int n:printf(Msg);gets(str);puts(str);fun(str);printf(“*str:%s/n“,str);(分数:40.00)_二级 C语言笔试操作题-9 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun的功能是:判定形参 a所指的 NN(规定 N为奇数)的矩阵是否是“幻方”,若是,则函数返回值为 1;若不是,则函数返回值为 0。“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。例如,以下 33的矩阵就是一个“幻方”:4 9 23 5 78 1 6请在程序的
7、下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h#defineN 3int fun(int(*a)N)int i,j,m 1,m2,row,eolum;m1=m2=0;for(i=0;iN;i+)j=N-i-1;m1+=aii;m2+=aij;if(m1!=m2)return 0;for(i=0;iN;i+)/*found*/row=colum=_;for(j=0;jN;j+)(row+=aij;colum+=aji;/*found*/if(row!=colum)_(row!=m
8、1)return0;/*found*/return_;main()int xNN,i,j;printf(“Enter number for array:/n“);for(i=0;iN;i+)for(j=0;jN;j+)scanf(“%d“xij);printf(“Array:/n“);for(i=0;iN;i+)for(j=0;jN;j+)printf(“%3d“,xij);printf(“/n“);if(fun(x)printf(“The Array is a magic square./n“);else printf(“The Array isnt a magic square./n“);
9、(分数:30.00)填空项 1:_ (正确答案:0 | 1)解析:解析 填空 1:本题考查为变量赋初值,在这里 row+=aij代表是每行的总和, columaji代表的是每列的总和,因而 row,colum 在初始化时应该为零,此空应该填 0。填空 2:本题考查了 if条件语句,此句 if判断代表每行的总和与列是否相等,每行的总和是否与对角线的总和相等,两者若有一个不成立,即返回 0,因而此空应该填写|。填空 3:题目要求若矩阵是“幻方“,则函数返回值为 1,因而此空应该填写 1。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun的功能是:传入一个整数 m,计算如
10、下公式的值。t=1/2-1/3-1/m例如,若输入 5,则应输出-0.283333。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdlib.h#includeconio.h#includestdio.hdouble fun(int m)double t=1.0;int i;for(i=2;i=m;i+)/*found*/t=1.0-1/i;/*found*/void main()int m;printf(“/nPlease enter 1 integer number:/n“);scanf(“%d“,
11、m);printf(“/n/nThe result is%lf/n“,fun(m);(分数:30.00)_正确答案:(1)t-=1.0/i;(2)return t;)解析:解析 (1)变量 t存放公式的和,通过循环语句进行复合运算,因此此处应改为 t-=1.0/i;,注意此处应进行变量的类型转换。(2)循环结束后应将和值返回给主函数。三、程序设计题(总题数:1,分数:40.00)3.请编写一个函数,用来删除字符串中的所有空格。例如,输入 asd afaa z67,则输出为 asdafaaz67。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中
12、填入你编写的若干语句。试题程序:#includestdio.h#includectype.h#includeconio.hvoid fun(char*str)main()char str81;char Msg=“Input a string:“;int n:printf(Msg);gets(str);puts(str);fun(str);printf(“*str:%s/n“,str);(分数:40.00)_正确答案:(void fun (char*str)int i=0;char*p=str;while(*p)if(*p!= ) /*删除空格*/stri=*p;i+;p+;stri=/0; /*加上结束符*/)解析:解析 本题要求删除所有空格,即保留除了空格以外的其他所有字符。由于 C语言中没有直接删除字符的操作,所以对不需要删除的字符采用“保留”的操作。用指针 p指向字符串中的每一个字符,每指向到一个字符都判断其是否为空格,若不是空格则保存到 stri。