1、国家二级 C语言机试(操作题)模拟试卷 345及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.函数 fun的功能是:把形参 a所指数组中的最大值放在 a0中,接着求出 a所指数组中的最小值放在a1中;再把 a所指数组元素中的次大值放在 a2中,把 a数组元素中的次小值放在 a3中;其余以此类推。例如:若 a所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、l、8、2、7、3、6、4、5。形参 n中存放 a所指数组中数据的个数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
2、注意:源程序存放在考生文件夹下的BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include #define N 9 void fun (int _1_ f int n) int i,j,max,min,px,pnc t; for (i=0; i aj) min aj; pn = j; if (px != i) t=a i ; a i =max; a px=t; if (pn= i) pn=px; if (pn != i+1) t=a i+1 ; a i+1 min; a pn=t; main () int bN=1,4,2c 3,9,6,5,8,7, 1; printf (
3、 “/nThe original data:/n“) ; for (i=0; i_三、程序设计题(总题数:1,分数:2.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,它的功能是:把低于平均分的学生数据放在 b所指的数组中,低于平均分的学生人数通过形参 n传回,平均分通过函数值返回。 注意:部分源程序在文件 PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #define N 8 typedef struct char num 10 ; double
4、 s; STREC; double fun (STREC *a,STREC *b,int *n) main () STREC s Nl= “GA05“,85, “GA03“,76, “GA02“,69, “GA04“,85, “GA01“,91 , STREC hN,t;FILE *out ; int i,j,n; double ave; ave=fun (s,h,&n) ; printf(“The d student data which is lower than 73f:/n“,n,ave) ; printf ( “ s 4 1f/n“,h i num printf (“/n“) ; o
5、ut = fopen (“outdat“,“w“) ; fprintf ( out, “ oo d/ n 00 7 3f/n“ ,n,ave ) ; for (i=0; ih jl s) fprintf (out,“ 0041f/n“,h i s) ; fclose (out) ; (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 345答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.函数 fun的功能是:把形参 a所指数组中的最大值放在 a0中,接着求出 a所指数组中的最小值放在a1中;再把 a所指数组元素中的次大值放在 a2中,把
6、a数组元素中的次小值放在 a3中;其余以此类推。例如:若 a所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、l、8、2、7、3、6、4、5。形参 n中存放 a所指数组中数据的个数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include #define N 9 void fun (int _1_ f int n) int i,j,max,min,px,pnc t; for (i=0; i aj) min aj; pn =
7、 j; if (px != i) t=a i ; a i =max; a px=t; if (pn= i) pn=px; if (pn != i+1) t=a i+1 ; a i+1 min; a pn=t; main () int bN=1,4,2c 3,9,6,5,8,7, 1; printf ( “/nThe original data:/n“) ; for (i=0; i_正确答案:(正确答案:(1)sum=00; (2)if(i+1)5=0)解析:解析:本题函数的功能是对每 5个元素求一个平均值。首先要依顺序读取每 5个元素,并对这 5个元素取平均值。 (1)在第一标识下“sun=0
8、0; ”,根据题意,这是给 sum赋值,而 sun没有定义编译时会提示错误,应改为“sum=00,”。 (2)错误标识下的 if判断语句是依顺序取 5个字符,if 中的逻辑表达式语法有误,由于 15 恒等于 1,所以 i+15 也就等价于 i+1了,所以将“if(1+15=0)”改为“if(i+1)5=0)”,此处主要注意的是运算符的优先级。三、程序设计题(总题数:1,分数:2.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,它的功能是:把低于平均分的学生数据放在 b所指的数组中,低于平均分的学生人数通过形参 n传回,平均分通过函数值
9、返回。 注意:部分源程序在文件 PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #define N 8 typedef struct char num 10 ; double s; STREC; double fun (STREC *a,STREC *b,int *n) main () STREC s Nl= “GA05“,85, “GA03“,76, “GA02“,69, “GA04“,85, “GA01“,91 , STREC hN,t;FILE *out ; int i,j,n; double ave
10、; ave=fun (s,h,&n) ; printf(“The d student data which is lower than 73f:/n“,n,ave) ; printf ( “ s 4 1f/n“,h i num printf (“/n“) ; out = fopen (“outdat“,“w“) ; fprintf ( out, “ oo d/ n 00 7 3f/n“ ,n,ave ) ; for (i=0; ih jl s) fprintf (out,“ 0041f/n“,h i s) ; fclose (out) ; (分数:2.00)_正确答案:(正确答案:1 int i; 2 double ave=00; 3 * n=0; 4 for (i=0; i解析:解析:该程序功能是把低于平均分的学生数据放在 b所指的数组中,低于平均分的学生人数通过形参 n传回,平均分通过函数值返回。 (1)首先,通过循环求总分,然后求得平均分。 (2)在循环中,进行平均分与每个成绩进行比较,并将满足条件的数据存入数组及对其进行累加。