1、二级 C 语言-359 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.函数 fun 的功能是:计算 ,直到 (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:计算 n 的 5 次方的值(规定 n 的值大于 2 且小于 8),通过形参指针传回主函数,并计算该值的个位、十位、百位上数字之和作为函数值返回。例如,7 的 5 次方是16807,其后 3 位数的和值是 15。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构
2、! 试题程序: #includestdio.h #includemath.h int fun(int n,int,*value) int d,s,i; /*found*/ d=0; /*found*/ s=1; for(i=1;i=5;i+) d=d*n; *value=d; for(i=1;i=3;i+) s=s+d%10; /*found*/ s=s/10; return s; main() int n,sum,v; do printf(“/nEnter n(2n8):“); scanf(“%d“, while(n=2|n=8); sum=fun(n, printf(“/n/nThe re
3、sult:/n value=%d sum=%d/n/n“,v,sum); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.请编写函数 fun,其功能是:计算并输出给定数组(长度为 9)中每相邻两个元素的平均值的平方根之和。例如,若给定数组中的 9 个元素依次为 1210、3410、410、230、340、450、180、310、110,则输出应为S=35.951014。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includestdio.h #includemath.h
4、double fun(double x9) main() double s,a9=12.0,34.0,4.0,23.0,34.0,45.0,18.0,3.0,11.0; int i; printf(“/nThe original data is:/n“); for(i=0;i9;i+) printf(“%6.1f“,ai); printf(“/n/n“); s=fun(a); printf(“S=%f/n/n“,s); (分数:40.00)_二级 C 语言-359 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.函数 fun 的功能是:计算
5、 ,直到 (分数:30.00)解析:(1)x (2)n (3)t 解析 填空 1:通过下面的语句可以知道 n 是从 2 开始的,而根据题目的要求是从 1x 开始的,因而此空应填写 x。 填空 2:由于本题用的是 dowhile,先循环后来判断,因此本空应该填写 n。 填空 3:根据题目要求和复合赋值运算可知此空应填 t。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:计算 n 的 5 次方的值(规定 n 的值大于 2 且小于 8),通过形参指针传回主函数,并计算该值的个位、十位、百位上数字之和作为函数值返回。例如,7 的 5 次方是16807,其后 3
6、 位数的和值是 15。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includemath.h int fun(int n,int,*value) int d,s,i; /*found*/ d=0; /*found*/ s=1; for(i=1;i=5;i+) d=d*n; *value=d; for(i=1;i=3;i+) s=s+d%10; /*found*/ s=s/10; return s; main() int n,sum,v; do printf(“/nEnter
7、n(2n8):“); scanf(“%d“, while(n=2|n=8); sum=fun(n, printf(“/n/nThe result:/n value=%d sum=%d/n/n“,v,sum); (分数:30.00)解析:(1)d=1; (2)s=0; (3)d=d/10; 解析 (1)此处属于逻辑错误,假如 d=0,则 d=d*n 就不能计算 n 的 5 次方,应将 d 初始化为 1。 (2)在 for 循环中,如果 s1,就改变了 d 的个位数的值。 (3)s 用来求个位、十位、百位的和,d 是 n 的 5 次方的值,每循环一次 d 除以 10,用来求十位、百位的值。三、程序
8、设计题(总题数:1,分数:40.00)3.请编写函数 fun,其功能是:计算并输出给定数组(长度为 9)中每相邻两个元素的平均值的平方根之和。例如,若给定数组中的 9 个元素依次为 1210、3410、410、230、340、450、180、310、110,则输出应为S=35.951014。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includestdio.h #includemath.h double fun(double x9) main() double s,a9=12.0,34.0,
9、4.0,23.0,34.0,45.0,18.0,3.0,11.0; int i; printf(“/nThe original data is:/n“); for(i=0;i9;i+) printf(“%6.1f“,ai); printf(“/n/n“); s=fun(a); printf(“S=%f/n/n“,s); (分数:40.00)_正确答案:()解析:double fun(double x9) double sum=0.0; int i,j=1; for(i=0;i9;i+) if(j=8) sum+=sqrt(xi+xi+1)/2.0);j+; /*相邻两个元素之平均值的平方根之和*/ return sum; 解析 计算数组相邻两个元素的平均值,首先要取出数组中相邻两个元素,即 xi和 xi+1。本程序使用循环语句遍历整个数组,在条件语句中计算相邻两个元素的平均值,并累加其平方根。