1、国家二级 C语言机试(操作题)模拟试卷 115及答案与解析 一、程序填空题 1 函数 fun的功能是:统计长整数 n的各个位上出现数字 1、 2、 3的次数,并通过外部 (全局 )变量 c1, c2, c3返回主函数。例如:当 n=123114350时,结果应该为:c1=3 c2=1 c3=2。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include int c1, c2, c3; void fun(long n) c1=c2=c3=0; while (n) *f
2、ound* switch(_1_) *found* case 1: c1+; _2_; *found* case 2: c2+; _3_; case 3: c3+: n =10; main() long n=123114350L; fun(n); print: f(“ nThe result: n“); print: f(“n= 1d c1= d c2= d c3= d n“, n, c1, c2, c3); 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。例如,若输
3、入无符号整数 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(maxt; )max=t; n=n 10; while(n); *found* zero=count; retumrmax; main() unsqned n; int zero, m
4、ax; printf(“ nInput n(unsigned): “); scanf(“ d“, n); max=fun(n, zero); printf(“ nThe result: max= d zero= d n“, max, zero); 三、程序设计题 3 请编写函数 fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给 n输入 50后,输出为: s=1 718282。 注意:要求 n的值大于 1但不大于 100。 部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #included
5、ouble fun(int n)NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * FTLE*rf, *wf; int n, i; double s; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “W“); for(i=0; i 国家二级 C语言机试(操作题)模拟试卷 115答案与解析 一、程序填空题 1 【正确答案】 (1)n 10 (2)break (3)break 【试题解析】 第一空: switch内部是统计数字 1、 2、 3的个数,因此 switch条件是 n的一位数。由 “n =10; ”在
6、循环中, n每次减小为以前的 1 10,即 n逐步往右边移出一个整数位,移出的整数位可由 n 10可求得,故第一空处应填 “n10”。 第二空: C语言中, case语句后都要加 “break”语句,否则会执行多个 case语句,因此第二空处应为 “break”。 第三空:理由同上,第三空处应填 “break”。 二、程序修改题 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; ”。 三、程序设计题 3 【正确答案】 double s=0, t=1; int i; for(i=1; i=n; i+) t *=i; s+=1 t; return s; 【试题解析】 (1)根据题干中给出的数列,推出每一项分母是在前一项分母的基础上乘当前项数,第 n项的项数为 n。 (2)在循环中求得每一项,然后对其进行累加求和。