1、二级 C 语言机试-202 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:输出一个 NN 矩阵,要求非对角线上的元素赋值为 0,对角线元素赋值为 1。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。试题程序:#includestdio. h#define N 10main ( )int bbN N;int i, j,n;clrscr ();printf (“ /nInput n:/n“);scanf (“%d“, f
2、or (i=0; in; i+)for (j=0; jn; j+)【1】 ;if (i=j)bbi j= 【2】 ;if ( 【3】 )bbi j=1;printf(“ /n* the result * /n“);for (i=0; in; i+)printf (“ /n/n“);for (j=0; jn; j+)printf (“%4d“,bb i j );(分数:30.00)填空项 1:_二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:求 k!(k13),所有阶乘的值作为函数值返回。例如:若k=10,则应输出 3628800。请改正程序中的错误,使它
3、能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.hlong fun(int k)/*found*/if k0return (k* fun (k-l);/*found*/else if (k=0)return 1;main ( )int k=10;clrscr ();print, (“%d!=%1d/n “, k, fun (k);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)3.请编写函数 fun(),该函数的功能是:统计一行字符串中单词的个数,作为函数
4、值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#includestring. h# includestdio, h#define N 80int fun (char *s)main ( )char line N;int num=0;printf (“Enter a string: /n “);gets (line);num=fun (line);printf (“The number of word
5、 is: %d/n/n “,num);(分数:40.00)_二级 C 语言机试-202 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)1.请补充 main 函数,该函数的功能是:输出一个 NN 矩阵,要求非对角线上的元素赋值为 0,对角线元素赋值为 1。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在 main 函数的横线上填入所编写的若干表达式或语句。试题程序:#includestdio. h#define N 10main ( )int bbN N;int i, j,n;clrscr ();printf (“
6、/nInput n:/n“);scanf (“%d“, for (i=0; in; i+)for (j=0; jn; j+)【1】 ;if (i=j)bbi j= 【2】 ;if ( 【3】 )bbi j=1;printf(“ /n* the result * /n“);for (i=0; in; i+)printf (“ /n/n“);for (j=0; jn; j+)printf (“%4d“,bb i j );(分数:30.00)填空项 1:_ (正确答案:bbij=0 (2)1 (3)j=n-1-i)解析:解析 填空 1:本题的解题思路是先将所有元素都置 0,然后再将对角线上的元素置
7、1。所以此空是先将当前元素置 0。填空 2:如果当前元素的下标 i 和 j 相等,则此元素是主对角线元素,要将它赋值为 1。填空 2:如果当前元素的下标 i 和 j 满足关 j=n-1-i,则此元素也是对角线元素,也要将它赋值为 1。二、改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是:求 k!(k13),所有阶乘的值作为函数值返回。例如:若k=10,则应输出 3628800。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conio.h#include stdio.h
8、long fun(int k)/*found*/if k0return (k* fun (k-l);/*found*/else if (k=0)return 1;main ( )int k=10;clrscr ();print, (“%d!=%1d/n “, k, fun (k);(分数:30.00)填空项 1:_ (正确答案:错误:if k0 正确:if(k0)(2)错误:else if(k=O) 正确:else if(k=O))解析:解析 由数学知识我们可以知道,0 和 1 的阶乘都等于 1,if kO 中是一个简单的语法错误,if后面没有“()”说明,在 else if(k=0)中,程序
9、想说明的是“如果 k 值为 0,则函数返回 1”,转换成 c语言语句就是“else if(k=0) return 1”。三、编程题(总题数:1,分数:40.00)3.请编写函数 fun(),该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题程序:#includestring. h# includestdio, h#define N 80int fun (ch
10、ar *s)main ( )char line N;int num=0;printf (“Enter a string: /n “);gets (line);num=fun (line);printf (“The number of word is: %d/n/n “,num);(分数:40.00)_正确答案:(int fun(char *s)int i, j=0;for (i=0;s i!=/0 ;i+)if(si != return j; /*返回单词个数*/)解析:解析 判断单词的个数,我们首先想到的是程序怎样识别是一个单词,也即循环语句中的fir(i=0;si!=“/0“;i+),本题重点是 if 句中的条件表达方式。