1、二级 C 语言机试-116 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:33.00)1.在主函数中,从键盘输入若干个数放入数组 x 中,用 0 结束输入但不计入数组。下列给定程序中,函数fun()的功能是:输出数组元素中小于平均值的元素。请补充函数 fun()。例如:数组中元素的值依次为 1,2,2,12,5,15,则程序的运行结果为 1,2,2,5。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。试题程序:#includeconioh#includestdiohvoi
2、d fun( 【1】 ,int n)double sum=0.0;double average=0.0;int i=0;for(i=0;in;i+)【2】 ;average= 【3】 ;for(i=0;in;i+)if(xiaverage)if(i%5=0)printf(“/n“);printf(“%d/“,xi);main()int x1000;int i=0;clrscr();printf(“/nPlease enter some data(end with 0):“);doscanf(“%d“,fun(x,i-1);(分数:33.00)填空项 1:_二、改错题(总题数:1,分数:33.0
3、0)2.下列给定程序中,函数 fun()的功能是:根据整型形参 n,计算如下公式的值。A 1=1,A 2=1/(5+A1),A 3=1/(5+A2),A n=1/(5+A(n-1)例如,若 n=l0,则应输出 0.192582。请改正程序中的错误,使它能得到正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conioh#include stdiohfloat fun(int n)/*found*/int A=1;int i;/*found*/for(i=1;i=n;i+)A=1.0/(5+A);return A;main()int n;
4、clrscr();printf(“/nPlease enter n:“);scanf(“%d“,fun(x,i-1);(分数:33.00)填空项 1:_ (正确答案:1 int x 2 sum+=xi 3 sum/n)解析:解析 填空 1:由主函数 main()调用 fun()函数的格式,可知,函数 fun()的第个参数为整型数组。填空 2:为了求出平均值,首先要对数组中的元素求累加和。填空 3:数组中元素的累加和除以元素个数,得到所有元素的平均值。二、改错题(总题数:1,分数:33.00)2.下列给定程序中,函数 fun()的功能是:根据整型形参 n,计算如下公式的值。A 1=1,A 2=1
5、/(5+A1),A 3=1/(5+A2),A n=1/(5+A(n-1)例如,若 n=l0,则应输出 0.192582。请改正程序中的错误,使它能得到正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题程序:#include conioh#include stdiohfloat fun(int n)/*found*/int A=1;int i;/*found*/for(i=1;i=n;i+)A=1.0/(5+A);return A;main()int n;clrscr();printf(“/nPlease enter n:“);scanf(“%d“,i+))解析
6、:解析 错误 1:A 为实型数,应定义为 float 类型。错误 2:由题意,A1=1,从 A2 开始,An=l/(5+A(n-1),所以循环应从 2 开始。三、编程题(总题数:1,分数:34.00)3.请编写函数 fun(),它的功能是计算:s(1-ln(1)-ln(2)-ln(3)-ln(m) 2s 作为函数值返回。在 C 语言中可调用 log(n)函数求 ln(n)。log 函数的引用说明是 double log(double x)。例如,若 m 的值为 15,则 fun()函数值为 723.570801。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函
7、数 fun 的花括号中填入所编写的若干语句。试题程序:#include conioh#include stdioh#include mathh double fun(int m)main()clrscr();printf(“%f/n“,fun(15);(分数:34.00)_正确答案:(double fun(int m) int i;double s=1.0;for(i=1;i=m;i+)s=s-log(i); /*计算 s=1-ln(1)-ln(2)-ln(3)-ln(m)*/return (s*s); /*对 s 求平方并返回*/)解析:解析 首先,题目要求计算 1 依次减去 1 到 M 的对数,可用从 1 到 M 的循环,每次循环都减一个数的对数。该题需要注意,log()函数的形式参数应浩如烟海 double 型变量,用于循环的基数变量为整数,需要进行强制转换。最后在返回的时求平方。