1、国家二级 C语言机试(操作题)模拟试卷 179及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:计算形参 x所指数组中 N个数的平均值 (规定所有数均为正数 ),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至 x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。 例如,有 10个正数: 46 30 32 40 6 17 45 15 48 26,平均值为:30 500000 移动后的输出为: 30 6 17 15 26 46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序
2、存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 10 double fun(double *x) int i, j; double av, yN; av=0; *found* for(i=0 ; iN; i+) av +=_1_; for(i=j=0; iN; i+) if(xiav)( *found* yj=xi; xi=一 1; _2_; ) i=0; while(iN) if(xi!= 一 1) yj+=xi; *found* _3_; for(i=0; iN; i+)xi=yi; return
3、 av; main() int i; double xN; for(i=0; iN; i+)xi=rand() 50; printf(“ 4 0 f“, xi); ) print f(“ n“); printf(“ nThe aVerage is: f n“, fun(x); printf(“ nThe result : n“, fun(x); for(i=0 ; iN ; i+)print f(“ 5 0 f “, xi); print f(“ n“); 二、程序修改题 2 给定程序 MODI1 C中 fun函数的功能是:根据整型形参 m,计算如下公式的值。 例如,若主函数中输入 5,则应输
4、出 0 283333。 请改正函数 fun中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 !#includedouble fun(int m) double t=1 0; int i ; for(i = 2 ; i 三、程序设计题 3 编写函数 fun,它的功能是计算: s作为函数值返回。 在 C语言中可调用 log(n)函数求 ln(n)。 log函数的引用说明是: double log(double x)。 例如,若 m的值为: 20, fun函数值为: 6 506583。 注意:部分源程序在文件
5、PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include#includedouble fun(int m)msin() void NONO(); printf(“ f n“, fun(20); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*fp, *wf; int i, n; double s; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 国家二级 C语言机试(操作题
6、)模拟试卷 179答案与解析 一、程序填空题 1 【正确答案】 (1)xi N (2)j+或 j=j+1 (3)i+或 i=i+1 【试题解析】 第一空: “for(i=0; iN: i+) aV+=_1_; ”在该循环的下一个循环内是逐个比较元素 xi是否小于 aV,即该循环的功能是求出平均值。由av=(x0+x1+xN 一 1) N=x0 N+x1 N+xN -1 N可知,第一空处应为 “xi N”。 第二空: “if(xiav)yj=xi; xi=一 1=_2_; ”如果 xi小于平均值则将 xi存储在 y数组中,变量 i是循环变量,变量 i记录数组 y的下标变化,下一次执行if内部语句
7、时, y数组的下标应为下一个位置,故第二空处应为 j加 1,即第二空出为 “j+”或 “j=j+1”。 第三空: i为 while循环的循环变量,第一次进入 while的时候 i为 0,判断第一个元素 x0是否是一 1,第二次进入的时候判断第二个元素 x1是否是 -1,依此类推直到 i=N退出循环,故第三处是变量 i自增,即第三空处为 “i+”或 “i=i+1”。 二、程序修改题 2 【正确答案】 (1)t=t一 1 0 i;或 t一 =1 0 i; 或 t一 =(double)1 i; (2)return t; 【试题解析】 (1)第一个标识下的 “t=1 0-1 i; ”语句对题干中给出的多项式的求值,而根据题干中多项式的特点,多项式应该是 “t=t 1 0 i”。 (2)根据函数定义, fun函数应该具有返回值,第二个标识下的填空应该是“return t; ”返回多项式的值。 三、程序设计题 3 【正确答案】 double s=0 0; int i; for(i=1; i=m; i+)s+=log(1 0*i); s=sqrt(s); return s; 【试题解析】 (1)调用 log(n)函数求 ln(n)。 (2)对调用 log(n)进行累加求 和,求得根号里的内容。 (3)最后调用 C语言的库函数 sqrt计算 (2)中求得值的平方根。