1、二级 C 语言-238 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 main()函数。该函数的功能是:求 1200 中(不包括 200)所有素数的平均值。 程序运行后的结果为 91.89。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在 main()函数的横线上填入所编写的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h void main() int i,j,n=0,flag; float aver=0; system(“CLS“): for
2、(j=2;j%200;j+) flag=1; for(i=2;ij;i+) if( 1) flag=0; break; if( 2) n+; aver+=j; printf(“/n/n average=%4.2f/n“, 3); (分数:30.00)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 proc()的功能是:对 M 名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得
3、更改程序的结构。 试题程序: #includestdlib.h #includeconio.h #includestring.h #includestdio.h #includemalloc.h #define M 10 typedef struct ss char num10; int s; STU; STU*proc(STU a,int m) STU bM,*t; int i,j,k; /*found* *t=calloc(m,sizeof(STU); for(i=0;iM;i+)bi=ai; for(k=0;km;k+) for(i=j=0;iM;i+) if(bi.sbj.s)j=i;
4、 /*found* tknum=bj.num; tk.s=bj.s; bj.s=0; return t; void outresult(STU a,FILE*pf) int i; for(i=0;iM;i+) fprintf(pf,“No=%sMark=%d/n“, ai.num,aj.s); fprintf(pf,“/n/n“); void main() STU stuM=“A01“,81,“A02“,89, “A03“,66,“A04“,87,“A05“,77, “A06“,90,“A07“,79,“A08“,61, “A09“,80,“A10“,71; STU*pOrder; int i
5、,m; system(“CLS“); printf(“*THE RESULT*/n“); outresult(stu,stdout); printf(“/nGive the number of the students who have better score:“); scanf(“%d“, while(m10) printf(“/nGive the number of the students who have better score:“); scanf(“%d“, pOrder=proc(stu,m); ptintf(“*THE RESULT*/n“); printf(“The top
6、:/n“); for(i=0;im;i+) printf(“%s%d/n“,pOrderi.num, pOrderi.s); free(pOrder); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.请编写函数 proc(),它的功能是计算: s=(1-ln(1)-ln(2)-ln(3)-ln(m)2 s 作为函数值返回。 在 C 语言中可调用 log(n)函数求 ln(n)。log 函数的引用说明是 double log(double x)。 例如,若 m 的值为 10,则 proc()函数值为 198.934454。 注意:部分源程序给出如下。 请勿改动 main(
7、)函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includemath.h double proc(int m) void main() system(“CLS“); printf(“%f/n“,proc(10); (分数:40.00)_二级 C 语言-238 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充 main()函数。该函数的功能是:求 1200 中(不包括 200)所有素数的
8、平均值。 程序运行后的结果为 91.89。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在 main()函数的横线上填入所编写的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h void main() int i,j,n=0,flag; float aver=0; system(“CLS“): for(j=2;j%200;j+) flag=1; for(i=2;ij;i+) if( 1) flag=0; break; if( 2) n+; aver+=j; printf(“/n/n average=%4.2f/
9、n“, 3); (分数:30.00)解析:j%i=0 flag=1 aver/n解析 从 if 后的语句可知,这是判断是否是素数的条件,因此,第以处填“j%i=0”;变量 flag 为指示是否为素数的标志,flag=1 为素数,flag=0 不是素数,因此,第二处填“flag=1”;变量 aver 存放的是所有素数的和,程序要求输出所有素数的平均数,因此,第三处填“aver/n”。二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 proc()的功能是:对 M 名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,
10、此存储区的首地址作为函数值返回。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdlib.h #includeconio.h #includestring.h #includestdio.h #includemalloc.h #define M 10 typedef struct ss char num10; int s; STU; STU*proc(STU a,int m) STU bM,*t; int i,j,k; /*found* *t=calloc(m,sizeof(STU); fo
11、r(i=0;iM;i+)bi=ai; for(k=0;km;k+) for(i=j=0;iM;i+) if(bi.sbj.s)j=i; /*found* tknum=bj.num; tk.s=bj.s; bj.s=0; return t; void outresult(STU a,FILE*pf) int i; for(i=0;iM;i+) fprintf(pf,“No=%sMark=%d/n“, ai.num,aj.s); fprintf(pf,“/n/n“); void main() STU stuM=“A01“,81,“A02“,89, “A03“,66,“A04“,87,“A05“,7
12、7, “A06“,90,“A07“,79,“A08“,61, “A09“,80,“A10“,71; STU*pOrder; int i,m; system(“CLS“); printf(“*THE RESULT*/n“); outresult(stu,stdout); printf(“/nGive the number of the students who have better score:“); scanf(“%d“, while(m10) printf(“/nGive the number of the students who have better score:“); scanf(
13、“%d“, pOrder=proc(stu,m); ptintf(“*THE RESULT*/n“); printf(“The top:/n“); for(i=0;im;i+) printf(“%s%d/n“,pOrderi.num, pOrderi.s); free(pOrder); (分数:30.00)解析:错误:*t=calloc(m,sizeof(STU); 正确:t=(struct ss*)ealloc(m,sizeof(STU); 错误:tk.num=bj.num; 正确:tk=bj; 解析 因为 t 是指向一个动态存储空间,因此其是指针,而不是其中的内容,故把“*t=calloc
14、(m,sizeof(STU)”改为“t=(struct ss*)calloc(m,sizeof(STU);”,而题目要求把学生的全部内容互换,因此即整个结构体,故把“tk.num=bj.num;”改为“tk=bj;”。三、程序设计题(总题数:1,分数:40.00)3.请编写函数 proc(),它的功能是计算: s=(1-ln(1)-ln(2)-ln(3)-ln(m)2 s 作为函数值返回。 在 C 语言中可调用 log(n)函数求 ln(n)。log 函数的引用说明是 double log(double x)。 例如,若 m 的值为 10,则 proc()函数值为 198.934454。 注意
15、:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includestdlib.h #includeconio.h #includestdio.h #includemath.h double proc(int m) void main() system(“CLS“); printf(“%f/n“,proc(10); (分数:40.00)_正确答案:()解析:double proc(int m) int i; double s=1.0;/s 的初值赋为 1 for(j=1;i=m;i+)/从 1 到 m s=s-log(i); /将其求得的差放到 s 中 return(s*s); /最后把其平方值返回到主函数中 解析 首先我们应定义一个变量来表示其和,另一个来表示其项数,然后通过循环,求得其差值,最后把和的平方返回到主函数中。