1、二级 C 语言-375 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:找出 NN 矩阵中每列元素中的最大值,并按顺序依次存放于形参 b所指的一维数组中。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #define N 4 void fun(int(*a)N,int*b) int i,j; for(i=0;iN;i+) /*found*/ bi= 1; for(j=1;jN;j+) /*
2、found*/ if(bi 2aji) bi=aji; main() int xNN=12,5,8,7,6,1,9,3,1,2,3,4,2,8,4,3,yN,i,j; printf(“/nThe matrix:/n“); for(i=0;iN;i+) for(j=0;jN;j+) printf(“%4d“,xij); printf(“/n“); /*found*/ fun( 3); printf(“/nThe result is:“); for(i=0;iN;i+) printf(“%3d“,yi); printf(“/n“); (分数:30.00)二、程序修改题(总题数:1,分数:30.00
3、)2.下列给定程序中,函数 fun 的功能是:将主函数中两个变量的值进行交换。例如,若变量 a 中的值为8,b 中的值为 3,则程序运行后,a 中的值为 3,b 中的值为 8。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h /*found*/ void fun(int x,int y) int t; /*found*/ t=x;x=y;y=t; void main() int a,b; a=8; b=3; fun( printf(“%d%d/n“,a,b); (分数:30.00)三
4、、程序设计题(总题数:1,分数:40.00)3.编写函数 int fun(int lim,int aaMAX),其功能是求出小于或等于 lim 的所有素数并放在 aa 数组中,并返回所求出的素数的个数。 注意:请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序: #includeconio.h #includestdio.h #includestdlib.h #define MAX 100 int fun(int lim,int aaMAX) void main() FILE *wf; int limit,i,sum; int aaMA
5、X; system(“CLS“); printf(“输入一个整数:“); scanf(“%d“, sum=fun(limit,aa); for(i=0;isum;i+) if(i%10=0 printf(“%5d“,aai); /*/ wf=fopen(“out.dat“,“w“); sum=fun(15,aa); for(i=0;isum;i+) if(i%10=0 fprintf(wf,“%5d“,aai); fclose(wf); /*/ (分数:40.00)_二级 C 语言-375 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给
6、定程序中,函数 fun 的功能是:找出 NN 矩阵中每列元素中的最大值,并按顺序依次存放于形参 b所指的一维数组中。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #define N 4 void fun(int(*a)N,int*b) int i,j; for(i=0;iN;i+) /*found*/ bi= 1; for(j=1;jN;j+) /*found*/ if(bi 2aji) bi=aji; main() int xNN=12,5,8,7,6,1,9,3,1,2,3
7、,4,2,8,4,3,yN,i,j; printf(“/nThe matrix:/n“); for(i=0;iN;i+) for(j=0;jN;j+) printf(“%4d“,xij); printf(“/n“); /*found*/ fun( 3); printf(“/nThe result is:“); for(i=0;iN;i+) printf(“%3d“,yi); printf(“/n“); (分数:30.00)解析:(1)a0i (2) (3)x,y 解析 填空 1:数组 b 用于存放每列元素中的最大值,首先将第 i 列的第一个数赋给 bi,然后用 bi与其他数进行比较,因此此空应
8、填 a0i。 填空 2:if 条件表达式表示当 bi小于 aji时,就把 aji的值赋给 bi,因此此空应该填。 填空 3:fun 函数的调用,通过 fun(int(*a)N,int*b)可知,此空应该填 x,y。二、程序修改题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:将主函数中两个变量的值进行交换。例如,若变量 a 中的值为8,b 中的值为 3,则程序运行后,a 中的值为 3,b 中的值为 8。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h /*
9、found*/ void fun(int x,int y) int t; /*found*/ t=x;x=y;y=t; void main() int a,b; a=8; b=3; fun( printf(“%d%d/n“,a,b); (分数:30.00)解析:(1)void fun(int*x,int*y) (2)t=*x;*x=*y;*y=t; 解析 (1)本题考查指针变量作函数参数。一般变量作参数时,不能改变实参的值,采用指针变量作为参数则能够改变实参的值。主函数中 fun 函数的调用方式表明 fun 函数的参数应当为指针类型。 (2)此处是一个变量交换操作错误,可知 x、y 是指针类型
10、,变量类型不同,因而 x、y 不能与 t 进行值的交换。三、程序设计题(总题数:1,分数:40.00)3.编写函数 int fun(int lim,int aaMAX),其功能是求出小于或等于 lim 的所有素数并放在 aa 数组中,并返回所求出的素数的个数。 注意:请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序: #includeconio.h #includestdio.h #includestdlib.h #define MAX 100 int fun(int lim,int aaMAX) void main() FILE *
11、wf; int limit,i,sum; int aaMAX; system(“CLS“); printf(“输入一个整数:“); scanf(“%d“, sum=fun(limit,aa); for(i=0;isum;i+) if(i%10=0 printf(“%5d“,aai); /*/ wf=fopen(“out.dat“,“w“); sum=fun(15,aa); for(i=0;isum;i+) if(i%10=0 fprintf(wf,“%5d“,aai); fclose(wf); /*/ (分数:40.00)_正确答案:()解析:int fun(int lim,int aaNAX) int i,j,k=0; for(i=2;i=lim;i+)/*求出小于或等于 lim 的全部素数*/ for(j=2;ji;j+) if(i%j=0)break; if(j=i) aak+=i;/*将求出的素数放入数组 aa 中*/ return k;/*返回所求出的素数的个数*/ 解析 本程序如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根。使用 for 循环语句查找小于lim 的所有数,使用内嵌的循环判断语句判断该数是否为素数。在做这道题时,需要重点掌握素数的判定方法: for(j=2;jsqrt(i);j+) if(i%j=0)break; .