资源描述:
《2013年计算机二级C语言上机题库及答案解析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2013年计算机二级C语言上机题库及答案解析一.填空题 用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数 表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列: 2,3,5,7,11,13,17,19,23,……函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考
2、生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include intfun(intn) {inta[10000],i,j,count=0; for(i=2;i<=n;i++)a[i]=i; i=2; while(i<=""p=""> for(j=a[i]*2;j<=n;j+=___1___) a[j]=0; i++; while(___2___==0) i++; } printf("Theprimenumberbetween2to%d",n); for(i=2;
3、i<=n;i++) if(a[i]!=___3___) {count++;printf(count%15?"%5d":"%5d",a[i]);} returncount; } main() {intn=20,r; r=fun(n); printf("Thenumberofprimeis:%d",r); } 解题思路: 第一处:所有2的倍数的数从数表中删去,所以应填:a[i]。 第二处:找出下一个不是的a[i],所以应填:a[i]。 第三处:输出素数,只要判断a[i]不是0就是素数,所以应填:0。二、 改错题
4、 给定程序MODI1.C中函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。 请改正函数fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include voidfun(inta,int*b,int*c) {inti,j,d,y; for(i=3;i<=a/2;i=i+2){ Y=1; for(j=2;j<=sqrt((double)i);j++) if(i%j==
5、0)y=0; if(y==1){ 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() {inta,b,c; do {printf("Inputa:");scanf("%d",&a);} while(a%2); fun(a,&b,&c); printf("%d=%d+%d",a,b,c); } 解题思路: 第一处:变量y错写成Y。 第二处:给变量d进行赋值,所以应改
6、为:d=a-i;。三、 编程题 请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。 例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。 注意:要求n的值不大于100。 部分源程序在文件PROG1.C中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include doublefun(intn) { } main() {intn;doubles; printf("Inputn:");scan
7、f("%d",&n); s=fun(n); printf("s=%f",s); NONO(); } 解题思路: 本题是计算n(包括n)以内能被5或9整除的所有自然数的倒数之和。 参考答案: doublefun(intn) { inti; doublesum=0.0; for(i=1;i<=n;i++) if(i%5==0
8、
9、i%9==0)/*被5或9整除*/ sum+=1.0/i; returnsum; }