1、国家二级 C语言机试(操作题)模拟试卷 391及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.人员的记录由编号和出生年、月、日组成,N 名人员的数据已在主函数中存入结构体数组 std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参 k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #define N 83 typ
2、edef struct4 int num;5 int year,month,day;6 STU;7 int fun(STU *std, STU *k, int year)8 int i,n=0;9 for(i=0;iN;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,1982,6,22,8,1984,
3、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 bornndn,year);24 else25 printf(nThese persons were born ndn,year);26 for(1=0; in;i+)27 printf(d d-d-dn, kinum,kiyear,kimonth,kiday);28 29 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.给定程
4、序 MODI1C 中函数 fun的功能是:从 n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参 aver所指的存储单元中。 例如,若输入 8名学生的成绩:805 60 72 905 98 515 88 64 则低于平均分的学生人数为:4(平均分为:755625)。 请改正程序中的错误,使它能统计出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #define N 203 int fun(float *s,int n,float* aver)4 float ave,t=00;5 int
5、count=0,k,i;6 for(k=0;kn ; k+)7 *found*8 t=sk;9 ave= tn;10 for(i=0;in;i+)11 if (siave) 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,m);20 printf(nPlease enter d mark:n, m);21 for(i=0;im;i+)scanf(f,s+i);22 printf(nThe n
6、umber of students:dn,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;12 STREC hN,t;FILE *out;13 int i,j,n;double ave;14 ave=fun(s,h,n);15 printf(Thed student data which is lower than73f:n,n,ave);
7、16 for(i=0;in;i+)17 printf(s 41fn,hinum, his);18 printf(n);19 out=fopen(outdat,w);20 printf(out,dn73fn,n,ave);21 for(i=0; in-1;i+)22 for(j=i+1;jn;j+)23 if(hishjs)t=hi; hi=hj;hj=t;24 for(i=0;in;i+)25 fprintf(out,41fn,his);26 fclose(out);(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 391答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题
8、(总题数:1,分数:2.00)1.人员的记录由编号和出生年、月、日组成,N 名人员的数据已在主函数中存入结构体数组 std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参 k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #define N 83 typedef struct4 int num;5 int year,month,day;6 STU;7 int f
9、un(STU *std, STU *k, int year)8 int i,n=0;9 for(i=0;iN;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,1982,6,22,8,1984,8,19;19 STU kN;int i,n,year;20 printf(Enter a year : );
10、scanf(d,year);21 n=fun(std,k,year);22 if(n=0)23 printf(nNo petson was bornndn,year);24 else25 printf(nThese persons were born ndn,year);26 for(1=0; in;i+)27 printf(d d-d-dn, kinum,kiyear,kimonth,kiday);28 29 (分数:2.00)_正确答案:(正确答案:(1)stdiyear (2)stdi (3)n)解析:解析:fun 函数的功能是在结构体数组 std中找出指定出生年份的人员将其数据放在形参
11、 k所指的数组中。 第一空:比较结构体的出生年份是否等于 year,std 是结构体指针,指向结构体数组的首地址,因此访问一个结构体的 year成员是“stdiyear”,因此第一空处应为“if(stdiyear=year)”。第二空:这里是将找到的数据放在形参 k所指的数组中,k 是指针变量,k 指向结构体数组的首地址,stdi是结构体的地址,因此等号左边也应该是地址,故第二空处应为“kn+=stdi;”。 第三空:fun函数的返回值是满足指定条件的人数 n,故第三空处是“return(n);”。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:
12、从 n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参 aver所指的存储单元中。 例如,若输入 8名学生的成绩:805 60 72 905 98 515 88 64 则低于平均分的学生人数为:4(平均分为:755625)。 请改正程序中的错误,使它能统计出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #define N 203 int fun(float *s,int n,float* aver)4 float ave,t=00;5 int count=0,k,i;6 for(k=0
13、;kn ; k+)7 *found*8 t=sk;9 ave= tn;10 for(i=0;in;i+)11 if (siave) 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,m);20 printf(nPlease enter d mark:n, m);21 for(i=0;im;i+)scanf(f,s+i);22 printf(nThe number of students:dn,
14、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;12 STREC hN,t;FILE *out;13 int i,j,n;double ave;14 ave=fun(s,h,n);15 printf(Thed student data which is lower than73f:n,n,ave);16 for(i=0;in;i+)17 p
15、rintf(s 41fn,hinum, his);18 printf(n);19 out=fopen(outdat,w);20 printf(out,dn73fn,n,ave);21 for(i=0; in-1;i+)22 for(j=i+1;jn;j+)23 if(hishjs)t=hi; hi=hj;hj=t;24 for(i=0;in;i+)25 fprintf(out,41fn,his);26 fclose(out);(分数:2.00)_正确答案:(正确答案:1 int i; 2 double ave=00; 3 *n=0; 4 for(i=0;iN;i+) ave=ave+ais; 5 ave=N; *计算平均值* 6 for(i=0; iN; i+) 7 if(aisave) *把低于平均值的记录存放到 b所指的数组中* 8 b*n=ai; 9 (*n)+; *人数加 1*) 10 return ave; *返回平均值 *)解析:解析:(1)首先,通过循环求总分,然后求得平均分。(2)在循环中,进行平均分与每个成绩进行比较,并将满足条件的数据存入数组及对其进行累加。