1、国家二级 C语言机试(操作题)模拟试卷 166及答案与解析 一、程序填空题 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 给定程序 MODIl C中 fun函数的功能是:求出以下分数序列的前 n项之和。和值通过函数值返回 main函数。 例如,若 n=5,则应输出: 8 391667。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构 !#include*found*, fun(int n) int a=2, b=1,
3、c, k; double s=0 0; for(k=1 ; k 三、程序设计题 3 请编写函数 fun,它的功能是:求出 1到 1000之间能 被 7或 11整除、但不能同时被 7和 11整除的所有整数并将它们放在 a所指的数组中,通过 n返回这些数的个数。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include void fun(int*a, int*n) main() int aa1000, n, k; void NONO(); fun(aa, n); for (k=0 ; kb)?(b
4、c?”表示 abc,根据题目要求,则中间值为 b,若只是满足第一个 “?”前面的条件,而 cb,则选择执行 “(ac?c: _1_)”,当 ac时 取值 c,所以 ac)?”是对 a、 c的比较选择,第三空处的 “(bc)?c”根据 b、 c的判断,题目已经给出了 c,所以这里应该是 a。 第三空:第三空中对于 b、 c的判断选择缺少 b, 二、程序修改题 2 【正确答案】 (1)double fun(int n) (2)c=a; a+=b; b=c; 【试题解析】 (1)fun函数中的语句 “double s=0 0; ”以及 “return(s); ”说明 fun函数具有 double返回
5、值,所以 应将 “fun(int n)”改为 “double fun(int n)”。 (2)根据题干中给出的公式可以推出每一项的特点,知道每一项的 b值是前一项的c值,所以第二个标识下 “b+=c; ”改为 “b=c; ”。 三、程序设计题 3 【正确答案】 int i; *n=0; for(i=7 ; i1000; i+) if(i 7)=0 (i 11)=0) (i 77)!=0) a(*n)+=i; 【试题解析】 进入 fun函数,根据前面的分析: 首先, *n置 0,设置为 累计器,计算符合条件的数的个数。 然后,通过循环,判断小于 1000的每一个整数是否符合题干中的要求。其中的判断条件能否被 7或者被 11整除为 i 7=0i 11=0,不能被 11和 7同时整除为i 77!=0,它们之间的并关系就用连接,最后结果即为 (i 7=0i 11=0) i 77!=0。 最后,将符合条件的整数存入数组 a中,同时对 *n进行自加,返回结果。