1、二级 C 语言-52 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)函数 fun 的功能是:从三个形参 a,b,c 中找出中间的那个数,作为函数值返回。例如,当 a=3,b=5,c=4 时,中间的数为 4。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容,仅在 fun 函数的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.hint fun(int a,int b,int c)int t;t=(ab)?(bc?b:(ac?c:U U 1 /U /U):(ac)?U U 2 /U /U:(bc
2、)?c:U U 3 /U /U);return t;void main()int a1=3,a2=5,a3=4,r;r=fun(a1,a2,a3);printf(“/nThe middle number is:%d/n“,r);(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、B改错题/B(总题数:1,分数:30.00)1.给定程序 MODI1.C 中函数 fun 的功能是:根据整型形参 m 的值,计算如下公式的值: (分数:30.00)填空项 1:_三、B编程题/B(总题数:1,分数:40.00)2.下列程序定义了 NN 的二维数组,并在主函数中赋值。请编写一个函数 fun(
3、),函数的功能是:求数组周边元素的平方和,并作为函数值返回给主函数。例如,若数组 a 中的值为0 1 2 7 91 11 21 5 52 21 6 11 19 7 9 10 25 4 1 4 1则返回主程序后 s 的值应为 310。注意 部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题源程序#include stdio.h#include conio.h#include stdlib.h#define N 5int fun(int wN)main()int aNN=(0, 1, 2, 7, 9, 1, 11, 21,
4、5, 5, 2, 21, 6, 11, 1, 9, 7, 9, 10, 2, 5, 4, 1, 4, 1);int i, j;int s;clrscr()printf(“*The array*/n“);for(i=0; iN; i+)for(j=0; jN; j+)printf(“%4d“, aij);printf(“/n“);s=fun(a);printf(“*THE RESULT*/n“);printf(“The sum is: %d/n“, s);(分数:40.00)_二级 C 语言-52 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00
5、)函数 fun 的功能是:从三个形参 a,b,c 中找出中间的那个数,作为函数值返回。例如,当 a=3,b=5,c=4 时,中间的数为 4。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容,仅在 fun 函数的横线上填入所编写的若干表达式或语句。试题程序:#includestdio.hint fun(int a,int b,int c)int t;t=(ab)?(bc?b:(ac?c:U U 1 /U /U):(ac)?U U 2 /U /U:(bc)?c:U U 3 /U /U);return t;void main()int a1=3,a2=5,a3=4,r;r=f
6、un(a1,a2,a3);printf(“/nThe middle number is:%d/n“,r);(分数:30.00)填空项 1:_ (正确答案:a)解析:填空项 1:_ (正确答案:a)解析:填空项 1:_ (正确答案:b)解析:解析 本题考查条件运算符嵌套构成复杂的条件表达式的能力。条件运算符规则为:表达式?a:b,首先判断表达式值,若为真(即非零)则取 a 值作为整条语句的值,否则取 b 作为整条语句的值。其中条件 fun 函数的功能是:从三个形参 a,b,c 中找出中间的那个数,作为函数值返回。fun 函数中复杂的表达式可以转换成 If-else 语句,则可以清楚地判断出第 1
7、 处填 a,第 2 处填 a,第 3 处填 b。二、B改错题/B(总题数:1,分数:30.00)1.给定程序 MODI1.C 中函数 fun 的功能是:根据整型形参 m 的值,计算如下公式的值: (分数:30.00)填空项 1:_ (正确答案:第 1 处:将“for(i=2;im;i+)”改为“for(i=2;i=m;i+)”。 第 2 处:将“y-=1/(i*i);”改为“y-=1.0/(i*i);”。)解析:解析 题目要求计算公式*的值,在程序中公式的值存放在变量 y 中,且 y 的初值为 1,所以,循环是从公式的第二项开始,分母的变化规律是:从 2 开始循环到 m(包括 m 在内),所以
8、循环控制变量 i的值应该从 2 开始循环到 m 结束。第 1 处错误是循环条件出错,应该使用“=”。第 2 处错误可能不太容易发现,由于变量 i 是整型,1 也是一个整数,所以本程序中“1/(i*i)”的结果是 0,想要得到实除的结果,最简单的办法就是把“1”改为“1.0”。三、B编程题/B(总题数:1,分数:40.00)2.下列程序定义了 NN 的二维数组,并在主函数中赋值。请编写一个函数 fun(),函数的功能是:求数组周边元素的平方和,并作为函数值返回给主函数。例如,若数组 a 中的值为0 1 2 7 91 11 21 5 52 21 6 11 19 7 9 10 25 4 1 4 1则
9、返回主程序后 s 的值应为 310。注意 部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题源程序#include stdio.h#include conio.h#include stdlib.h#define N 5int fun(int wN)main()int aNN=(0, 1, 2, 7, 9, 1, 11, 21, 5, 5, 2, 21, 6, 11, 1, 9, 7, 9, 10, 2, 5, 4, 1, 4, 1);int i, j;int s;clrscr()printf(“*The array*/n
10、“);for(i=0; iN; i+)for(j=0; jN; j+)printf(“%4d“, aij);printf(“/n“);s=fun(a);printf(“*THE RESULT*/n“);printf(“The sum is: %d/n“, s);(分数:40.00)_正确答案:(int fun(int wN) int i, j, k=0; int s=0; for(i=0; iN; i+) for(j=0; jN; j+) if(i=0|i=N-1|j=0|j=N-1) s=s+wij*wij; return s; )解析:解析 该题采用逐一判断的方式,周边元素的下标一定有 0 或 N-1,且只要下标中有一个为 0 或N-1,则它一定是周边元素。