1、国家二级 C语言机试(操作题)模拟试卷 499及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:求 ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参 n所指变量中。ss 所指字符串数组中共有 M个字符串,且串长 #include #define M 5 #define N 20 int fun(char (*ss)N, int *n) int i, k=0, len= N; /* found*/ for(i=0; i_二、程序修改题(总题数:1,分数:2.00)2.给定程序 M
2、ODI1C 中函数 fun的功能是:将 tt所指字符串中的小写字母都改为对应的大写字母,其他字符不变。 例如,若输入“Ab,cD“,则输出“AB,CD“。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! #include #include char* fun(char tt) int i; for(i = 0; tt i; i+) /* found* */ if (a=tti) | | (tti=z) /* found* */ tti += 32; return(tt); main () char tt81; printf(“/
3、nPlease enter a string:“); gets(tt); printf(“/nThe result string is: /n%s“, fun(tt); (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,其功能是:将所有大于 1小于整数 m的非素数存入 xx所指数组中,非素数的个数通过 k传回。 例如,若输入:17,则应输出: 4 6 8 9 10 12 14 15 16。 注意:部分源程序在文件PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。#include stdio.
4、hvoid fun (int m, int *k, int xx )main () int m, n, zz100;void NONO () ; printf(“/nPlease enter an integer number between 10 and 100: “);scanf(“%d“, fun(n, printf(“/n/nThere are %d non-prime numbers less than %d:“, m, n);for(n =0; n m; n+)printf(“/n %4d“, zzn);NONO();void NONO()*请在此函数内打开文件,输入测试数据,调用
5、 fun函数,输出数据,关闭文件。*int m, n, zz 100 ;FILE *rf, *wf ;rf = fopen(“in.dat“,“r“);wf = fopen(“out.dat“,“w“);fscanf(rf, “%d“, fun (n, fprintf(wf, “%d/n%d/n“/ m, n) ; for(n = 0; n m; n+) fprintf(wf, “%d/n“, zzn);fclose(rf);fclose(wf); (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 499答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数
6、:2.00)1.给定程序中,函数 fun的功能是:求 ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参 n所指变量中。ss 所指字符串数组中共有 M个字符串,且串长 #include #define M 5 #define N 20 int fun(char (*ss)N, int *n) int i, k=0, len= N; /* found*/ for(i=0; i_正确答案:(正确答案:(1)M (2) (3)k)解析:解析:第一空:循环的目的是在 M个字符串中寻找长度最短的字符串,因此,循环变量 i从 0变化到“M-1”,故第一空处应为“M”。 第
7、二空:“*n”记录最小字符串的长度,由审题分析可知,字符串ssi长度比 min小,则交换最小长度值和下标位置,故第二空处应为“二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:将 tt所指字符串中的小写字母都改为对应的大写字母,其他字符不变。 例如,若输入“Ab,cD“,则输出“AB,CD“。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! #include #include char* fun(char tt) int i; for(i = 0; tt i; i+) /* foun
8、d* */ if (a=tti) | | (tti=z) /* found* */ tti += 32; return(tt); main () char tt81; printf(“/nPlease enter a string:“); gets(tt); printf(“/nThe result string is: /n%s“, fun(tt); (分数:2.00)_正确答案:(正确答案:(1)if(a=tti)(tti=z) (2)tti一=32;)解析:解析:(1)第一个错误标识下的 if判断语句中的逻辑有误,应该是与(void NONO () ; printf(“/nPlease
9、enter an integer number between 10 and 100: “);scanf(“%d“, fun(n, printf(“/n/nThere are %d non-prime numbers less than %d:“, m, n);for(n =0; n m; n+)printf(“/n %4d“, zzn);NONO();void NONO()*请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*int m, n, zz 100 ;FILE *rf, *wf ;rf = fopen(“in.dat“,“r“);wf = fopen(“ou
10、t.dat“,“w“);fscanf(rf, “%d“, fun (n, fprintf(wf, “%d/n%d/n“/ m, n) ; for(n = 0; n m; n+) fprintf(wf, “%d/n“, zzn);fclose(rf);fclose(wf); (分数:2.00)_正确答案:(正确答案: int i,j; int t=0; 初始化数组个数 for(i=2; im;i+) 循环判断小于 n 的数是否为素数 j=2; while(ji) if(ij=0) 如果 i不是素数 xxt=i; t+; break; j+; *k=t; )解析:解析:(1)根据求素数的方法判断数 i是否为素数。 (2)把不是素数的数留下来,其方法是:如果该数是素数则不处理;如果不是素数则放到数组 xx中,并且把数组的下标加 1,为下一个不是素数的数放在数组中做准备。 (3)返回个数,把 xx数组中已经写入的数的个数返回即可,即把数组 xx的最大下标加 1返回即可。