1、国家二级( C语言)机试模拟试卷 227及答案与解析 一、程序填空题( 30分) 1 函数 fun的功能是:计算 的前 n项之和。若x=2 5, n=15时,函数值为: 1 917914。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANKl C中。 不得增行或删行,也不得更改程序的结构 !#inolude#inoludedouble fun(double x, int n)double f, t, int i;/*found*/ f= 【 1】; t=一 1; for(i=1; i 二、程序修改题( 30分) 2 给定程序 MO
2、Dll C中函数 fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数 30800,则数字值为零的个数为 3,各位上数字值最大的是 8。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include int fun(unsigned n, int*zero) int count=0, max=0, t; do t=n 10; *found* if(t=0) count+; if(max void fun(int a
3、, int b, long*c) main() *主函数 * int a, b; long c; void NONO(); printf(“Input a, b: “); scanf(“ d d“, &a, &b); fun(a, b, &c); printf(“The result is: ld n“, c); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函 数,输出数据,关闭文件。 * FILE*rf, *wf; int i, a, b; long c; rf=fopen(“in daL“, “r“); wf=fopen(“out dat“, “w“); f
4、or(i=0; i10; i+) fscanf(rf, “ d, d“, &a, &b); fun(a, b, &c); fprintf(wf, “a= d, b= d, c= ld n“, a, b, c); fclose(rf); fclose(wf); 国家二级( C语言)机试模拟试卷 227答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)1 (2)一 1 (3)t 【试题解析】 第一空:由 “retum f; “可知 f是级数和,由审题分析可知,级数从第二项开始规律变化,因此循环从第二项开始计算,故 f初始化应为第一项的值,故第一空应为 “1“。 第二空:由审题分析可知
5、,级数的后一项在前一项的基础上乘以 (-1)*x,除以n,故第二空处应为 “-1“。 第三空: t是级数项, f把各个级数项累加起来,故第三空处应为 “t“。 二、程序修改题( 30分) 2 【正确答案】 (1)if(t=0) (2)*zero=count; 【试题解析】 (1)第一个标识下的 if语句是判断 t是否为 0,而原题给出的“if(t=0)“是将 0赋值给 t,所以将第一个标识下的 “if(t=0)“改为 “if(t=0)“。 (2)第二个标识下的 “zero=count; “语句,根据 fun函数中 zero的定义为指针型。所以,第二个标识下 “zero=count; “应该改为 “*zero=count; “。 三、程序设计题( 40分) 3 【正确答案】 *c=(b 10)*1000+(a 10)*100+(b 10)*10+(a 10); 【试题解析】 (1)分解两位数 的正整数 n的个位和十位数,可用 n 10和 n 10实现。 (2)设 x0、 x1、 x2、 x3为一位数,则 x0、 x110、 x2100、 x31000,可以分别使 xO、 xl、 x2、 x3构成个、十、百、千带权数,而 x0+x110+x2100+x31000构成四位数。本题最多只考虑四位数。