1、国家二级 C语言机试(操作题)模拟试卷 428及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是: 在 34的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。 例如,有下列矩阵: 1 2 13 4 7 8 10 6 3 5 9 7 程序执行结果为: find: a22=9 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #inclucte st c 10 h #define M 3 #define N 4 void fun(
2、int(*a)N) int i=0, j, find=0, rmax, c, k; while(i M)&(!find) Emax=ai0; c=0; for(j=1; j N; j+) if(Emax aij) /*found*/ rmax=aij; c=【 1】 ; find=1; k=0; while(k M&find) /*found*/ if(k!=i&akC =Emax) find=【 2】 ; k+; if(find) printf(“find: a d d = dn“, i, c, aic); /*found*/ 【 3】 ; ) if(!find) printf(“not f
3、ound!n“); main() int xMN, i, j; printf(“Enter number for array:、 n“); for(i=0; i M; i+) for(j=0; j N; j+) scanf(“ d“, &xij); printf(“The array: n“); for(i=0; i M; i+) for(j=0; j N; j+) printf(“ 3 d“, xij); printf(“nn“); fun(x); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:根据整形参 m的值,计算如下公式的值。例如,若 m中的值为 5,则应输出 0 5363
4、89。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 IODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序:#include stdio h double fun(int m)double y=1 0; int i;/*found*/ for(i=2; i m; i+)/*found*/ y一=1/(i*i); return(y); main()int n=5; printf(“nThe result is lfn“, fun(r1); 三、程序设计题 3 m个人的成绩存放在 $eore数组中,请编写函数 fun,它的功能是:将低于
5、平均分的人数作为函数值返回,将低于平均分的分数放在 below所指的数组中。 例如,当 score数组中的数据为 10、 20、 30、 40、 50、 60、 70、 80、 90时,函数返回的人数应该是 4, below中的数据应为 10、 20、 30、 40。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include conio h #include stdio h #include string h #include stdlib h int fun(int score,
6、 int m, int below) void main() FILE*wf; int i, n, below9; 2nt score9=10, 20, 30, 40, 50, 60, 70, 80, 90); system(“CLS“); n=fun(score, 9, below); print; f(“nBelow the average SCOEe are: “); for(i=0; i n; i+) printf(“ d“, belowi); /*/ wf=fopen(“out dat“, “w“); for(i=0; i n; i+) fprint: f(wf, “ d“, bel
7、owi); fclose(wf); /*/ 国家二级 C语言机试(操作题)模拟试卷 428答案与解析 一、程序填空题 1 【正确答案】 (1)j (2)0 (3)i+ 【试题解析】 本题是在矩阵中找出在行上最大、在列上最小的那个元素。 填空 1:找出行上 最大的数,并将该数的列数 j保存在 c中,所以应填 j。 填空 2:使用 while循环语句和控制变量 find,如果该数不是列中的最小数,那么把 find置 0,所以应填 0。 填空 3:i是 while的控制变量,所以每做一次循环,该数值要加 1,所以应填 i+。 二、程序修改题 2 【正确答案】 (1)for(i=2; i =m; i+
8、) (2)y一 =1 0/( i*i); 【试题解析】 (1)使用 for循环计算公式,必须计算到 m,所以应改为 for(i =2; i =m; i+)。 (2)在除法运算中,如果除数 和被除数都是整数,那么所除结果也是整数,因此应改为 y 一 =1 0/( i*i)。 三、程序设计题 3 【正确答案】 int fun (int score ,int m, int be int i,j =0; float av =0 0; for (i =0; i m; i+) av=av+scorei/m; /*求平均值 */ for(i=0; i m; i+) if (scorei av)/*如果分数低于平均分,则将此分数放入 below数组中 */ belowj+=scorei; return j; /*返回低于平均分的人数 */ 【试题解析】 要计算低于平均分的人数,首先应该求出平均分,然后通过 for循环语句和 if条件语句找出低于平均分的分数。该题第 1个循环的作用是求出平均分 av,第 2个循环的作用是找出低于平均分的成绩记录并存入 below数组中。