1、二级 C 语言-295 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(),该函数的功能是:输出一个 MM 矩阵,M 由键盘输入,矩阵元素的值为随机数,并计算出该矩阵四周边元素的平均值,结果由函数返回。 例如,当 M=4 时,有 (分数:30.00)二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:根据形参 m(2m9)的值,在 m 行 m 列的二维数组中存放如下所示的数据,由 main()函数输出。 例如,若输入 3,则输出 1 2 3 2 4 6 3 6 9 若输
2、入 5,则输出 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includeconio.h #includestdlib.h #includestdio.h #define N 10 int arrNN=0; /*found* proc(int*a, int m) int j, k; for(j=0; jm; j+) for(k=0; km; k+) /*found* ajk=k*j; vo
3、id main() int i, j, n; system(“CLS“); printf(“Enter n/n“); scanf(“%d“, proc(arr, n); for(i=0; in; i+) for(j=0; jn; j+) printf(“%4d“, arrij); printf(“/n“); (分数:40.00)_三、程序设计题(总题数:1,分数:30.00)3.请编写函数 proc(),它的功能是计算下列级数和,和值由函数值返回。 sum=1-x+x2/2!-x3/3!+(-1*x)n/n! 例如,当 n=23,x=0.3 时,函数值为 0.740818。 注意:部分源程序给
4、出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includemath.h double proc(double x, int n) void main() system(“CLS“); printf(“%f“, proc(0.3, 23); (分数:30.00)_二级 C 语言-295 (1)答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(
5、),该函数的功能是:输出一个 MM 矩阵,M 由键盘输入,矩阵元素的值为随机数,并计算出该矩阵四周边元素的平均值,结果由函数返回。 例如,当 M=4 时,有 (分数:30.00)解析:i=0|i=n-1|j=0|j=n-1 4*n-4 s/k解析 题目中要求所有周边元素的平均值,首先要找出所有的周边元素。周边元素的特点是,行或列下标为 0,或者行或列下标为 n-1,因此,第一处填“i=-0|i=n-1|j=0|j=n-1”;变量 k 存放周边元素的个数,因此,第二处填“4*n-4”;周边元素之和存放在变量 s 中,变量 aver 是周边元素的平均数,因此第三处填“s/k”。二、程序改错题(总题
6、数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:根据形参 m(2m9)的值,在 m 行 m 列的二维数组中存放如下所示的数据,由 main()函数输出。 例如,若输入 3,则输出 1 2 3 2 4 6 3 6 9 若输入 5,则输出 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includeconio.h #includestdlib.h #includestd
7、io.h #define N 10 int arrNN=0; /*found* proc(int*a, int m) int j, k; for(j=0; jm; j+) for(k=0; km; k+) /*found* ajk=k*j; void main() int i, j, n; system(“CLS“); printf(“Enter n/n“); scanf(“%d“, proc(arr, n); for(i=0; in; i+) for(j=0; jn; j+) printf(“%4d“, arrij); printf(“/n“); (分数:40.00)_正确答案:()解析:(
8、1)错误:proc(int*a, int m) 正确:void proc(int(*a)N, int m) (2)错误:ajk=k*j; 正确:ajk=(k+1)*(j+1); 解析 从主函数的调用可知,函数 proc()没有返回值,因此应该定义为void 类型。形参 a 应该是一个整型的指针数组。因此,“proc(int*a, int m)”应改为“void proc(int(*a)N,int m)”。数组下标从 0 开始,由事例数组可知,其元素从 1 开始递增,因此“aik=k*j;”应改为“ajk=(k+1)*(j+1);”。三、程序设计题(总题数:1,分数:30.00)3.请编写函数
9、proc(),它的功能是计算下列级数和,和值由函数值返回。 sum=1-x+x2/2!-x3/3!+(-1*x)n/n! 例如,当 n=23,x=0.3 时,函数值为 0.740818。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includemath.h double proc(double x, int n) void main() system(“CLS“); printf(“%f“,
10、proc(0.3, 23); (分数:30.00)_正确答案:()解析:double proc(double x, int n) int i, j=1; double s=1.0, s1=1.0; for(i=1; i=n; i+) j=-1*j; /j 是控制其正负号的变化 s1=s1*i; /s1 是控制其分母的变化 s=s+j*pow(x,i)/s1; /s 是整个分数的和 return s; /最后把所得到的 s 返回到主函数中 解析 首先定义两个变量分别用来存储级数的和与每一项的分母。观察级数的特点,其每一项的正负号是交替变化的。根据这些特点,每增加一项都需要变换符号。最后求出级数的和。