1、全国计算机二级 C 语言上机试题 34+2015 年及答案解析(总分:30.00,做题时间:90 分钟)1.用筛选法可得到 2n(n (分数:10.00)_2.给定程序 MODI1.C 中函数 fun 的功能是: 为一个偶数寻找两个素数, 这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。 请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include void fun(int a,int *b,int *c) int i,j,d,y; for(i=3;
2、i=a/2;i=i+2) /*found*/ Y=1; for(j=2;j=sqrt(double)i);j+) if(i%j=0) y=0; if(y=1) /*found*/ d=a-i; for(j=2;j=sqrt(double)d);j+) if(d%j=0) y=0; if(y=1) *b=i; *c=d; main() int a,b,c; do printf(“/nInput a: “); scanf(“%d“, while(a%2); fun(a, printf(“/n/n%d = %d + %d/n“,a,b,c); (分数:10.00)_3.请编写函数 fun, 它的功能
3、是:计算并输出 n(包括 n)以内能被 5 或 9 整除的所有自然数的倒数之和。 例如,在主函数中从键盘给 n 输入 20 后, 输出为: s=0.583333。 注意: 要求 n 的值不大于 100。部分源程序在文件 PROG1.C 中。请勿改动主函数 main 和其他函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include double fun(int n) main() int n; double s; printf(“/nInput n: “); scanf(“%d“, s=fun(n); printf(“/n/ns=%f/n“,s); N
4、ONO(); (分数:10.00)_全国计算机二级 C 语言上机试题 34+2015 年答案解析(总分:30.00,做题时间:90 分钟)1.用筛选法可得到 2n(n (分数:10.00)_正确答案:(第一处:所有 2 的倍数的数从数表中删去,所以应填:ai。 第二处:找出下一个不是的ai,所以应填:ai。 第三处:输出素数,只要判断 ai不是 0 就是素数,所以应填:0。)解析:2.给定程序 MODI1.C 中函数 fun 的功能是: 为一个偶数寻找两个素数, 这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。 请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。 注
5、意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include void fun(int a,int *b,int *c) int i,j,d,y; for(i=3;i=a/2;i=i+2) /*found*/ Y=1; for(j=2;j=sqrt(double)i);j+) if(i%j=0) y=0; if(y=1) /*found*/ d=a-i; for(j=2;j=sqrt(double)d);j+) if(d%j=0) y=0; if(y=1) *b=i; *c=d; main() int a,b,c; do prin
6、tf(“/nInput a: “); scanf(“%d“, while(a%2); fun(a, printf(“/n/n%d = %d + %d/n“,a,b,c); (分数:10.00)_正确答案:(第一处:变量 y 错写成 Y。 第二处:给变量 d 进行赋值,所以应改为:d=a-i;。)解析:3.请编写函数 fun, 它的功能是:计算并输出 n(包括 n)以内能被 5 或 9 整除的所有自然数的倒数之和。 例如,在主函数中从键盘给 n 输入 20 后, 输出为: s=0.583333。 注意: 要求 n 的值不大于 100。部分源程序在文件 PROG1.C 中。请勿改动主函数 main
7、 和其他函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include double fun(int n) main() int n; double s; printf(“/nInput n: “); scanf(“%d“, s=fun(n); printf(“/n/ns=%f/n“,s); NONO(); (分数:10.00)_正确答案:(double fun(int n) int i; double sum=0.0; for(i=1; i=n; i+) if(i%5 = 0 | i%9 = 0) /* 被 5 或 9 整除 */ sum+=1.0/i; return sum; )解析: