1、国家二级 C语言机试(操作题)模拟试卷 63及答案与解析 一、程序填空题 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(r1) /*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); printf(“nThe result: n“); printf(“n= ld cl= d c2= d c3= dn“, n, c1, c2, c3); 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数; 并把该整数中各位上最大的数字值作 为函数值返回
3、。例如,若输入无符号整数30800,则数字值为零的个数为 3,各位上数字值最大的是 8。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include int fun(unsigned r1, 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; return max; main() unsiqned n; i
4、nt zero, max; printf(“nlnput n(unsigned): “); Scanf(“ d“, &r1); max=fun(n, &zero); printf (“nThe result: max= d zero= dn“, max, zero); 三、程序设计题 3 请编写函数 fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给 n输入 50后,输出为: s=1 718282。 注意:要求 n的值大于 1但不大于 100。 部分源程序在文件PROG1。 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句
5、。 #inoludedouble 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语言机试(操作题)模拟试卷 63答案与解析 一、程序填空题 1 【正确答案】 (1)n 10 (2)break (3)break 【试题解析】 第一空: switch内部是统计数字 1、 2、 3的个数,因此 switch条件是 n的一位数。由
6、 “n/=10; ”在循环中, n每次减小为以前的 1/10,即 n逐步往右边移出一个整数位,移出的整数位可由 n 10可求得,故第一空处应填 “n 10”。 第二空: 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)在循环中求得每一项,然后对其进行累加求和。