1、二级 C 语言-359 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 main()函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找出最大的整数。当输入的整数为 0 时结束。 例如,输入 1,2,3,5,4,7,0 时,最大的数为 7。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在 main()函数的横线上填入所编写出的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h #includeconio.h #define M 100 v
2、oid main() int numM; int i=-1; int max=0; system(“CLS“); printf(“/nInput inleger number:/n“); do i+; printf(“num%d=“,i); scanf(“%d“, 1); max= 2numi:max; while( 3); printf(“max=%d/n“,max); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定的程序中,函数 proc()的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。 请修改函数 pro
3、c()中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h #includemath.h void proc(int num,int*b,int*c) int i,j,d,y; for(i=3;i=num/2;i=i+2) /*found* y=0; for(j=2;j=sqrt(double)i);j+) if(i%j=0)y=0; if(y=1) /*found* d=i-num; for(j=2;j=sqrt(double)d); j+) if(d%j=0)y=0; if(y=1) *b=i
4、;*c=d; void main() int num,b,c; do printf(“/nInput num:“); scanf(“%d“, while(num%2); proc(num, printf(“/n/n%d=%d+%d/n“,num,b,c); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.编写函数 int proc(int lim,int aaM),该函数的功能是求出小于或等于 lim 的所有素数并放在 aa数组中,该函数返回所求出的素数。 例如,若输入 12 时,则输出:2 3 5 7 11。 注意:部分源程序给出如下。 请勿改动 main()函数和其他
5、函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeiconio.h #includestdio.h #define M 100 int proc(int lim,int aaM) void main() int limit,i,sum; int arrM; system(“CLS“); printf(“输入一个整数“); scanf(“%d“, sum=proc(limit,arr); for(i=0;isum;i+) if(i%10=0 printf(“%5d“,arri); (分数:40.00)_二级 C
6、 语言-359 (1)答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 main()函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找出最大的整数。当输入的整数为 0 时结束。 例如,输入 1,2,3,5,4,7,0 时,最大的数为 7。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在 main()函数的横线上填入所编写出的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h #includeconio.h #define M 100 void m
7、ain() int numM; int i=-1; int max=0; system(“CLS“); printf(“/nInput inleger number:/n“); do i+; printf(“num%d=“,i); scanf(“%d“, 1); max= 2numi:max; while( 3); printf(“max=%d/n“,max); (分数:30.00)解析: for(i=3;i=num/2;i=i+2) /*found* y=0; for(j=2;j=sqrt(double)i);j+) if(i%j=0)y=0; if(y=1) /*found* d=i-nu
8、m; for(j=2;j=sqrt(double)d); j+) if(d%j=0)y=0; if(y=1) *b=i;*c=d; void main() int num,b,c; do printf(“/nInput num:“); scanf(“%d“, while(num%2); proc(num, printf(“/n/n%d=%d+%d/n“,num,b,c); (分数:30.00)解析:错误:y=0; 正确:y=1; 错误:d=i-num; 正确:d=num-i; 解析 由函数 proc()可知,变量 y 是判断小于 num/2 的整数中是否存在素数的标志,y=1 为找到所要的素数
9、,其初始值应该为 1,因此,“y=0;”应政为“y=1;”变量 num 为两个素数之和,变量 i 和 d 为要求的两个素数,因此,“d=i-num;”应改为“d=num-i;”。三、程序设计题(总题数:1,分数:40.00)3.编写函数 int proc(int lim,int aaM),该函数的功能是求出小于或等于 lim 的所有素数并放在 aa数组中,该函数返回所求出的素数。 例如,若输入 12 时,则输出:2 3 5 7 11。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includ
10、estdlib.h #includeiconio.h #includestdio.h #define M 100 int proc(int lim,int aaM) void main() int limit,i,sum; int arrM; system(“CLS“); printf(“输入一个整数“); scanf(“%d“, sum=proc(limit,arr); for(i=0;isum;i+) if(i%10=0 printf(“%5d“,arri); (分数:40.00)_正确答案:()解析:int proc(int lim,int aaM) int i,i,k=0; for(i=2;i=lim;i+) /小于或等于 lim 之间的数 for(j=2;j=i;j+) /判断其是否为素数 if(j%i=0)break; if(j=i) aak+=i; /如果是,则把其放到 aa 数组中 return k; /最后把数组的长度返回到主函数中 解析 首先判断小于等于整数 lim 的所有整数是否为素数,然后将一个素数放入数组 aa 中,最后将素数的个数返回给主函数。