1、二级 C 语言-335 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(),它的功能是:计算并输出 n(包括 n)以内能被 3 或 7 整除的所有自然数的倒数之和。例如,在主函数中从键盘给 n 输入 20 后,输出为:s=1.030952。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h double proc(int n) int i; double sum=0.0; if(
2、n0 1; i+) if( 2) sum+= 3; return sum; void main() int n; double sum; printf(“/nInput n: “); scanf(“%d“, sum=proc(n); printf(“/n/ns=%f/n“, sum); (分数:30.00)二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:从 3 个红球,5 个白球,6 个黑球中任意取出 8 个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是 15。程序中 i 的值代表红球数,
3、j 的值代表白球数,k 的值代表黑球数。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h int proc() int i, j, k, sum=0; printf(“/nThe result: /n/n“); /*found* for(i=0; i=3; i+) for(j=1; j=5; j+) k=8-i-j; /*found* if(k=1 printf(“red: %4d white: %4d black: %4d/n“, i, j, k); return sum; vo
4、id main() int sum; sum=proc(); printf(“sum=%d/n/n“, sum); (分数:40.00)_三、程序设计题(总题数:1,分数:30.00)3.下列程序定义了 MM 的二维数组,并在主函数中赋值。请编写函数 proc(),函数的功能是求出数组周边元素的平方和并作为函数值返回给主函数中的 s。例如,若 a 数组中的值为 a=0 1 2 7 9 1 67 20 93 5 2 5 18 34 1 9 9 8 87 2 5 4 1 4 1 则返回主程序后 s 的值应为 310。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅
5、在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdio.h #includeconio.h #includestdlib.h #define M 5 int proc(int wM) void main() int arrMM=0, 1, 2, 7, 9, 1, 67, 20, 93, 5, 2, 5, 18, 34, 1, 9, 9, 8, 87, 2, 5, 4, 1, 4, 1; int i, j; int sum; system(“CLS“); printf(“*The array*/n“); for(i=0; iM; i+) for(j=0; j
6、M; j+) printf(“%4d“, arrij); printf(“/n“); sum=proc(arr); printf(“*THE RESULT*/n“); printf(“The sum is: %d/n“, sum); (分数:30.00)_二级 C 语言-335 (1)答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(),它的功能是:计算并输出 n(包括 n)以内能被 3 或 7 整除的所有自然数的倒数之和。例如,在主函数中从键盘给 n 输入 20 后,输出为:s=1.030952。 注意:部分源程序给出
7、如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h double proc(int n) int i; double sum=0.0; if(n0 1; i+) if( 2) sum+= 3; return sum; void main() int n; double sum; printf(“/nInput n: “); scanf(“%d“, sum=proc(n); printf(“/n/ns=%f/n“, sum); (分数:30.00)解析:i=n i%3=0|i%7=0
8、1.0/i 或 1/(double)i解析 由函数 proc()可知,变量 i 为循环计数器,包括 n。因此,第一处填“i=n”。题目中要求计算并输出 n(包括 n)以内能被 3 或 7 整除的所有自然数的倒数之和,判断条件为能被 3 或 7 整除的所有自然数。因此,第二处填“i%3=0|i%7=0”。算出所有符合要求的自然数的倒数之和,因此,第三处填“1.0/i 或 1/(double)i”。二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:从 3 个红球,5 个白球,6 个黑球中任意取出 8 个作为一组,进行输出。在每组中,可以没有黑球,但必须要
9、有红球和白球。组合数作为函数值返回。正确的组合数应该是 15。程序中 i 的值代表红球数,j 的值代表白球数,k 的值代表黑球数。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h int proc() int i, j, k, sum=0; printf(“/nThe result: /n/n“); /*found* for(i=0; i=3; i+) for(j=1; j=5; j+) k=8-i-j; /*found* if(k=1 printf(“red: %4d white
10、: %4d black: %4d/n“, i, j, k); return sum; void main() int sum; sum=proc(); printf(“sum=%d/n/n“, sum); (分数:40.00)_正确答案:()解析:(1)错误:for(i=0; i=3; i+) 正确:for(i=1; i=3; i+) (2)错误:if(k=1 i=3; i+)”应改为“for(i=1; i=3; i+)”;可以没有黑球,因此,“if(k=1 int i, j; int sum; system(“CLS“); printf(“*The array*/n“); for(i=0;
11、iM; i+) for(j=0; jM; j+) printf(“%4d“, arrij); printf(“/n“); sum=proc(arr); printf(“*THE RESULT*/n“); printf(“The sum is: %d/n“, sum); (分数:30.00)_正确答案:()解析:int proc(int wM) int i, j; int s=0; /s 是和的变量 for(i=0; iM; i+) for(j=0; jM; j+) if(i=0|i=M-1|j=0|j=M-1) /因为周边的元素的下标的特点是:行为 0 或列为 0 s=s+wij*wij;为 N-1 return s; /最后把所求的数返回到主函数中 解析 要求出数组周边元素的平方和,首先要找到二维数组所有的周边元素。二维数组的周边元素的特点为行下标或列下标为 0 或 M-1。根据这个特点,找出二维数组中所有的周边元素,求出其平方和放在变量 s 中。最后将变量 s 返回到主函数中。