1、国家二级 C语言机试(操作题)模拟试卷 601及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:把形参 a所指数组中的偶数按原顺序依次存放到 a0、 a1、 a2 中,把奇数从数组中删除,偶数的个数通过函数值返回。 例如,若 a所指数组中的数据最初排列为: 9、 1、 4、 2、 3、 6、 5、 8、 7,删除奇数后, a所指数组中的数据为: 4、 2、 6、 8,返回值为 4。 请在程序的下画线处填 入正确的内容并将下画线删除,使程序得出正确的结果。 注
2、意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #define N9 int fun(int a, int n) int i, j; j=0; for(i=0; i n; i+) *found* if(【 1】 =0) *found* 【 2】 =ai; j+; ) *found* return【 3】 ; main() int bN=9, 1, 4, 2, 3, 6, 5, 8, 7, i, n; printf(“ nThe original data: n“); for(i=0; i N; i+) printf(“ 4d“,
3、 bi); printf(“ n“); n=fun(b, N); printf(“ nThe number of even d n“, n); printf(“ nThe even: n“); for(i=0; i n; i+) printf(“ 4d“, bi); printf(“ n“); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:将 s所指字符串中位于奇数位置的字符或 ASCII码值为偶数的字符依次放人 t所指数组中。例如,字符串中的数据为 “AABBCCDDE
4、EFF”,则输出应当是 “ABBCDDEFF”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conlo h #include stdio h #include string h #define N80 void fun(char*s, char t) int i, j=0; for(i=0; i (int)strlen(s); i+) *found* if(i 2&si 2=0) tj+=si; *found* ti= 0; main() char sN, tN; printf(“ nPle
5、ase enther string s: “); gets(s); fun(s, t); printf(“ nThe result is: s n“, gt); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,请编写函数 fun,该函数的功能是:统计各年龄段的人数。 N个年龄通过调用随机函数获得,并放入主函数的 age数组中。要求函数把 0 9岁年龄段的人数放在 d0中,把 10 19岁年龄段的人数放在d1中,把 20 29岁年龄段的人数放在 d2中,依此类推,把 100岁 (含 100岁 )以
6、上年龄的人数都放在 d10中。结果在主函数中输出。 注意:部分源程序在文件 PROG1 C中。 请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #inclucle stdio h #define N50 #define M11 void fun(int*a, int*b) double rnd() static t=29, c=217, m=1024, r=0; r=(r*t+c) m; return(double)r m); void main() FILE*wf; int ageN, i, dM; int bN=32, 45, 1
7、5, 12, 86, 49, 97, 3, 44, 52, 17, 95, 63; for(i=0; i N; i+) agei=(int)(115*rnd(); *产生一个随机的年龄数组 * printf(“The original data: n“); for(i=0; i N; i+) printf(i+1) 10=0?“ 4d n“: “ 4cl“, agei); *每行输出 10个数 * printf(“ n n“); fun(age, d); for(i=0; i 10; i+) printf(“ 4d- 4d: 4d n“, i*10, i*10+9, di); printf(“
8、over100: 4d n“, d10); *found* wf=fopen(“out dat“, “w“); fun(b, d); for(i=0; i 10; i+) fprintf(wf, “ 4d一 4d: 4d n“, i*10, i 10+9, di); fprintf(wf, “Over100: 4d“, d10); fclose(wf); *found* 国家二级 C语言机试(操作题)模拟试卷 601答案与解析 一、程序填空题 1 【正确答案】 (1)ai 2 (2)aj (3)j 【试题解析】 填空 1: if语句条件表达式,判断数组元素是否为偶数,对 2求余,结果为 0,则
9、为偶数;结果为 1则为奇 数。 填空 2:如果该数组元素是偶数,则将其值保存。 填空 3:最后按要求将偶数个数通过 return语句返回给 main函数。 二、程序修改题 2 【正确答案】 (1)if(i 2|si 2=0)或 if(i 21=0|si 2=0) (2)tj= 0;或 tj=0; 【试题解析】 (1)根据题意,将字符串 s中位于奇数位置的字符或 ASCII码值为偶数的字符,依次放人字符串 t中,所以 if条件中要使用 “或 ”运算。 (2)变量 j控制字符串 t的下标,所以是 tj。 三、程序设计题 3 【正确答案】 void fun(int*a, int*b) int i,
10、j; for(j=0; j M; j+) bj=0; *数组 b初始化为 0* for(i=0; i N; i+) if(ai =100) b10+; *如果年龄大于等于 100, b10自增 1* else bai 10+; *如果年龄小于 100,则将其分别统计到 bai 10中 * 【试题解析】 本题是一个分段函数的问题,用两个循环来完成。第 1个循环的作用是使 b中的所有元素值都为 0。这个 循环不能省略,因为若未对 b中的元素赋初值,则它们的值是不可预测的。第 2个循环的作用是分别统计 a中各年龄段的人数。当 ai100时,按题意要将其统计到 b10中。 else的作用是如果年龄小于100,则将其分别统计到 bai 10中。由运算优先级可知先进行 ai 10的运算,所得结果作为 b的下标。若 ai为 0 9时, ai 10的值为 0,且 0 9岁的人数正好要存入 b0中。若 ai为 10 19时,