1、国家二级 C语言机试(操作题)模拟试卷 158及答案与解析 一、程序填空题 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 #include #include fun(char*p) int i, t; char c80; *found* For(i=0, t=0; pi; i+) if(!isspace(*(p+i) ct+= pi; *found* ct=“ 0“; strcpy(p, c); main() char c, s80; int i=0; printf(“Input a string: “); c=getchar(); while(c!=#) si=c; i+; c=ge
3、tchar(); ) si= 0; fun(s); puts(s); 三、程序设计题 3 请编写函数 fun,函数的功能是:将 M行 N列的二维数组中的数据,按列的顺序依次放 到一维数组中。 例如,二维数组中的数据为: 33 33 33 33 44 44 44 44 55 55 55 55 则一维数组中的内容应是: 33 44 55 33 44 55 33 44 55 33 44 55。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include void fun(int s10, int b,
4、 int *n, int mm, int nn) main() int w1010=33, 33, 33, 33), 44, 44, 44, 44, 55, 55, 55, 55), i, j ; int a100=0), n=0; void NONO(); printf(“The matrix: n“); for(i=0; i3; i+) for(j=0; j4; j+)printf(“ 3d“, Wij); printf(“ n“); fun(w, a, n, 3, 4); printf(“The A array: n“); for(i=0; in; i+)printf(“ 3d“, ai
5、); printf(“ n n“); NONO(); void NONO() *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * FILE*rf, *wf; int i, j, k ; int w1010, a100, n=0, mm, nn; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(k=0; k5; k+) fscanf(rf, “ d d“, mm, nn); for(i=0 ; imm; i+) for(j=0 ; jnn; j+)fscanf (rf, “ d“, wij); fun(w
6、, a, n, mm, nn); for(i=0 ; in; i+)fprintf (wf, “ 3d“, ai); fprintf(wf, “ n“); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 158答案与解析 一、程序填空题 1 【正确答案】 (1)i (2)t+ (3)count 【试题解析】 第一空:由 “if(OK(t, t1, n)OK(t, t2, n)OK(t, t3, n)OK(t,t4, n)count+; ”可知 count计数听到的鞭炮声,在满足 if条件时,计数加 1。 t时刻,至少有一个人放了一 个鞭炮才能听得到声音,
7、故 t t1=0、 t t2=0、 tt3=0、 t t4=0这四个当中至少一个成立,四者是或的关系。第一个标识下是宏OK的定义,由前面的分析可知, OK宏的作用就是判断 t ti(i等于 1、 2、 3和 4)是否等于 0且 i tn,故第一空处应为 “i”。 第二空:时间 t从第一秒开始,到最大时刻结束,时间是一秒一秒增加,在每个时刻判断是否能够听到声音,故第二空是 “t+”。 第三空:变量 count记录了听到的声音次数,因此 count是函数的返回值,故第三空应为 “count”。 二、程序修改题 2 【正确答案】 (1)for(i=0, t=0; pi; i+) (2)ct= 0;
8、【试题解析】 (1)第一个标识下 “For(i=0, t=0; pi; i+)”语句是 for循环语句,而 For不是 C语言的关键字,所示 “For(i=0, t=0; pi; i+)”应改为 “for(i=0,t=0; pi; i+)”。 (2)第二个标识下的 “ct=“ 0“; ”语句是在新生成的串后面加尾符标志,在 C语言中规定使用单引号把一个字符括起来作为字符常量,所以 “ct=“ 0“; ”应改为 “ct= 0; ”。 三、程序设计题 3 【正确答案】 int i, j; for(j=0; jnn; j+) for(i=0; imm; i+) b*n=*(*(s+i)+j); *n=*n+1; 【试题解析】 (1)利用两重循环,依次取矩阵中的元素。 (2)其中注意指针数组与数组指针的区别,其中数组指针 s,它指向包含 4个元素的一维数组。其数据元素的表示方式为: “*(*(s+i)+j)”。