1、国家二级 C语言机试(操作题)模拟试卷 193及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:将形参 n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。 例如,从主函数输入一个整数: 27638496,函数返回值为: 26846。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include unsigned long fun(unsigned long n) unsigned long x=0, s, i; i
2、nt 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 long fun(int x, int y, long *p) int i ; long t=1; *found* for(i=1; i float fun(float*a, int n) main() float Score30=90 5, 72, 80, 61 5, 55, aver ;
3、void NONO(); aver=fun(score, 5); printf(“ nAverage score is: 5 2f n“, aver); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*fp, *wf; int i, j; float aver, score5; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i10; i+) for(j=0; j5 ; j+)fscanf (fp, “ f, “, Scorej); aver=fun(s
4、core, 5); fprintf(wf, “ 5 2f n“, aver); fclose(fp); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 193答案与解析 一、程序填空题 1 【正确答案】 (1)1 (2)s (3)i*10 【试题解析】 第一空:由 “if(t 2=0)x=x+t*i; i=_3_; ”可知,如果 t是偶数,那么 t添加到返回值里面,比如第一次得到 t=2,那么 x=0+2*1;下一次得到了 t=4,那么此时 x的值应该是 2+2*10;再下一次得到 t=2,那么 x=22+2*100,即 x的值是在上一次值的基础上加上新得到的值乘以其权值,因此
5、 i是代表权值。 第一空处是初始化 i,第一次进入 if语句时, x是个 1位数,此时权值 i应为 1,故第一空处应为 “1”。 第二空:第二空处是填循环的终止条件,在循环体内, s每次缩小 10倍,在最后一次进入循环的时候, s是一个一位数, s 10之后 s变成 0,下次就 不应该进入while循环,因此 while循环的终止条件是 s不为 0,故第二空处为 “s”或 “s!=0”。 第三空:由第一空的分析可知权值 i是在上一次的基础上增加 10倍,故第三空处应为 “i*10”。 二、程序修改题 2 【正确答案】 (1)for(i=1; i=y; i+) (2)t=t 1000; 【试题解
6、析】 (1)第一个标识下的 “for(i=1; iy; i+)”说明进行了 y-1次方,而不是 y次方, y是主函数中的,所以将 “for(i=1; iy; i+)”改为 “for(i=1; i=y;i+)”。 (2)题目中要求截取前面求得结果的低三位,因此,第二个标识下 “t=t 1000; ”应该改为 “t-t 1000; ”。 三、程序设计题 3 【正确答案】 int i; float ave=0 0; for(i=0; in; i+)ave=ave+ai; ave=ave n ; return ave; 【试题解析】 (1)在函数中首先定义平均分的变量,并将其初始化值置为 0。 (2)然后在 for循环中,求得所有成绩的总分,并在总分的基础上求得平均分。