1、国家二级( C语言)机试模拟试卷 292及答案与解析 一、程序填空题( 30分) 1 函数 fun的功能是进行数字字符转换。若形参 ch中是数字字符 0 9,则 0转换成 9, 1转换成 8, 2啭换成 7, , 9转换成 0; 若是其他字符则保持不变;并将转换后的结果作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include *found* 【 1】 fun(char ch) *found* if(ch=0& 【 2】 ) *found* retu
2、rn 9 (ch【 3】 ); return ch; main() char c1, c2; printf(“ nThe result: n“); c1=2; c2=fun(c1); printf(“c1= c c2= c n“, c1, c2); c1=8; c2=fun(c1); printf(“c1= c c2= e n“, c1, c2); c1=a; c2=fun(c1); printf(“c1= c c2= c n“, c1, c2); 二、程序修改题( 30分) 2 给定程序 MODll C中函数 fun的功能是:根据整型形参 m,计算 如下公式的值。 例如,若 m中的值为: 5
3、,则应输出:1 463611。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行。也不得更改程序的结构 !#includedouble fun(int m)double y=1 0 ; int i; *found* for(i=2; i 三、程序设计题( 40分) 3 请编写函数 fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给 n输入 15,则输出为:s=2 718282。 注意:要求 n的 值大于 1但不大于 100。 部分源程序在文件PROGl c中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入
4、你编写的若干语句。 #includedouble fun(int n)main() int n; double s ; printf(“Input n: “); scanf(“ d“, &n); s=fun(n); printf(“s= f n“, s); NONO(); NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * FILE*rf, *wf; int n, i; double s; rf=fopen(“in dat“,“r“); wf=fopen(“out dat“, “w“); for(i=0; i 国家二级( C语言)机试模拟试卷 292
5、答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)char (2)ch=0且 ch=19,故第二空处应为 ch=9。 第三空:数字字符转换规则是: 0啭换成 9, 1啭换成 8, 2转换成 7, , 9啭换成 0,即返回值为 9-(ch-0),故第三空处应为 “0“。 二、程序修改题( 30分) 2 【正确答案】 (1)for(i=2; i=m; i+) (2)y+=1 0 (i*i); 【试题解析】 (1)根据题干中给出的公式,可以 看到循环是从 2到 m,所以第一个标识下的 “for(i=2; im; i+)“应该改为 “for(i=2; i=m; i+)“。 (2)fun函
6、数中定义 y为浮点型,而 “1 (i*i)“返回整型,随着 i的增加,计算结果一直为 0,因此得不出最后正确结果。应将 “y+=1/(j*i); “整型改为 “y+=1 0(i*i); “浮点型。 三、程序设计题( 40分) 3 【正确答案】 double s=1; long t=1; int i; for(i=1; i=n; i+) t=t+i; *计算阶乘 * s+=1 t; *计算每项的值并累加至变 量 s中 * return s; *返回多项式的值 * 【试题解析】 (1)根据题干中给出的数列,推出每一项是阶乘的倒数,所以首先在循环中求得每一项的阶乘。其中阶乘的计算公式定义为:公式分为参数 n是 1和大于 1的两种情况,例如, 1的阶乘 1 !=1; 5的阶乘 5!=54321。 (2)然后求得阶乘分之一的累加和。