1、全国计算机等级考试二级 C 语言机试真题 2007 年 9 月及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定的程序中,函数 fun()的功能是:求输入的两个数中较小的数。例如:输入 5 10,结果为 rain is 5。注意 部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。试题源程序#include stdio.h#include conio.hint fun(int x, (1) )int z;z=xy (2) x:y;return(z);main(
2、)int a, b, c;scanf(“%d, %d/n“, (3) );c=fun(a, b);printf(“min is %d“, c);(分数:30.00)填空项 1:_二、程序修改(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是求出数组中最小数和次最小数,并把最小数和 a0中的数对调,次最小数和 a1中的数对调。请改正程序中的错误,使它能得到正确结果。注意 不要改动 main 函数,不得增行或删行,也不得更改程序的结构。试题源程序#include stdio.h#include conio.h#define N 20void fun(int *a, int
3、n)int i, m, t, k;/*found*/for(i=0; in; i+)m=i;for(k=i; kn; k+)if(akam)/*found*/k=m;t=ai;ai=am;am=t;(分数:30.00)_三、编程题(总题数:1,分数:40.00)3.下列程序定义了 NN 的二维数组,并在主函数中赋值。请编写一个函数 fun(),函数的功能是:求数组周边元素的平方和并作为函数值返回给主函数。例如,若数组 a 中的值为0 1 2 7 91 11 21 5 52 21 6 11 19 7 9 10 25 4 1 4 1则返回主程序后 s 的值应为 310。注意 部分源程序给出如下。请
4、勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。试题源程序#include stdio.h#include conio.h#include stdiib.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“);for(i=0; iN; i+)for(j=0; jN; j+
5、)printf(“%4d“, aij);printf(“/n);s=fun(a);printf(“*THE RESULT*/n“);printf(“The sum is: %d/n“, s);(分数:40.00)_全国计算机等级考试二级 C 语言机试真题 2007 年 9 月答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.下列给定的程序中,函数 fun()的功能是:求输入的两个数中较小的数。例如:输入 5 10,结果为 rain is 5。注意 部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上
6、填入所编写的若干表达式或语句。试题源程序#include stdio.h#include conio.hint fun(int x, (1) )int z;z=xy (2) x:y;return(z);main()int a, b, c;scanf(“%d, %d/n“, (3) );c=fun(a, b);printf(“min is %d“, c);(分数:30.00)填空项 1:_ (正确答案:1 int y2 ?3 a, b)解析:解析 填空 1:根据题目的意思,这里应该是子函数的参数声明部分。C 语言规定,在函数的形参中不允许出现 intx,y 之类的语句,必须指定每一个参数的类型,
7、所以不能直接写 y。填空 2:根据题目的意思,此处是使用三目运算符“?”比较两个数的大小,使用规则是如果运算符前面的表达式中哪个变量成立,则整个式子就取运算符后面的那个变量。填空 3:由算法可以看出,此处是输入变量 a 和 b 的值,因为使用了 scanf 函数,所以应该使用符号“”,注意两个变量之间的“,”不能省略。二、程序修改(总题数:1,分数:30.00)2.下列给定程序中,函数 fun()的功能是求出数组中最小数和次最小数,并把最小数和 a0中的数对调,次最小数和 a1中的数对调。请改正程序中的错误,使它能得到正确结果。注意 不要改动 main 函数,不得增行或删行,也不得更改程序的结
8、构。试题源程序#include stdio.h#include conio.h#define N 20void fun(int *a, intn)int i, m, t, k;/*found*/for(i=0; in; i+)m=i;for(k=i; kn; k+)if(akam)/*found*/k=m;t=ai;ai=am;am=t;(分数:30.00)_正确答案:(1)错误:for(i=0; in; i+)正确:for(i=0; i2; i+)(2)错误:k=m;正确:m=k;)解析:解析 错误 1:由于题目要求将最小数和次最小数分别与 a0和 a1中的数对调,因此这层循环只需循环两次。
9、错误 2:赋值语句的执行方向是从右到左,即把右边的值赋给左边的变量。三、编程题(总题数:1,分数:40.00)3.下列程序定义了 NN 的二维数组,并在主函数中赋值。请编写一个函数 fun(),函数的功能是:求数组周边元素的平方和并作为函数值返回给主函数。例如,若数组 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#inclu
10、de conio.h#include stdiib.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“);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-i | j=0 | j=N-1)s=s+wij*wij;return s;)解析:解析 该题采用逐一判断的方式,周边元素的下标一定有 0 或 N-1,且只要下标中有一个为 0 或N-1,则它一定是周边元素。