1、国家二级 C语言机试(操作题)模拟试卷 391及答案与解析 一、程序填空题 1 人员的记录由编号和出生年、月、日组成, N名人员的数据已在主函数中存入结构体数组 std中。函数 fun的功能是:找出指定出生年份的人员,将其数据放在形参 k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #define N 8 3 typedef struct 4 int num; 5
2、int year, month, day; 6 STU; 7 int fun(STU *std, STU *k, int year) 8 int i, n=0; 9 for(i=0; i N; i+) 10 *found* 11 if(_1_=year) 12 *found* 13 kn+=_2_; 14 *found* 15 return( _3_); 16 17 main() 18 STU stdN=1, 1984, 2, 15, 2, 1983, 9, 21, 3, 1984, 9, 1,4, 1983, 7, 15, 5, 1985, 9, 28, 6, 1982, 11, 15, 7
3、, 1982, 6,22, 8, 1984, 8, 19; 19 STU kN; int i, n, year; 20 printf(Enter a year : );scanf( d, year); 21 n=fun(std, k, year); 22 if(n=0) 23 printf( nNo petson was born n d n, year); 24 else 25 printf( nThese persons were born n d n, year); 26 for(1=0; i n; i+) 27 printf( d d- d- d n, ki num, ki year,
4、 ki month,ki day); 28 29 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:从 n(形参 )个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参 aver所指的存储单元中。 例如,若输入 8名学生的成绩: 80 5 60 72 90 5 98 51 5 88 64 则低于平均分的学生人数为: 4(平均分为: 75 5625)。 请改正程序 中的错误,使它能统计出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #define N 20 3 int f
5、un(float *s, int n, float* aver) 4 float ave, t=0 0; 5 int count=0, k, i; 6 for(k=0; k n ; k+) 7 *found* 8 t=sk; 9 ave= t n; 10 for(i=0; i n; i+) 11 if (si ave) count+ ; 12 *found* 13 *aver=Ave ; 14 return count ; 15 16 main() 17 float s30, aver; 18 int m, i; 19 printf ( nPlease enter m: ); scanf( d
6、, m); 20 printf( nPlease enter d mark: n, m); 21 for(i=0; i m; i+)scanf( f, s+i); 22 printf( nThe number of students: d n, fun(s, m, 5 double s; 6 STREC; 7 double fun(STREC *a, STREC *b, int*n) 8 9 10 main() 11 STREC sN=GA05, 85, CA03, 76, CA02, 69, GA04,85, GA01, 91, GA07, 72, GA08, 64, GA06, 87; 1
7、2 STREC hN, t; FILE *out; 13 int i, j, n; double ave; 14 ave=fun(s, h, n); 15 printf(The d student data which is lower than 7 3f: n, n, ave); 16 for(i=0; i n; i+) 17 printf( s 4 1f n, hi num, hi s); 18 printf( n); 19 out=fopen(out dat, w); 20 printf(out, d n 7 3f n, n, ave); 21 for(i=0; i n-1; i+) 2
8、2 for(j=i+1; j n; j+) 23 if(hi s hj s)t=hi; hi=hj; hj=t; 24 for(i=0; i n; i+) 25 fprintf(out, 4 1f n, hi s); 26 fclose(out); 国家二级 C语言机试(操作题)模拟试卷 391答案与解析 一、程序填空题 1 【正确答案】 (1)stdi year (2)stdi (3)n 【试题解析】 fun函数的功能是在结构体数组 std中找出指定出生年份的人员将其数据放在形参 k所指的数组中。 第一空:比较结构体的出生年份是否等于 year, std是结构体指针,指向结构体数组的首地址,
9、因此访问一个结构体的 year成员是 “stdi year”,因此第一空处应为 “if(stdi year=year)”。 第二空:这里是将找到的数据放在形参 k所指的数组中, k是指针变量, k指向结构体数组的首地址, stdi是结构体的地址,因此 等号左边也应该是地址,故第二空处应为 “kn+=stdi; ”。 第三空: fun函数的返回值是满足指定条件的人数 n,故第三空处是“return(n); ”。 二、程序修改题 2 【正确答案】 (1)t+: sk; (2)*aver=ave; 【试题解析】 程序功能是统计出低于平均分的学生人数。 (1)根据题目要求求出平均分,首先要求总分,要把
10、所有学生成绩相加再求平均分,因此第一个标识下面的 “t=sk; ”应改为 “t+=sk; ”。 (2)根据题目可知,比较的结 果中低于平均分的分数 ave放入指针 aver所指的地址单元中,而变量 Ave没有定义,因此第二标识下应将 “*aver=Ave; ”改为“*aver=ave; ”。 三、程序设计题 3 【正确答案】 1 int i; 2 double ave=0 0; 3 *n=0; 4 for(i=0; i N; i+) ave=ave+ai s; 5 ave =N; *计算平均值 * 6 for(i=0; i N; i+) 7 if(ai s ave) *把低于平均值的记录存放到 b所指的数组中 * 8 b*n=ai; 9 (*n)+; *人数加 1* ) 10 return ave; *返回平均值 * 【试题解析】 (1)首先,通过循环求总分,然后求得平均分。 (2)在循环中,进行平均分与每个成绩进行比较,并将满足条件的数据存入数组及对其进行累加。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1