1、国家二级( C语言)机试模拟试卷 359及答案与解析 一、程序填空题( 30分) 1 函数 fun的功能是:统计所有小于等于 n(n2)的素数的个数,素数的个数作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include int fun(int n) int i, j, count=0; printf(” nThe prime number between 3 to d n”, n); for(i=3; i=i) count+; printf(coun
2、t 15? ” 5d”: ” n 5d”, i); ) return count; main() ( int n=20, r; r=fun(n); printf(” nThe number of prime is: d n”, r); 二、程序修改题( 30分) 2 给定函数 MODll C中函数 fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含 5位八进制数字字符。 例如, 若输入: 77777,则输出将是: 32767。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构
3、。 #include #include #include int fun(char *p) int n; /*found*/ n=*p-o; p+; while(p*!=0) /*found*/ n=n*8+*P-o; p+ return n; main() char s6; int i; int n; printf(“Enter a string (Ocatal digits): “); gets(s); if(strlen(s)5)printf(“Error: String too longer !nn“);exit(0); for(i=0; si; i+) if(si7) printf(
4、“Error: %c not is ocatal digits!nn“, si);exit(0); printf(“The original string: “); puts(s); n=fun(s); printf(“n%s is convered to integer number: %dnn“,s,n); 三、程序设计题( 40分) 3 请编写函数 fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他
5、函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #inclucle #include #define N 80 int fun(char*s) main() (char lineN; int num=0; voidNONO(); printf(”Enter a string: n”); gets(line); num=fun(line); printf(”The number of word is: d n n”, num); NONO(); void NONO() *请在此函数内打开文件,输入测试数据, 调用 fun函数,输出数据,关闭文件。 * FTLE*rf, *wf
6、; int i, num; char lineN, *p; rf=fopen(”in dat”, ”r”); wf=fopen(”out dat”, ”w”); for(i=0; i2,由 “printf(“nThe prime number between 3 to %dn“, n);”可知,从 3开始寻找素数,故第一空处应为 “j=3”。 第二空:由审题分析可知,判断 i是否是素数用 2、 3、 、 i-1这些数逐个去除 i即可,故第二空处应为 “i”。 第三空:由 “count+; printf( count%15? “%5d“:“ n%5d“, i);” 可知找到一个素 数 i了,在
7、i是素数的时候,变量 j从 2到 i-1都不能被 i整除,退出 for循环的是 j的值已经变成 i了,故判断 j是否大于等于 i便可知 i是不是素数,所以第三空应为“j”。 二、程序修改题( 30分) 2 【正确答案】 n=*p-0; n=n*8+*p-0; 【试题解析】 ( 1)第一个标识下面:语句 “n=*p-o;”中的 o不是数字零,而是字母 o,根据前面的分析因此改为: “n=*p-0;”。 ( 2)第二个标识下面:语句 “n=n*8+*P-o”,首先进行同( 1)相同的修改,变 量P没有定义,根据题意要求这里应该是 “*p-0”,所以此句改为: “n=n*8+*p-0;”。 三、程序设计题( 40分) 3 【正确答案】 int i,n=0; /字符统计初始值设置为 0 for(i=0;i=a /单词统计计数器加 1 return n; /返 回统计值 【试题解析】 ( 1)首先,求得字符串的长度。 ( 2)只要小于字符串的长度,就对字符进行循环判断。 ( 3)根据题干要求,只要字符是小写字母,并且下一个紧靠的字符是空格或者尾符,那么单词统计计数器就加 1。