1、二级 C语言机试-266 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun的功能是:把形参 a所指数组中的最大值放在 a0中,接着求出 a所指数组中的最小值放在 a1中,再把 a所指数组元素中的次大值放在 a2中,把 a数组元素中的次小值放在a3中,依次类推。例如,若 a所指数组中的数据最初排列为:1、4、2、3、9、6、S、8、7,按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参 n中存放 a所指数组中数据的个数。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程
2、序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h#define N 9/*found*/void fun(int (1) ,int n)int i,j,max,min,px,pn,t;/*found*/for(i=0;in-1;i+= (2) )max=min=ai;px=pn=i;/*found*/for(j= (3) ;jn;j+)if(maxcaj)(max=aj;px=j;)if(minaj)(min=aj;pn=j;)if(px!=i)(t=ai=ai=max;apx=c;if(pn=i)pn=px;if(pn!=i+1)n=ai+1;ai+
3、1=min;apn=t)main()int bN=(1,4,2,3,9,6,5,8,7),i;printf(“/nThe original data:/n“);for(i=0;iN;i+)printf(“%4d%,bi);printf(“/n“);fun(b,N);printf(“/nThe data after moving:/n“);for(i=0;iN;i+)printf(“%4d“,bi);printf(“/n“);(分数:30.00)_二、程序改错题(总题数:1,分数:30.00)2.下列程序中,函数 fun的功能是:按顺序给 S所指数组中的元素赋予从 2开始的偶数,然后再按顺序对每
4、 5个元素求平均值,并将这些值依次存放在 W所指的数组中。若 S所指数组中元素的个数不是 5的倍数,则多余部分忽略不计。例如,S 所指数组有 14个元素,则只对前 lO个元素进行处理,不对最后的 4个元素求平均值。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h#define SIZE 20fun(double*s,double*w)int k,i;double sum;for(k=2,i=0;iSIZE;i+)(sil=k;k+=2;/*found*/sun=0.0;for(k=0,i=0;
5、iSIZE;i+)(sum+=si;/*found*/if(i+1%5=0)wk=sum/5;sum=0;k+;)return k;main()(double aSIZE,bSIZE/5;int i,k;k=fun(a,b);printf(“The original data:/n“);for(i=0;iSIZE;i+)if(i%5=0)printf(“/n“);printf(“%4.0“ai);printf(“/n/nThe result:/n“);for(i=0;ik;i+)printf(“%6.2f“,bi;printf(“/n/n“);(分数:30.00)_三、程序设计题(总题数:1,
6、分数:40.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 S中,请编写函数 fun,其功能是:把低于平均分的学生数据放入 b所指的数组中,低于平均分的学生人数通过形参 n传回,平均分通过函数值返回。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includestdio.h#define N 8typedef structchar num10;double s;STREC;double fun(STREC*a,STREC*b,int*n)void main()STREC s
7、N=“GA05“,85,“GA03“,76,“GA02“,69,“GA04“,85,“GA01“,91,“GA07“,72,“GA08“,64,“GA06“,87;STREC hN;int i,n;double ave;ave=fun(s,h,printf(“The%d student data which is lowerthan%7.3f:/n“n,ave);for(i=0;in;i+)/*输出成绩低于平均值的学生记录*/printf(“%s%4.1f/n“,hi,num,hi,s;printf(“/n“);(分数:40.00)_二级 C语言机试-266 答案解析(总分:100.00,做题
8、时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定程序中,函数 fun的功能是:把形参 a所指数组中的最大值放在 a0中,接着求出 a所指数组中的最小值放在 a1中,再把 a所指数组元素中的次大值放在 a2中,把 a数组元素中的次小值放在a3中,依次类推。例如,若 a所指数组中的数据最初排列为:1、4、2、3、9、6、S、8、7,按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参 n中存放 a所指数组中数据的个数。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#
9、includestdio.h#define N 9/*found*/void fun(int (1) ,int n)int i,j,max,min,px,pn,t;/*found*/for(i=0;in-1;i+= (2) )max=min=ai;px=pn=i;/*found*/for(j= (3) ;jn;j+)if(maxcaj)(max=aj;px=j;)if(minaj)(min=aj;pn=j;)if(px!=i)(t=ai=ai=max;apx=c;if(pn=i)pn=px;if(pn!=i+1)n=ai+1;ai+1=min;apn=t)main()int bN=(1,4,2
10、,3,9,6,5,8,7),i;printf(“/nThe original data:/n“);for(i=0;iN;i+)printf(“%4d%,bi);printf(“/n“);fun(b,N);printf(“/nThe data after moving:/n“);for(i=0;iN;i+)printf(“%4d“,bi);printf(“/n“);(分数:30.00)_正确答案:(a (2)2 (3)i+l)解析:解析 本题关键字有:函数定义;for 循环语句。微分析填空 1:fun 函数的形参由 main中的函数调用语句确定。填空 2:每次保存一个最大值和一个最小值,循环变量
11、增值为 2。填空 3:当前值与其后的每个值比较。二、程序改错题(总题数:1,分数:30.00)2.下列程序中,函数 fun的功能是:按顺序给 S所指数组中的元素赋予从 2开始的偶数,然后再按顺序对每 5个元素求平均值,并将这些值依次存放在 W所指的数组中。若 S所指数组中元素的个数不是 5的倍数,则多余部分忽略不计。例如,S 所指数组有 14个元素,则只对前 lO个元素进行处理,不对最后的 4个元素求平均值。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdio.h#define SIZE 20fun(
12、double*s,double*w)int k,i;double sum;for(k=2,i=0;iSIZE;i+)(sil=k;k+=2;/*found*/sun=0.0;for(k=0,i=0;iSIZE;i+)(sum+=si;/*found*/if(i+1%5=0)wk=sum/5;sum=0;k+;)return k;main()(double aSIZE,bSIZE/5;int i,k;k=fun(a,b);printf(“The original data:/n“);for(i=0;iSIZE;i+)if(i%5=0)printf(“/n“);printf(“%4.0“ai);p
13、rintf(“/n/nThe result:/n“);for(i=0;ik;i+)printf(“%6.2f“,bi;printf(“/n/n“);(分数:30.00)_正确答案:(sum=0.0;(2)if(i+1)%5=0)解析:解析 本题关键字有:if 语句条件表达式;变量定义和变量使用。微分析(1)变量 sum书写错误。(2)对每 5个元素求平均值,应先计算 i+1,再对 5求余,所以 i+1要用小括号括起来。三、程序设计题(总题数:1,分数:40.00)3.学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 S中,请编写函数 fun,其功能是:把低于平均分的学生数
14、据放入 b所指的数组中,低于平均分的学生人数通过形参 n传回,平均分通过函数值返回。注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includestdio.h#define N 8typedef structchar num10;double s;STREC;double fun(STREC*a,STREC*b,int*n)void main()STREC sN=“GA05“,85,“GA03“,76,“GA02“,69,“GA04“,85,“GA01“,91,“GA07“,72,“GA08“,64,“GA
15、06“,87;STREC hN;int i,n;double ave;ave=fun(s,h,printf(“The%d student data which is lowerthan%7.3f:/n“n,ave);for(i=0;in;i+)/*输出成绩低于平均值的学生记录*/printf(“%s%4.1f/n“,hi,num,hi,s;printf(“/n“);(分数:40.00)_正确答案:(double fun(STREC*a,STREC*b,int*n)int i,j=0;dOuble av=0.0;for(i=0;iN;i+)av=av+ai,s;av=av/N; /*求平均值*/for(i=0;iN;i+)ifc ai,sav)bj+=ai;/*将低于平均值的学生记录存人结构体数组 b中*/*n=j; /*指针传回低于平均值的学生人数*/return av; /*返回平均值*/)解析:解析 本题关键字有:结构体类型;循环语句;if 条件语句;指针型变量。微分析本题先通过循环语句求出总分,进而求出平均分 av,然后将分数低于平均分的学生记录存入数组 b中,返回平均分。