1、二级 C 语言-362 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:计算 x 所指数组中 N 个数的平均值(规定所有数均为正数),平均值通过形参返回给主函数,将小于平均值且最接近平均值的数作为函数值返回,并在主函数中输出。 例如,有 10 个正数:46、30、32、40、6、17、45、15、48、26,平均值为 30.500000。 主函数中输出 m=30.0。 请在程序的下划线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序:
2、 #includestdlib.h #includestdio.h #define N 10 double fun(double x,double*av) int i,j;double d,s; s=0; for(i=0;iN;i+)s=s+xi; /*found*/ 1=s/N; d=32767; for(i=0;iN;i+) if(xi*avj= 2; /*found*/ return 3; main() int i;double xN,av,m; for(i=0;iN;i+) xi=rand()%50; printf(“%4.0f“,xi); printf(“/n“); m=fun(x,
3、 printf(“/nThe average is:%f/n“,av); printf(“m=%5.1f“,m); printf(“/n“); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:根据整型形参 n,计算如下公式的值。 A 1 =1,A 2 =1/(1+A 1 ),A 3 =1/(1+A 2 ),A n =1/(1+A (n-1) ) 例如,若 n=10,则应输出 0.617977。 请改正程序中的锴误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!。 试题程序: #incl
4、udestdlib.h #includeconio.h #includestdio.h /*found*/ int fun(int n) float A=1;int i; /*found*/ for(i=2;in;i+) A=1.0/(1+A); return A; void main() int n; system(“CLS“); printf(“/nPlease enter n:“); scanf(“%d“, printf(“A%d=%lf/n“,n,fun(n); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.下列程序定义了 NN 的二维数组,并在主函数中自动赋值
5、。请编写函数 fun(int aN,int m),该函数的功能是使数组右上半三角元素中的值乘以 m。 例如,若 m 的值为 2,a 数组中的值为: 则返回主程序后 a 数组中的值应为: (分数:40.00)_二级 C 语言-362 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:计算 x 所指数组中 N 个数的平均值(规定所有数均为正数),平均值通过形参返回给主函数,将小于平均值且最接近平均值的数作为函数值返回,并在主函数中输出。 例如,有 10 个正数:46、30、32、40、6、17、45、15、48
6、、26,平均值为 30.500000。 主函数中输出 m=30.0。 请在程序的下划线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib.h #includestdio.h #define N 10 double fun(double x,double*av) int i,j;double d,s; s=0; for(i=0;iN;i+)s=s+xi; /*found*/ 1=s/N; d=32767; for(i=0;iN;i+) if(xi*avj= 2; /*found*/ return
7、3; main() int i;double xN,av,m; for(i=0;iN;i+) xi=rand()%50; printf(“%4.0f“,xi); printf(“/n“); m=fun(x, printf(“/nThe average is:%f/n“,av); printf(“m=%5.1f“,m); printf(“/n“); (分数:30.00)解析:(1)*av (2)i (3)xj 解析 填空 1:从原程序中可以看出*av 代表的是平均值,而 s/N 表示的就是平均值,因此本空应该填*av。 填空 2:if 语句来判断找最接近平均值的数,因而此空应该填 i。 填空 3
8、:题目要求将小于平均值且最接近平均值的数作为函数返回,而 j 表达的是最接近平均值的数在数组中的下标,因而本空应该填写 xj。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:根据整型形参 n,计算如下公式的值。 A 1 =1,A 2 =1/(1+A 1 ),A 3 =1/(1+A 2 ),A n =1/(1+A (n-1) ) 例如,若 n=10,则应输出 0.617977。 请改正程序中的锴误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!。 试题程序: #includestdlib.h #includ
9、econio.h #includestdio.h /*found*/ int fun(int n) float A=1;int i; /*found*/ for(i=2;in;i+) A=1.0/(1+A); return A; void main() int n; system(“CLS“); printf(“/nPlease enter n:“); scanf(“%d“, printf(“A%d=%lf/n“,n,fun(n); (分数:30.00)解析:(1)float fun(int n) (2)for(i=2;i=n;i+) 解析 (1)根据函数的返回值可知,函数应定义为 float
10、 型。 (2)该题中函数 fun 的作用是计算数列前 n 项的和,而数列的组成方式是:第 n 项的分母是 1 加第 n-1 项的值,分子为 1,如果循环累加按 for(i=2;in;i+)执行,当输入 n=2 时循环不会执行,程序将得不到想要的结果,因此循环变量的取值范围应包括 2。三、程序设计题(总题数:1,分数:40.00)3.下列程序定义了 NN 的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN,int m),该函数的功能是使数组右上半三角元素中的值乘以 m。 例如,若 m 的值为 2,a 数组中的值为: 则返回主程序后 a 数组中的值应为: (分数:40.00)_正确答案:()解析:void fun(int aN, int m) int i,j; for(j=0;jN;j+) for(i=0;i=j;i+) aij=aij*m; /*右上半三角元素中的值乘以 m*/ 解析 本程序实现将矩阵中右上半三角元素中的值乘以 m,使用循环语句遍历数组元素,第 1 个循环用于控制行坐标,第 2 个循环用于控制列下标。