1、国家二级 C语言机试(操作题)模拟试卷 2及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:将形参 S所指字符串中所有 ASCII码值小于97的字符存入形参 t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。 例如,形参 S所指的字符串为: Abc1x56*,程序执行后 t所指字符数组中的字符串应为: A156*。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得 增行或删行,也不得更改程序的结构 ! #include stdio h int fun(char *s,
2、char *t) int n=0; while(*s) if(*s 97) *found* *(t+n)=_1_; n+; *found* _2_; *(t+n)=0; *found* return _3_; main() char s81, t81; int n; print f(“ nEnter a string: n“); gets(s); n=fun(s, t); printf(“ nThere are d letter which ASCII code is less than 97: s n“, n, t); 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:判断
3、一个整数是否是素数,若是返回 1,否则返回 0。 在 main()函数中, 若 fun返回 1输出 YES,若 fun返回 0输出 NO!。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数。不得增行或删行,也不得更改程序的结构 ! #include stdio h int fun(int m) int k=2; while (k =m&(m k) *found* k+ *found* if (m=k) return 1; else return 0; main() int n; printf(“ nPlease enter n: “); scanf(“ d“, &n)
4、; if(fun (n)print f(“YES n“); else printf(“NO! n“); 三、程序设计题 3 请编写函数 fun,函数的功能是:将大于形参 m且紧靠 m的 k个素数存入 XX所指的数组中。例如,若输入 17, 5,则应输出: 19, 23, 29, 3 1, 37。 注意:部分源程序在文件 PROG1 C文件中 。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include stdio h Void fun(int m, int k, int xx) Main() int m, n, zz1000; void
5、 NONO (); printf(“ nPlease enter two integers: “); scanf(“ d d“, &m, &n); fun(m, n, zz); for(m=0 ; m n ; m+) printf(“ d“, zzm); printf(“ n“); NONO(); Void NONO() *本函数用于打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。* int m, n, zz1000, i; FILE *rf, *Wf; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 1
6、0; i+) fscan f(rf, “ d d“, &m, &n); fun(m, n, zz); for(m=0 ; m n ; m+) fprintf (wf, “ d“, zzm); fprintf(wf, “ n“); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 2答案与解析 一、程序填空题 1 【正确答案】 (1)*s (2)s+ (3)n 【试题解析】 第一空: “木 (t+n)=_1_; n+; ”是将字符 *s保存在 t所指的字符串里, n记录满足条件的字符的个数 ,故第一空处应为 “*s”。 第二空: “while(*s)”循环的
7、终止条件是达到 s字符串的结束,因此在循环体内 s应该不断往字符串尾移动,故第二空处应为 “s+”。 第三空: “return_3_; ”返回符合条件的字符的个数, n保存了符合条件的字符个数,故返回值为 n,因此第三空处应为 “n”。 二、程序修改题 2 【正确答案】 (1)k+; (2)if(m=k) 【试题解析】 (1)第一个标识下 “k+”语句没有结束符分号,所以将 “k+”改为“k+; ”。 (2)第 二个标识下的 “if(m=k)”语句应该是判断 m是否素数,而原题中是将 k的值赋给 m,并不表示是否 m等于 k,所以第二个标识下 “if(m=k)”应该改为“if(m=k)”。 三
8、、程序设计题 3 【正确答案】 int r=0, temp, p, sign=1; for(temp=m+1; temp m*m; temp+) 从 temp开始循环,判断紧靠 temp的整数 for(p=2; p temp; p+) if(temp p!=0)判断 temp是否为素数 sign=1;若是素数,标志设为 1 else sign=0;若不是素数,标志设为 0 break; if(sign=1&p =temp) if(k =0) 判断已有的素数个数是否已经满足 sum个 xxr+=temp;将素数 temp存入数组 select k-; 将题目中要求的素数个数减 1 else break; 【试题解析】 进入 fun函数,根据前面的分析: 首先,定义、初始化变量 sign,作为素数的标志;定义 r,初始化为存储素数数组的起始位。 然后,每判断一次 temp中的值是否为素数后,使 temp的值增 1,再次对 temp中新的值进行判断其是否为素数,不断循环此过程,直到 m的值等于指定的个数,即函数中的 k个数。