1、国家二级 C语言机试(操作题)模拟试卷 499及答案与解析 一、程序填空题 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 #include char* fun(char tt) int i; for(i = 0; tt i; i+) /* fou
2、nd* */ if (a void 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(“nnThere are %d non- prime numbers less than %d:“, m, n); for(n =0; n m; n+) printf(“n %4d“, zzn); NONO(); void NONO() *请在此
3、函数内打开文件,输入测试数 据,调用 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, “%dn%dn“/ m, n) ; for(n = 0; n m; n+) fprintf(wf, “%dn“, zzn); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 499答案与解析 一、程序填空题 1 【正确答案】 (1)
4、M (2) (3)k 【试题解析】 第一空:循环的目的是在 M个字符串中寻找长度最短的字符串,因此,循环变量 i从 0变化到 “M-1”,故第一空处应为 “M”。 第二空: “*n”记录最小字符串的长度,由审题分析可知,字符串 ssi长度比min小,则交换最小长度值和下标位置,故第二空处应为 “”。 第三空:变量 k记录了最 小字符串的下标位置,函数的返回值是最短的字符串所在的行下标,故第三空处应为 “k”。 二、程序修改题 2 【正确答案】 (1)if(a=tti) (tti=z) (2)tti一 =32; 【试题解析】 (1)第一个错误标识下的 if判断语句中的逻辑有误,应该是与 (&)的
5、关系,不是或 ()的关系, 所以 if判断语句改为 “if(a=tti)&(tti=z)”。 (2)第二个标识下小写字母转换为大写字母的转换算法有误,小写转换为大写应该是 减去 32,而不是加上 32,所以 “tti+=32; ”改为 “tti-=32; ”。 三、程序设计题 3 【正确答案】 int i, j; int t=0; 初始化数组个数 for(i=2; im; i+) 循环判断小于 n的数是否为素数 j=2; while(ji) if(i j=0) 如果 i不是素数 xxt=i; t+; break; j+; *k=t; 【试题解 析】 (1)根据求素数的方法判断数 i是否为素数。 (2)把不是素数的数留下来,其方法是:如果该数是素数则不处理;如果不是素数则放到数组 xx中,并且把数组的下标加 1,为下一个不是素数的数放在数组中做准备。 (3)返回个数,把 xx数组中已经写入的数的个数返回即可,即把数组 xx的最大下标加 1返回即可。