1、国家二级 C语言机试(操作题)模拟试卷 368及答案解析(总分: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、1、8、2、7、3、6、4、5。形参 n中存放 a所指数组中数据的个数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
2、注意:源程序存放在考生文件夹下的BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #define N 93 *found*4 void fun(int_1_,int n)5 int i,j,max,min,px,pn,t;6 *found*7 for(i=0;in-1;i+=_2_)8 max=min=ai;9 px=pn=i;10 *found*11 for(j=_3_;jn;j+)12 if(maxaj)13 max=aj;px=j;)14 if(minaj)15 min=aj; pn=j;16 17 if(px!=i)18 t=ai; ai=
3、max;apx=t;19 if(pn=i)pn=px;20 21 if(pn!=i+1)22 t=a2+1;ai+1=min;apn=t;23 24 25 main()26 int bN=1,4,2,3,9,6,5,8,7,i;27 printf(nThe original data:n);28 for(2=0;iN;i+)printf(4d,bi);29 printf(n);30 fun(b,N);31 printf(nThe data after moving:n);32 for(2=0;iN;i+)printf(4d,bi);33 printf(n);34 (分数:2.00)_二、程序修
4、改题(总题数:1,分数:2.00)2.给定程序 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
5、 float ave,t=00;5 int 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
6、,s+i);22 printf(nThe number of students:dn,fun(s,m,15 16 Void NONO()17 *本函数用于打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*18 int m,n,zz1000,i;19 FILE *rf,*wf;20 rf=fopen(indat,r);21 wf=fopen(outdat,w);22 for(i=0;i10;i+) 23 fscanf(rf, dd, m, m+)fprintf(wf,d,zzm);26 fprintf(wf,n);27 28 fclose(rf);29 fclose(wf);(分数
7、:2.00)_国家二级 C语言机试(操作题)模拟试卷 368答案解析(总分: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、1、8、2、7、3、6、4、5。形参 n中存放 a所指数组中数据的个数。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正
8、确的结果。 注意:源程序存放在考生文件夹下的BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #define N 93 *found*4 void fun(int_1_,int n)5 int i,j,max,min,px,pn,t;6 *found*7 for(i=0;in-1;i+=_2_)8 max=min=ai;9 px=pn=i;10 *found*11 for(j=_3_;jn;j+)12 if(maxaj)13 max=aj;px=j;)14 if(minaj)15 min=aj; pn=j;16 17 if(px!=i)18 t=a
9、i; ai=max;apx=t;19 if(pn=i)pn=px;20 21 if(pn!=i+1)22 t=a2+1;ai+1=min;apn=t;23 24 25 main()26 int bN=1,4,2,3,9,6,5,8,7,i;27 printf(nThe original data:n);28 for(2=0;iN;i+)printf(4d,bi);29 printf(n);30 fun(b,N);31 printf(nThe data after moving:n);32 for(2=0;iN;i+)printf(4d,bi);33 printf(n);34 (分数:2.00)
10、_正确答案:(正确答案:(1)*a (2)2 (3)i+1)解析:解析:第一空:主函数内 fun函数的调用“fun(b,N);”,其中 b为整型数组名,故 fun函数的第一参数为整型指针,又根据“max=aj”可知第一个参数名为 a,故第一空处为“*a”。 第二空:根据题意 a所指数组中的最大值放在 a0中,接着求出 a所指数组中的最小值放在 a1中;再把 a所指数组元素中的次大值放在 a2中,把 a数组元素中的次小值放在 a3中,升序排序和降序排序的下标变化是每次在前一次的基础上+2,即 a0、a2、a4降序排序,a1、a3、a5升序排序,故第二空应为“2”。 第三空:选择排序法中的升序排序
11、,首先从数组中挑选一个最小的元素,把它和第一元素交换,接着从剩下的 n-1个元素中再挑出一个最小的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。故内层循环变量 i应该从 i+1开始,因此第三空处应为“i+1”。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:从 n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参 aver所指的存储单元中。 例如,若输入 8名学生的成绩:805 60 72 905 98 515 88 64 则低于平均分的学生人数为:4(平均分为:755625)。 请改正
12、程序中的错误,使它能统计出正确的结果。 注意:不要改动 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;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
13、 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,fun(s,m,15 16 Void NONO()17 *本函数用于打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*18 int m,n,zz1000,i;19 FILE *rf,*wf;20 rf=fopen(indat,r);21 wf=fopen(
14、outdat,w);22 for(i=0;i10;i+) 23 fscanf(rf, dd, m, m+)fprintf(wf,d,zzm);26 fprintf(wf,n);27 28 fclose(rf);29 fclose(wf);(分数:2.00)_正确答案:(正确答案:1 int r=0,temp,p,sign=1; 2 for(temp=m+1;tempm*m;temp+) 3 从 temp开始循环,判断紧靠 temp的整数 4 (for(p=2;ptemp;p+) 5 if(tempp!=0)判断temp是否为素数 6 sign=1;若是素数,标志设为 1 7 else 8 si
15、gn=0;若不是素数,标志设为0 9 break; 10 11 if(sign=1&p=temp) 12 if(k=0) 判断已有的素数个数是否已经满足sum个 13 xxr+=temp;将素数 temp存入数组 select 14 k-;将题目中要求的素数个数减1 15 16 else 17 break; 18 )解析:解析:进入 fun函数,根据前面的分析:首先,定义、初始化变量 sign,作为素数的标志;定义r,初始化为存储素数数组的起始位。然后,每判断一次 temp中的值是否为素数后,使 temp的值增 1,再次对 temp中新的值进行判断其是否为素数,不断循环此过程,直到 m的值等于指定的个数,即函数中的 k个数。