1、国家二级 C语言机试(操作题)模拟试卷 59及答案与解析 一、程序填空题 1 甲乙丙丁四人同时开始放鞭炮,甲每隔 t1秒放一次,乙每隔 t2秒放一次,丙每隔 t3秒放一次,丁每隔 t4秒放一次,每人各放 n次。函数 fun的功能是根据形参提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时炸响,只算一次响声,第一次响声是在第 0秒。 例如,若 t1=7, t2=5, t3=6, t4=4, n=10,则总共可听到 28次鞭炮声。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果 。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也
2、不得更改程序的结构 ! #include /*found*/ #define OK(i, t, n)( _1_ t=0) (i t float fun(float h) main() float a; void NONO(); printf (“Enter a: ”); s canf (“ f”, a); printf(“The original data is: ”); printf(“ f nkn”, a); printf(“The result: f n”, fun (a); NONO(); void NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文
3、件。 * int i; float a ; FILE *rf, *wf; rf=fopen(“in dat”, “r”); wf=fopen(“out dat”, “w”); for(i=0; i20; i+) fscanf(rf, “ f”, a); fprintf(wf, “ f n”, fun(a); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 59答案与解析 一、程序填空题 1 【正确答案】 (1)i (2)t+ (3)count 【试题解析】 函数 fun的功能是根据形参提供的值求出总共听到多少次鞭炮声,fun函数的参数是每个人放鞭炮的间隔
4、时间和燃放次数。甲乙丙丁四人同时开始放鞭炮,由于间隔不同在某些时刻几个人会同时燃放,这种情况只算一次响声,因此需要考虑同时燃放的次数。 解题思路 第一空:由 “if(OK(t1, n)|OK(t, t2, n)|OK(t, t3, n)|OK(t, t4,n)count+; ”可知 count计数听到的鞭炮声,在满足 if条件时,计数加 1。 t时刻,至少有一个人放了一个鞭炮才能听得到声音,故 t t1=0、 t t2=0、 tt3=0、 t t4=0这四个当中至少一个成立,四者是或的关系。第一个标识下是宏OK的定义,由前面的分析可知, OK宏的作用就是判断 t i(i等于 1、 2、 3和
5、4)是否等于 0且 i tn,故第一空处应为 “i”。 第二空:时间 t从第一秒开始,到最大时刻结束,时间是一秒一秒增加,在每个时刻判断是否能够听到声音,故第二空是 “t+”。 第三空:变量 count记录了听到的声音次数,因此 count是函数的返回值,故第三空应为 “count”。 二、程序修改题 2 【正确答案】 (1)int fun(int n) (2)if(n=1) 【试题解析】 函数功能是按题目中给出的递归公式求函数值。 (1)定义函数 fun时,形参 n并没有指定参数类型,因此, “int fun(n)”改为 “int fun(int n)”。 (2)根据题目要求,原题中的 “i
6、f(n=1)”应该是用于判断 n是否等于 1,但是被错误表示成赋值表达式。因此, “if(n=1)”应该改为 “if(n=1)”。 三、程序设计题 3 【正确答案】 long w; w=h*1000+5; return(float)w 1000; 【试题解析】 该程序功能是进行四舍五入。其中,通常求实数 x保留 m位小数,首先将 x扩大 10(m+1)倍,扩大后的 x加上 5后,进行截取判断,最后进行恢复。 解题思路 进入 fun函数,根据前面的分析: 本题可以分解为,把一个浮点数截成只带两位小数的算法和将小数点后第三位四舍五入的算法。其中,四舍五入,如果值大于 5那么加上 5就会进位;反之,如果小于 5,加上 5就不会进位,所以在扩大后的值加上 5,实现四舍五入的截取。