1、国家二级 C语言机试(操作题)模拟试卷 432及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是: 将形参 s所指字符串中所有 ASCII码值小于 97的字符存入形参 t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。 例如,形参 s所指的字符串为:Abelx56*,程序执行后 t所指字符数组中的字符串应为:A156*。 注意:部分源程序在文件BLANK1C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh int fun(char*s,char *t
2、) 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; printf(“/nEnter a string:/n“); gets(s);n=fun(s,t); printf(“/nThere ared letter which ASCII code is lesS than 97: s/n“,n,t);(分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中
3、,函数 fun的功能是:给定 n个实数,输出平均值,并统计平均值以上 (含平均值)的实数个数。例如,n=8 时,输入193199、195673、195757、196051、196092、196596、196579、196763、所得平均值为195838745,在平均值以上的实数个数应为 5。 请改正程序中的错误,使其能得出正确的结果。 注意:部分源程序在文件 MOD11C 中,不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序:Iir1clude stdlibh #include conioh #include stdioh int fun(float x,int r1)
4、/*found*/ int j,c=0 ; float xa=00; for(j=0;j n;j+) xa+=xj/n;printf(“ave=f/r1“,xa);for(j=0;j n ; j+)/*found*/ if(xj = xa) c+; return c;main()float x100=193199,195673,195757,196051,196092,196596,196579,196763); system(“cls“); printf(“d/n“,fun(x,8);(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,其功能是:根据以下公式
5、求 P的值,结果由函数值带回。m 与 n为两个正整数且要求 m n。 (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 432答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是: 将形参 s所指字符串中所有 ASCII码值小于 97的字符存入形参 t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。 例如,形参 s所指的字符串为:Abelx56*,程序执行后 t所指字符数组中的字符串应为:A156*。 注意:部分源程序在文件BLANK1C 中。 不得增行或删行,也不得更改程序的结构!
6、试题程序: #include stdioh int fun(char*s,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; printf(“/nEnter a string:/n“); gets(s);n=fun(s,t); printf(“/nThere ared letter which ASCII code is lesS than 97: s/n“,n,
7、t);(分数:2.00)_正确答案:(正确答案:(1)*s (2)s+ (3)n)解析:解析:填空 1:判断 s所指向的字符串中的字符符合条件时,将当前字符存放到 t指向的字符串中,所以应填*s。 填空 2:判断完一个字符之后,将字符串的指针移到下一个位置,所以应填 s+。 填空3:题目要求函数要返回符合条件的字符个数 n,所以应填 n。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:给定 n个实数,输出平均值,并统计平均值以上 (含平均值)的实数个数。例如,n=8 时,输入193199、195673、195757、196051、196092、196596
8、、196579、196763、所得平均值为195838745,在平均值以上的实数个数应为 5。 请改正程序中的错误,使其能得出正确的结果。 注意:部分源程序在文件 MOD11C 中,不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序:Iir1clude stdlibh #include conioh #include stdioh int fun(float x,int r1)/*found*/ int j,c=0 ; float xa=00; for(j=0;j n;j+) xa+=xj/n;printf(“ave=f/r1“,xa);for(j=0;j n ; j+)
9、/*found*/ if(xj = xa) c+; return c;main()float x100=193199,195673,195757,196051,196092,196596,196579,196763); system(“cls“); printf(“d/n“,fun(x,8);(分数:2.00)_正确答案:(正确答案:(1)int j,c=0;float xa =00; (2)if(xj =xa)解析:解析:(1)本题着重考查考生对 C语言基本语法以及比较运算符的掌握情况。 (2)本题中的第一个错误:在 C语言中,应成对出现,所以程序中的语句“int j,c=0;float x
10、a=00;“应改为“int j,c=0;float xa=00;“或相同作用的语句; 本题中的第二个错误:在 C语言中,判断大于或等于的运算符应为 =,所以程序中的语句“if(xj = xa)“应改为“if(xj =xa)“或相同作用的语句。三、程序设计题(总题数:1,分数:2.00)3.编写函数 fun,其功能是:根据以下公式求 P的值,结果由函数值带回。m 与 n为两个正整数且要求 m n。 (分数:2.00)_正确答案:(正确答案: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 =10 *jc (m)/jc (n)/jc (m 一 n) ; return p; )解析:解析:本题考查算术运算的算法,先建立一个 jc函数来计算 m的阶乘,函数中使用一个 for循环来计算 m的阶乘,并将计算结果作为函数的返回值。在 fun函数中调用 jc函数,来计算三个阶乘的除法。