1、二级 C语言机试-297 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充函数 fun,其功能是:计算并输出给定 10个数的方差:(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:先从键盘上输入一个 3行 3列的矩阵的各个元素的值,然后输出主对角线元素之和。请改正函数 fun()中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include stdio.hint fun()int a3 3,sum;in
2、t i,j;/*found*/sum=1;for (i=0;i3;i+)for (j=0;j3;j+)/*found*/scanf(“%d“,aij);for(i=0;i3;i+)sum=sum+aii;printf(“Sum=%d/n“,sum);main()fun();(分数:30.00)_三、编程题(总题数:1,分数:40.00)3.请编写一个函数 fun(),它的功能是:比较两个字符串的长度,(不得调用 C语言提供的求字符串长度的函数),函数返回较 K的字符串。若两个字符串长度相等,则返回第 1个字符串。例如,输入 beijingCRshanghaiCR(CR为回车键),函数将返回 s
3、hanghai。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。试题程序:#includestdio.hchar *fun(char *s, char *t)main()char a20,b10,*p,*q;int i;printf (“Input 1th string: “);gets(a);printf“Input 2th string: “);gets(b);printf(“%s“,fun(a,b);(分数:40.00)_二级 C语言机试-297 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题
4、数:1,分数:30.00)1.请补充函数 fun,其功能是:计算并输出给定 10个数的方差:(分数:30.00)填空项 1:_ (正确答案:1 sum+=xi 2 abs+=(xi-avg)*(xi-avg) 3 sqrt(abs/10))解析:解析 填空 1:根据求方差的公式可知,首先要求出 10个数的平均值,此处是利用 for循环对 10个数求累加和。填空 2:使用 for循环求出每个数与平均值之差的平方和。填空 3:通过开方,求出 10个数的方差,此处需要注意对库函数 sqrt()的调用。二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:先从键盘上输
5、入一个 3行 3列的矩阵的各个元素的值,然后输出主对角线元素之和。请改正函数 fun()中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include stdio.hint fun()int a3 3,sum;int i,j;/*found*/sum=1;for (i=0;i3;i+)for (j=0;j3;j+)/*found*/scanf(“%d“,aij);for(i=0;i3;i+)sum=sum+aii;printf(“Sum=%d/n“,sum);main()fun();(分数:30.00)_正确答案:(1)错误:su
6、n=1; 正确:sum=0;(2) 错误:scanf(“%d“,aij); 正确:scanf(“%d“,)解析:解析 该题依然考查对循环语句的掌握和对数组概念的理解,根据题干主线,我们可以看清这样的一个解题思路:先从键盘输入一个 33矩阵,然后再循环累加执行循环语句中的 sum=sum+aii,所以 sum=0。三、编程题(总题数:1,分数:40.00)3.请编写一个函数 fun(),它的功能是:比较两个字符串的长度,(不得调用 C语言提供的求字符串长度的函数),函数返回较 K的字符串。若两个字符串长度相等,则返回第 1个字符串。例如,输入 beijingCRshanghaiCR(CR为回车键
7、),函数将返回 shanghai。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。试题程序:#includestdio.hchar *fun(char *s, char *t)main()char a20,b10,*p,*q;int i;printf (“Input 1th string: “);gets(a);printf“Input 2th string: “);gets(b);printf(“%s“,fun(a,b);(分数:40.00)_正确答案:(char *fun(char *s, char *t)int i
8、,i;for(i=0;si!= /0;i+); /*求字符串的长度*/for(j=0;ti!= /0;j+);if(i=j) /*比较两个字符串的长度*/return s; /*函数返回较长的字符串,若两个字符串长度相等,则返回第 1个字符串*/elsereturn t;)解析:解析 本题中,第 1个 for循环的作用是求出 s的字符个数 i,第 2个 for循环的作用是求出 t的字符个数 j,因为任何循环都要控制一条语句,所以在每一个 for循环条件后面必须要有一个分号。本题也可用如下技巧:char *fun(char *s,char *t)if(strlen(s)=strlen(t) return s;else return t;