1、国家二级 C语言机试(操作题)模拟试卷 323及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:计算形参 X所指数组中 N个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至 x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10个正数:46、30、32、40、6、17、45、15、48、26,平均值为 30500000。 移动后的输出为:46、32、40、45、48、30、6、17、15、260 请在程序的下画线处填入正确
2、的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: 1 #includeStdlibh 2 #includestdioh 3 #define N 10 4 double fun(double*x) 5 int i,j;double s,av,yN; 6 s=0; 7 for(i=0;iN;i+)s=s+xi; 8 *found* 9 av= 【1】 ; 10 for(i=j=0;iN;i+) 11 if(xiav) 12 *found* 13 y 【2】 =xi; 14 xi=1; 15 for(i=0
3、;iN;i+) 16 *found* 17 if(xi!= 【3】 )yj+=xi; 18 for(i=0;iN;i+)xi=yi;19 return av; 20 21 main() 22 int i;double xN; 23 for(i=0;iN;i+) 24 xi=rand()50; 25 printf(“40 f“,xi);) 26 printf(“n“); 27 printf(“nThe average is:fn“,fun(x); 28 printf(“nThe result:n“,fun(x); 29 for(i=0;iN;i+) 30 printf(“50 f“,xi); 3
4、1 printf(“n“); 32 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:求 s的值。 (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,其功能是:把低于平均分的学生数据放入 b所指的数组中,低于平均分的学生人数通过形参 n传回,平均分通过函数值返回。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includestdioh#d
5、efine N 8typedef struct char num10; double s;STREC; double fun(STREC*a,STREC*b,int*n)void main() STREC sN=“GA05“,85,“GA03“,76,“GA02“,69,“GA04“,85,“GAO1“,91,“GA07“,72,“GA08“,64,“GA06“,87; STREC hN; int i,n; double ave; ave=fun(s,h,n); printf(“Thed student data which is lower than 73 f:n“,n,ave);for(i
6、=0;in;i+) *输出成绩低于平均值的学生记录* printf(“s41 fn“,hinum,his); printf(“n“);(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 323答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:计算形参 X所指数组中 N个数的平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至 x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10个正数:46、30、32、40、6、17、45
7、、15、48、26,平均值为 30500000。 移动后的输出为:46、32、40、45、48、30、6、17、15、260 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: 1 #includeStdlibh 2 #includestdioh 3 #define N 10 4 double fun(double*x) 5 int i,j;double s,av,yN; 6 s=0; 7 for(i=0;iN;i+)s=s+xi; 8 *found* 9 av= 【1】 ;
8、10 for(i=j=0;iN;i+) 11 if(xiav) 12 *found* 13 y 【2】 =xi; 14 xi=1; 15 for(i=0;iN;i+) 16 *found* 17 if(xi!= 【3】 )yj+=xi; 18 for(i=0;iN;i+)xi=yi;19 return av; 20 21 main() 22 int i;double xN; 23 for(i=0;iN;i+) 24 xi=rand()50; 25 printf(“40 f“,xi);) 26 printf(“n“); 27 printf(“nThe average is:fn“,fun(x);
9、 28 printf(“nThe result:n“,fun(x); 29 for(i=0;iN;i+) 30 printf(“50 f“,xi); 31 printf(“n“); 32 (分数:2.00)_正确答案:(正确答案:(1)sN (2)j+ (3)1)解析:解析:填空 1:由原程序可知,av 代表的是平均值,而平均值的求法是所有数的总和除以数的个数,因而本空应该填写 sN。 填空 2:y 数组代表暂时存放 x数组,if(xiav)表达的是当 x数组中的数大于平均值时,应该把这些大于平均值的数放在 y数组的前半部分,因而此空应该填 yj+。 填空 3:此空表明当 xi不等于什么时,x
10、i中的数要赋值给 y数组,由题意可知此空只能填写1。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:求 s的值。 (分数:2.00)_正确答案:(正确答案:(1)float fun(int k) (2)return s;)解析:解析:(1)此处为函数定义错误,根据返回值的类型可知函数类型标识符应为 double。 (2)语法错误。三、程序设计题(总题数:1,分数:2.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,其功能是:把低于平均分的学生数据放入 b所指的数组中,低于平均分的学生人数通过形参
11、n传回,平均分通过函数值返回。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includestdioh#define N 8typedef struct char num10; double s;STREC; double fun(STREC*a,STREC*b,int*n)void main() STREC sN=“GA05“,85,“GA03“,76,“GA02“,69,“GA04“,85,“GAO1“,91,“GA07“,72,“GA08“,64,“GA06“,87; STREC hN; int i,
12、n; double ave; ave=fun(s,h,n); printf(“Thed student data which is lower than 73 f:n“,n,ave);for(i=0;in;i+) *输出成绩低于平均值的学生记录* printf(“s41 fn“,hinum,his); printf(“n“);(分数:2.00)_正确答案:(正确答案:double fun(STREC *a,STREC *b,int,*n) int i,j=0; double av=00; for(i=0;iN;i+) av=av+ais; av=avN; *求平均值* for(i=0;iN;i+) if(aisav) bj+=ai; *将低于平均值的学生记录存入结构体数组 b中* *n=j; *指针传回低于平均值的学生人数* return av; *返回平均值* )解析:解析:本题使用循环语句和条件判断语句来实现程序操作,第 1个循环语句的作用是求出总分,然后求出平均分 av。第 2个循环的作用是将分数低于平均分的学生记录存入结构体数组 b中。