1、国家二级 C语言机试(操作题)模拟试卷 61及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:计算形参 X所指数组中 N个数的平均值 (规定所有数均为正数 ),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至 X所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10个正数: 46 30 32 40 6 17 45 15 48 26,平均值为: 30 500000 移动后的输出为: 30 6 17 15 26 46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序
2、存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #defiqe N 1 0 double fun(double*x) int i, j; double av, yN; av=0; /*found*/ for(i=0 j i void fun (char*s, int num5) int k, i=5 ; for (k=0; k=0) numi+; mein() char s181; int numl5, i ; printf f“nPlease enter a string: “); gets(S1); fun(s1,
3、numl); for(i=0; i #define M 4 #define N 5 int fun(int aMN) main() int aa1N=1, 3, 5, 7, 9), f 2, 9, 9, 9, 4, 6, 9, 9, 9, 8), 1, 3, 5, 7, 0); int i, j, y; void NONO(); printf (“The original data is; n“); for (i=0; iM; i+) for(j=0 ; jN; j+)printf (“ 6d“, aaij); printf(“n“); y=fun(aa); printf(“nThe s1im
4、: dn“, y); printf(“n“); NONO(); void NONO() /*请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 */ int i, j, y, k, aaMN ; FILE*rf, *wf; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(k=0; k1 0; k+) for(i=0 ; iM; i+) for(j=0; jN; j+)fscanf(rf, “ d“, &aaij); y=fun(aa); fprintf(wf, “ dn“, y); ) fclose(rf);
5、 fclose(wf); 国家二级 C语 言机试(操作题)模拟试卷 61答案与解析 一、程序填空题 1 【正确答案】 (1)xi/N (2)j+或 j=j+1 (3)i+或 i=i+1 【试题解析】 第一空: “for(i=0; iN; i+) av+=_1 _; ”在该循环的下一个循环内是逐个比较元素 xi是否小于 aV,即该循环的功能是求出平均值。由av=(x0+x1+XN 1)/N=x0/N+x1/N+xN -1/N可知,第一空处应为“xi/N”。 第二空: “if(xiaV)yj=xi; Xi=-1; _2 _; ”如果 xi小于平均值则将xi存储在 y数组中,变量 i是循环变量,变量
6、 j记录数组 y的下标变化,下一次执行 if内部语句时, y数组的下标应为下一个位置,故第二空处应为 j加 1,即第二空出为 “j+”或 “j+1”。 第三空: i为 while循环的循环变量,第一次进入 while的时候 i为 0,判断第一个元素 x0是否是 1,第二次进入的时候判断第二个元素 x1是否是 -1,依此类推直到 i=N退出循环,故第三处是变量 i自增,即第三空处为 “i+”或 “i=i+1”。 二、程序修改题 2 【正确答案】 (1)numk=0 ; (2)switch(*s) 【试题解析】 (1)第一个标识下的 for循环过程是将 num数组中的变量初始值设置为 0,用来统计
7、每一个元音字母出现的个数, for循环中的循环条件表达式中的变量是 k,所以第二个标识下 “numi=0; ”改为 “numk=0; ”。 (2)第二个标识下的 switchcase条件选择的功能应该是对 s指针指向的字符串中的每一个字符进行判断,不应该是 s的数组名,所以第三个标识下 “switch(s)”改为“switch(*s)” 三、程序设计题 3 【正确答案】 int tot=0, i, j; for(i=0; iN; i+) tot+=a0i; tot+=aM一 1i; for(i=1; iM一 1 ; i+) tot+=ai0; tot+=aiN一 1; return tot; 【试题解析】 进入 fun函数,根据前面的分析:求周边元素的和,可以采用两个循环分别把行元素和列元素相加。但要避免把周边元素重复相加。