1、国家二级( C语言)机试模拟试卷 309及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:将形参 n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。 例如,从主函数输入一个整数: 27638496,函数返回值为: 26846。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include unsigned long fun(unsigned long n) unsigned long x=0, s, i
2、; int t; s=n; *found* i= 【 1】; *found* while(【 2】 ) t=s 10; if(t 2=0) *found* x=x+t*i; i=【 3】; s=s 10; return x; main() unsigned long n=一 1; while(n99999999 | n int fun(char*str, char*substr) int i, j, k, num=0; *found* for(i=0, stri, i+) for(j=i, k=0; substrk=strj; k+, j+) *found* If(substrk+1= 0)
3、num+; break; return num; main() char str80, substr80; printf(“Input a string: “); gets(str); printf(“Input a substring: “); gets(substr); printf(“ d n“, fun(str, substr); 三、程序设计题( 40分) 3 请编写函数 fun,其功能是:计算并输出当x 例如,在主函数中从键盘给 x输入 0 21后,输出为: s=1 100000。 注意:部分源程序在文件PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数
4、fun的花括号中填入你编写的若干语句。 #include#includedouble fun(double x)NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * FILE*rf, *wf; int i; double s, x; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 国家二级( C语言)机试模拟试卷 309答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)1 (2)s (3)i*10 【试题解析】 第一空:由 “if(t 2=0)x=x+-t*i;
5、i=【 3】; “可知,如果 t是偶数,那么 t添加到返回值里面,比如第一次得到 t=2,那么 x=0+2*l;下一次得到了 t=4,那么此时 x的值应该是 2+2*10;再下一次得到 t=2,那么 x=22+2*100,即 x的值是在上一次值的基础上加上新得到 的值乘以其权值,因此 i是代表权值。第一空处是初始化 i,第一次进入 if语句时, x是个 1位数,此时权值 i应为 1,做第一空处应为 “1“, 第二空:第二空处是填循环的终止条件,在循环体内, s每次缩小 10倍,在最后一次进入循环的时候, s是一个一位数, s 10之后 s变成 0,下次就不应该进入while循环,因此 whil
6、e循环的终止条件是 s不为 0,故第二空处为 “s“或 “s!=0“。 第三空:由第一空的分析可知权值 i是在上一次的基础上增加 10倍,故第三空处应为 “i*10“。 二、程序修改题( 30分) 2 【正确答案】 (1)for(i=0; stri; i+) (2)if(substrk+1= 0) 【试题解析】 (1)第二个标识下的 for循环中的循环表达式之间是使用分号来进行分割的,所以第二个标识下 “for(i=0, stri, i+)“改为 “for(i=0; stri; i+)“。 (2)第二个标识下 “If(substrk+1= 0)“,含义是判断 substr是否到达了尾部,这里应
7、该用 if来判断,在 C语言中没有 “If“关键字,故第二标识处应改成“if(substrk+1= 0)“。 三、程序设计题( 40分) 3 【正确答案】 int n=1; *循环计数 * double sn=1; *累计数 * double xn=1, xn1=0; *x的 n值,以及 x 的 n一 1值; * while(fabs(xn-xn1)=0 000001) *绝 对值是否满足条件 * xn=xn*x*(0 5-n+1) n; *表达式分解 以后 xn=(xn-1)*x*(0 5-n+1) n* n+=1; sn+=xn; *sn累加上 xn* return(sn); 【试题解析】 (1)根据题干中给出的数列,推出每一项分子是在前一项分子的基础上乘以 (0 5-n+1)*x,分母则为阶乘,也就是在前一项分母的基础上乘以 n。 (2)在循环中求得每一项,然后对其进行累加求和。