1、国家二级 C语言机试(操作题)模拟试卷 34及答案与解析 一、程序填空题 1 函数 fun的功能是:从三个形参 a, b, c中找出中间的那个数,作为函数值返回。 例如,当 a=3, b=5, c=4时,中数为 4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include int fun(int a, int b, int C) int t; /*found*/ t= (ab) ? (bc?b : (ac?c: _1_ ): (ac)?_2_ : (bc)? C:
2、 _3_ ); return t; main() int a1=3, a2=5, a3=4, r; r=fun(a1, a2, a3); printf(“ nThe middle number is: d n”, r); 二、程序修改题 2 给定函数 MODll C中函数 fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含 5位八进制数字字符。 例如,若输入: 77777,则输出将是: 32767。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。 #include #in
3、clude #include int fun(char *P) int n; /*found*/ n=*P一 O; p+; while(*P!=0) /*found*/ n=n*8+*P一 o; p+; return n; main() char S6; int i; int n; printf(“Enter a string(Ocatal diqits): ”); gets(s); if(strlen(s)5)printf(“Error: String too longer! n n”); exit(0); for(i=0; si; i+) if(si7) printf(“Error: c
4、not is ocatal digits! n n”, si); exit(0); printf (“The original string: ”); puts(s); n=fun(s); Printf(“ n S is convered to integer number: d n n”, s, n); 三、程序设计题 3 请编写函数 fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给 n输入 50后,输出为: s=1 718282。 注意:要求 n的值大于 1但不大于 100。 部分源程序在文件PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数
5、fun的花括号中填入你编写的若干语句。 #includedouble 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语言机试(操作题)模拟试卷 34答案与解析 一、程序填空题 1 【正确答案】 (1)a (2)a (3)b 【试题解析】 fun函数的功能是求得三个数中间的数。 第一空:语句 “(ab)?(bc?”表示 ab
6、c,根据题目要求,则中间值为 b,若只是满足第一个 “?”前面的条件,而 cb,则选择执行 “(ac?c: _1_)”,当 ac时取值 c,所以 ac)?”是对 a、 c的比较选择,第三空处的 “(bc)?c”根据 b、 c的判断,题目已经给出了 c,所以这里应该是 a。 第三空:第三空中对于 b、 c的判断选择缺少 b,所以这里填 “b”。 二、程序修改题 2 【正确答案】 (1)n=*p一 0; (2)n=n*8+*p一 0; 【试题解析】 函数功能是实现八进制到十进制的转换 。 (1)第一个标识下面:语句 “n=*p-o; ”中的 0不是数字零,而是字母 o,根据前面的分析因此改为: “
7、n=*po; ”。 (2)第二个标识下面:语句 “n=n*8+*P-o”,首先进行同 (1)相同的修改,变量 P没有定义,根据题意要求这里应该是 “*p一 0”,所以此句改为: “n=n*8+*一0; ”。 三、程序设计题 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)在循环中求得每一项,然后对其进行累加求和。