1、国家二级 C语言机试(操作题)模拟试卷 44及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:计算形参 X所指数组中 N个数的平均值 (规定所有数均为正数 ),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至 K所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 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 #define N 10 double fun(double *x) int i, j; double aV, yN; av=0; /*found*/ for(i=0; i #define M 5 /*found*/ int fun(int n, int xx) int i, j, sum=0; printf(“ nThe d X d matrix: n”, M, M); for(i=0; i #define N 16 typedef struct char num10;
3、int S; STREC; int fun(STREC*a, STREC*b) main() STREC sN=“GA05”, 85, “GA03”, 76, “GA02”, 69, “GA04”, 85,“GA01”, 91), “GA07”, 72, “GA08”, 64), “GA06”, 87, “GA015”,85, “GA013”, 91, “GA012”, 64, “GA014”, 91), “GA011”, 77,“GA017”, 64, “GA018”, 64, “GA016”, 72); STREC hN; int i, n; FILE*out; n=fun(s, h);
4、printf(“The d highest score: n”, n); for(i=0; in; i+) printf (“ s 4d n”, hi num, hi S); printf(“ n”); out=fopen(“out dat”, “w”); fprintf(out, “ d n”, n); for(i=0; in; i+) fprintf(out, “ 4d n”, hi s); fclose(out); 国 家二级 C语言机试(操作题)模拟试卷 44答案与解析 一、程序填空题 1 【正确答案】 (1)xi N (2)j+或 j=j+1 (3)i+或 i=i+1 【试题解析】
5、本题中函数 fun的功能是计算形参 x所指数组中 N个数的平均值(规定所有数均为正数 ),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至 x所指数组的后部。在 fun函数中,首先求平均值,然后拿平均值逐个和数组元素比较,如果元素值小于平均值则保存在数组 y中,再把大于等于平均值的元素放在数组 y后面,最后把 y数组内的 元素拷贝到 x所指的数组中。 解题思路 第一空: “for(i=0; iN; i+)aV+=_1_; ”在该循环的下一个循环内是逐个比较元素 xi是否小于 aV,即该循环的功能是求出平均值。由 av=(x0+x1+xN -1) N=x0/N+x1 N+xN
6、 -1 N可知,第一空处应为 “xi N”。 第二空: “if(xiav)Yj=xi; xi=-1; _2_; ”如果 xi小于平均值则将 xi存储在 y数组中,变量 i是循环变量,变量 j记 录数组 y的下标变化,下一次执行if内部语句时, y数组的下标应为下一个位置,故第二空处应为 j加 1,即第二空出为 “j+”或 “j=j+1”。 第三空: i为 while循环的循环变量,第一次进入 while的时候 i为 0,判断第一个元素 x0是否是一 1,第二次进入的时候判断第二个元素 x1是否是 -1,依此类推直到 i=N退出循环,故第三处是变量 i自增,即第三空处为 “i+”或 “i=i+1
7、”。 二、程序修改题 2 【正确答案】 (1)int fun(int n, int xxM) (2)printf(“ 4d”, xxij); 【试题解析】 函数的功能是求两条对角线上各元素之和。 (1)第一个标识下 fun函数的定义中对于二维数组的定义在原题中并没有给出空间,所以将 “int fun(int n,int xx)”改为 “int fun(int n, int xxM)”。 (2)fun函数中 n是 int型, C语言输出语句中整型应该是 d,所以第二个标识下 “printf(“%f”,xxij) ; ”应该改为 “printf(“0; 4d”,xxiD); ”。 三、程序设计题 3 【正确答案】 int i, max=a0 s, n=O; for(i=1; iN; i+) if(msxai s)msx=ai s ; *找出最高成绩 * for(i=0; iN; i+) if(msx=ai s)bn+=ai; *找相等的最高成绩并存入数组 b中 * return n; *返回符合条件的人数 * 【试题解析】 程序功能是把分数最高的学生数据放在 h所指的数组中。 (1)要把最高分数 的学生数据放在数组中,首先求出最高分数,再使用一个 for循环把所有的成绩进行比较,找出最高的分数来。 (2)找出所有与最高分数相等的学生,并将最高分数的人数累加。