1、国家二级 C语言机试(操作题)模拟试卷 72及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:求 ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参 n所指变量中。 ss所指字符串数组中共有 M个字符串,且串长 #include #define M 5 #define N 2 0 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; tti; i+) /*found*/ i
2、f(a void fun(int m, int *k, int xx) main() int m, n, zz1 0 0; Void NONO(); printf(“nPlease enter an integer number between 10 and 100: “); scanf(“ d“, &n); fun(n, &m, zz); print f (“nnThere aEe d non prime numbers lesS than d: “, m, n); for(n=0 ; nm; n+) printf(“n 4d“, zzn); NONO(); void NONO() /*请在
3、此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 */ int m, n, zz1 0 0; FILE*rf, *wf ; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); fscanf(rf, “ d“, &n); fun(n, &m, zz); fprintf(wf, “ dn dn“, m, n); for(n=0; nm; n+) fprintf(wf, “ dn“, zzn); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 72答案与解析 一、程序填空题 1 【正确答案
4、】 (1)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返回即可。