1、国家二级 C语言机试(操作题)模拟试卷 432及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 将形参 s所指字符串中所有 ASCII码值小于 97的字符存入形参 t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。 例如,形参 s所指的字符串为: Abelx56*,程序执行后 t所指字符数组中的字符串应为: A156*。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h int fun(char*s, char *t) int n=0; while(* s) if(*
2、s 97) /*found*/ *(t+n)=【 1】 ; n+; /*found*/ 【 2】 ; *(t+n)=0; /*found*/ return【 3】 ; main() char s81, t81; int n; printf(“nEnter a string: n“); gets(s); n=fun(s, t); printf(“nThere are d letter which ASCII code is lesS than 97: sn“, n, t); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:给定 n个实数,输出平均值,并统计平均值以上 (含平均值 )的实
3、数个数。 例如, n=8时,输入 193 199、 195 673、 195 757、 196 051、 196 092、196 596、 196 579、 196 763、所得平均值为 195 838745,在平均值以上的实数个数应为 5。 请改正程序中的错误,使其能得出正确的结果。 注意:部分源程序在文件 MOD11 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: : Iir1clude stdlib h #include conio h #include stdio h int fun(float x, int r1) /*found*/ int j,
4、 c=0 ; float xa=0 0; for(j=0; j n; j+) xa+=xj/n; printf(“ave= fr1“, xa); for(j=0; j n ; j+) /*found*/ if(xj = xa) c+; return c; main() float x100=193 199, 195 673, 195 757, 196 051, 196 092, 196 596, 196 579, 196 763); system(“cls“); printf(“ dn“, fun(x, 8); 三、程序设计题 3 编写函数 fun,其功能是:根据以下公式求 P的值,结果由函数
5、值带回。 m与 n为两个正整数且要求 m n。 例如: m=12, 13=8时,运行结果为495 000000。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容。仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h float fun(int m, int n)main()/*主函数 */void NONO(); prLntf(“P= fn“, fun(12, 8); NONO(); void NONO()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE, * fp, *wf;
6、 int i, m, n; float s; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 10 ; i+) fscanf(fp, “ d, d“, &m, &n); s=fun(m, n); fprintf(wf, “ fn“, s); fclose(fp); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 432答案与解析 一、程序填空题 1 【正确答案】 (1)*s (2)s+ (3)n 【试题解析】 填空 1:判断 s所指向的字符串中的字符符合条件时,将当前字符存放到 t指向的字符串中,所以应
7、填 *s。 填空 2:判断完一个字符之后,将字符串的指针移到下一个位置,所以应填 s+。 填空 3:题目要求函数要返回符合条件的字符个数 n,所以应填 n。 二、程序修改题 2 【正确答案】 (1)int j,c=0; float xa =0 0; (2)if(xj =xa) 【试题解析】 (1)本题着重考查考生对 C语言基本语法以及比较运算符的掌握情况。 (2)本题中的第一个错误: 在 C语言中, 应成对出现,所以程序中的语句 “int j,c=0; float xa=0 0; “应改为 “int j, c=0; float xa=0 0; “或相同作用的语句; 本题中的第二个错误:在 C语
8、言中,判断大于或等于的运算符应为 =,所以程序中的语句 “if(xj = xa)“应改为 “if(xj =xa)“或相同作用的语句。 三、程序设计题 3 【正确答案】 long jc (int m) long s =1; int i ; for(i=1; i =m; i+) s=s*i ; return s; float fun (int m, int n) float p; p =1 0 *jc (m)/jc (n)/jc (m 一 n) ; return p; 【试题解析】 本题考查算术运算的算法,先建立一个 jc函数来计算 m的阶乘,函数中使用一个 for循环来计算 m的阶乘,并将计算结果作为函数的返回值。在fun函数中调用 jc函数,来计算三个阶乘的除法。