国家二级C语言机试(操作题)模拟试卷461.docx
国家二级C语言机试(操作题)模拟试卷461(总分:6. 00,做题时间:90分钟)一、程序填空题(总题数:1,分数:2. 00)L下列给定程序中,函数fun的功能是:把形参a所指数组中的最大值放在a0中,接着求出a所指数 组中的最小值放在中,再把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所指数组中数据的个数。请在程序的 下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得 增行或删行,也不得更改程序的结构!试题程序:#lnc ± ude < stdio. n > ttdefine N 9 /*found*/ void fun(int 【1】 ,int n) int i, j , max , rain , px , pn , t; /*found*/ for(i=0; i < n - 1; i+= 2 ) max=min=ai; px=pn=i; /*found*/ for (j=【3;j < n; j+) if (max < aj) max=aj; px=j; if (rain >aj) min=aj ; pn=j; if (px!=i) t=ai ; ai=max; apx=t; if(pn=i)pn=px; if(pn!=i+l) (t=ai+l; ai+l=rain; apn=t; ) main() int bin=l, 4, 2, 3, 9, 6, 5, 8, 7, i; print f(/nThe original data: /n); for(i=0; i < N; i+) printf (4d,bi) ; printf (/n); fun(b, N) ; printf CVnThe data after moving: /n); for (i=0; i < N; i+) printi C%4 d”, bi) ; printf (/n); (分数:2.00) 正确答案:(正确答案:a 口 (2)2i+1)解析:解析:填空1:由main中的函数调用语句确定函数定义的形式参数。填空2: for循环语句中, 循环变量增值为2。填空3:确定for语句循环变量的初值。二、程序修改题(总题数:1,分数:2. 00)2.下列程序中,函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序 对每5个元素求一个平均值,并将这些值依次存放在'所指的数组中。若s所指数组中元素的个数不是5 的倍数,则多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最 后的4个元素求平均值。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数, 不得增行或删行,也不得更改程序的结构!试题程序:ttinclude < stdio. h >#define SIZE 20fun(doublets, double*w) int k, i; double sum; for(k=2, i=0; i < SIZE, i+) si=k, k+=2; /*f()und*/ sun=0. 0; for (k=0, i: 0; i < SIZE; i+) sum+=si; /*found*/ if (i+l%5=0) wk=sum/5; SLlm=0; k+; return k; main() double aSIZE, bSIZE/5; int i, k; k=fun(a, b); printf("The original data: /n); for (i=0; i < SIZE; i+) if (i%5=: 0)printf (v /nv ) ; printti (z,%4. of,ai) ; printf (/z/n/nThe result: /n); for (i=0 j i < kj i+) printf C%6. 2f,bi); printf (/n/n); (分数:2. 00) 正确答案:(正确答案:(l)sum =0. 0; (2)if(i+l)%5=0)解析:解析:本题考查:if语句条件表达式,需注意其格式是否正确;变量定义和变量使用。(1)变量 sum书写错误。(2)循环条件if (i+1%5二=0)是一个运算逻辑错误,应先计算i+1,再对5求余。三、程序设计题(总题数:1,分数:2.00)3,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun, 其功能是:把低于平均分的学生数据放入b所指的数组中,低于平均分的学生人数通过形参n传回,平 均分通过函数值返回。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何容,仅 在函数fun的花括号中填入你编写的若干语句。试题程序:ttinclude < stdio. h >#define N 8typedef struct char FILIm10; 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, GA06", 87; STREC hN; int i, n; double ave; ave=fun(s, h, &n) ; printf (The%d student datawhich is lower than%7. 3f: /n,n, ave) ; for (i=0; i < n; i+) /*输出成绩低于平均值的学生记录*/ pr成tf(s%4. lf/n, hi. num, hi. s); printf(/n); (分数:2.00) 正确答案:(正确答案:double fun(STREC *a, STREC *b, int *n) int i, j=0; double av=0. 0; for(i=0; i < N; i+) av =av +ai . s; av=av/N; /*求平均值*/ for(i=0; i < N, i+) if(ai . s < av) bj+=ai ; /*将低于平均值的学生记录存入结构体数组b中*/ *n=j; /*指针 传回低于平均值的学生人数*/ return av; /*返回平均值*/ )解析:解析:本题使用循环语句和条件判断语句来实现程序操作,第1个循环语句的作用是求出总分,然 后求出平均分avo第2个循环的作用是将分数低于平均分的学生记录存入结构体数组b中。