1、国家二级 C语言机试(操作题)模拟试卷 546及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 将形参 s所指字符串中所有 ASCII码值小于 97的字符存入形参 t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。 例如,形参 s所指的字符串为: Abelx56*,程序执行后 t所指字符数组中的字符串应为: A156*。 注意:部分源程序在文件 BIANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h int fun(char*s, char*t) int n=0; while(*s) if(*s
2、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: s n“, n, t); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:给定 r1个实数,输出平均值,并统计平均值以上 (含平均值 )的实数个数
3、。例如, n=8时,输入 193 199、 195 673、195 757、 196 051、 196。 092、 196 596、 196 579、 196 763、所得平均值为195 838745,在平均值以上的实数个数应为 5。 请改正程序中的错误,使其能得出正确的结果。 注意:部分源程序在文件 MODll C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #1nclude stcllib h #include conio h #include Stdio h int fun(float x, int n) *found* int j, c=0; flo
4、at xa=0 0; for(j=0; j n; j+) xa+=xj n; printf(“ave= f n“, 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, 19 6 092, 196 596, 196 579, 196 763); system(“cls“); printf(“ d n“, fun(x, 8); 三、程序设计题 3 编写函数 fun,其功能是:根据以下公式求 P的值,结果由函数值带回。 m与 n为两
5、个正整数且要求 m n。 例如: m=12, n=8时,运行结果为495 000000。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h float fun(int m, int n)main() *主函数 * void NONO(); printf(“P= f n“, fun(12, 8); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*fp, *wf; int i, m, n; f
6、loat 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, “ f n“, s); fclose(fp); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 546答案与解析 一、程序填空题 1 【正确答案】 (1)* s (2)s+ (3)n 【试题解析】 填空 1:判断 s所指向的字符串中的字符符合条件时,将当前字符存放到 t指向的字符串中,所以应填 *s。 填空 2:判断完
7、一个字符之后,将字符串的指针移到下一个位置,所以应填 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 “; “应改为 “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函数,来计算三个阶乘的除法。