二级真题.docx
- 文档编号:29367063
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:149
- 大小:75.48KB
二级真题.docx
《二级真题.docx》由会员分享,可在线阅读,更多相关《二级真题.docx(149页珍藏版)》请在冰豆网上搜索。
二级真题
函数fun的功能是:
计算正整数n的所有因子(1和n除外)之和作为
函数值返回。
例如:
n=120时,函数值为239。
#include
#include
intfun(intn)
{int_1__,s=0;
/*能整除n的自然数即称为因子*/
for(i=2;i if(n%i==0)s=___2__; return(s); } main()/*主函数*/ {printf("%d\n",fun(120)); } (2011年2月) 解析: 本题的考核点是计算n所有因子的算法。 解题思路: 判断因子的方法是: 能被n整除的数。 由于题意中指明需将1和n 除外,所以循环的范围应从2至n-1。 答案: 1: i2: s+i 答案: 【1】i【2】s+i 【真题2】已知一个数列的前三项分别为0,0,1,以后的各项都是其相邻的前三 项之和。 给定程序modi.c中函数fun的功能是: 计算并输出该数列前n项的平方 根之和sum。 n的值通过形参传入。 例如,当n=10时,程序的输出结果应为: 23.197745。 请改正函数fun中的错误,使程序能输出正确的结果。 注意: 不要 改动main函数, #include #include #include /************found************/ fun(intn) {doublesum,s0,s1,s2,s;intk; sum=1.0; if(n<=2)sum=0.0; s0=0.0;s1=0.0;s2=1.0; for(k=4;k<=n;k++) {s=s0+s1+s2; sum+=sqrt(s); s0=s1;s1=s2;s2=s; } /************found************/ returnsum } main() {intn; clrscr(); printf("InputN="); scanf("%d",&n); printf("%f\n",fun(n)); } (2011年2月) 解析: 本题的考核点是C语言中的函数的入口参数和类型转换。 C语言规定,凡不加类型说明的函数,一律自动按整型处理。 如果函数有返回 值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类 型。 根据题意,函数返回值为实型,所以第一处错误"fun(intn)"应改为"float fun(intn)"或具有相同作用的句子。 函数的返回值是通过函数中的return语句获得的。 return语句后面的括弧可以 不要,但分号不能少,必须加分号。 所以,第二处错误应改为"returnsum;"或 相同作用的句子。 如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。 对 数值型数据,可以自动进行类型转换。 即函数类型决定返回值的类型。 本评析仅作参考。 【真题3】请编写函数fun(),它的功能是求Fibonacci数列中小于t的最大的一个 数,结果由函数返回。 其中Fibonacci数列F(n)的定义为F(0)=0,F (1)=1, F(n)=F(n-1)+F(n-2)例如: t=1000时,函数值为987。 注意: 部分源程序给 出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号 中填入所编写的若干语句。 试题程序: #include #include #include intfun(intt) {……} main() {intn; clrscr(); n=1000; printf("n=%d,f=%d\n",n,fun(n));} (2011年2月) 解析: intfun(intt) {inta=1,b=1,c=0,i;/*a代表第n-2项,b代表第n-1项,c代表 第n项*/ /*如果求得的数c比指定比较的数小,则 计算下一个Fibonacci数,对a,b重新置数*/ do{ c=a+b; a=b; b=c; } while(c 循环*/ c=a;/*此时数c的前一个Fibonacci数为小于指 定比较的数的最大的数*/ returnc;} 下一篇: 没有了 上一篇: 计算机二级C语言上机真题 【真题1】下列给定程序中,函数fun()的功能是: 通过某种方式实现两个变量值的 交换,规定不允许增加语句和表达式。 例如变量a初值为8,b初值为3,程序运行 后a中的值为3,b中的值为8。 试题程序: #include #include intfun(int*x,inty) {__1___t; t=*x;*x=y; return(t)__2__ } main() {inta=3,b=8; printf("%d%d\n",a,b); b=fun(__3__,b); printf("%d%d\n",a,b); } (2011年2月) 解析: 填空1: 根据题目的意思,这里应该是声名一个新的变量t,由后面的赋 值语句以及返回语句可以明白这个变量应该是整型的(因为函数的返回值类型 是int)。 填空2: 根据题目的意思,此处是子函数的返回语句,由C语言的知识,每个 语句的结尾都应该使用";"。 填空3: fun()函数的调用方式说明fun()函数的参数应当为指针类型,即应该 把变量的地址作为参数传递(符号"&"是取地址操作)。 答案: 【1】int【2】;【3】&a 【真题2】给定程序modi.c中函数fun的功能是: 求两个形参的乘积和商数,并 通过形参返回调用程序。 例如输入: 61.82和12.65,输出为: c= 782.023000d=4.886957。 请改正fun函数中的错误,使它能得出正确的结 果。 注意: 不要改动main函数, #include #include /**********found**********/ voidfun(doublea,b,doublex,y) {/**********found**********/ x=a*b;y=a/b; } main() {doublea,b,c,d; clrscr(); printf("Entera,b: "); scanf("%lf%lf",&a,&b); fun(a,b,&c,&d); printf("c=%fd=%f\n",c,d); } (2011年2月) 解析: 本题的考核点是C语言中函数的入口参数和指针的使用。 函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组成,与普 通的变量说明不同,函数参数必须同时具有变量类型和变量名,因此应该把程 序中"voidfun(doublea,b,doublex,y)"语句改为"voidfun(doublea, doubleb,double*x,double*y)"或相同作用的语句。 从主函数里的"fun(a,b,&c,&d);"语句可以看出,fun函数后两个参数 应为长浮点型数据的指针,因此应该把程序中"x=a*b;y=a/b;"语句改 为"*x=a*b;*y=a/b;"或相同作用的语句。 【真题3】请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留 2位小数,并对第三位进行四舍五入(规定h中的值为正数)。 例如: h值为 8.32433,则函数返回8.32;h值为8.32533,则函数返回8.33。 注意: 部分 源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在 函数fun的花括号中填入你编写的若干语句。 #include #include floatfun(floath) {……} main() {floata; clrscr(); printf("Entera: ");scanf("%f",&a); printf("Theoriginaldatais: "); printf("%f\n\n",a); printf("Theresult: %f\n",fun(a));} 解析: 本题的考核点是类型转换与小数四舍五入的算法。 提示思路: 先将原数 值加上要保留位上的位权值的一半,再除以要保留位上的位权值,通过类型的 转换将要舍去部分去掉,最后再通过类型转换将其转换为最终结果。 floatfun(floath) {longnum; h=h+0.005; h=h*100; num=h;/*对h求整*/ h=num; h=h/100; returnh;} 下一篇: 计算机二级C语言上机真题(100)【附详解】 【真题1】已知一个数列从0项开始的前3项: 0,0,1,以后的各项都是其相邻 的前3项之和。 下列给定的程序中,函数fun()的功能是: 计算并输出该数列前n项 的平方根之和sum。 n的值通过形参传入。 例如,当n=10时,程序的输出结果应 为23.197745。 试题程序: #include #include #include<__1__> doublefun(intn) {doublesum,s0,s1,s2,s;intk; sum=1.0; if(n<=2)sum=0.0; s0=0.0;s1=0.0;s2=1.0; for(k=4;k<=n;k++) {s=s0+s1+s2; sum+=sqrt(s); s0=s1;s1=s2;__2__; } return__3__; } main() {intn; printf("InputN="); scanf("%d",&n); printf("%f\n",fun(n)); } (2011年2月) 解析: 填空1: 从C语言的学习中我们知道,下面的运算使用了数学函数 sqrt,所以在前面的头文件中应该包含数学函数头文件math.h。 填空2: 根据题目的意思,此处是更新数列中将要进行计算的三项,其中前两项 就是前一步计算中的后面两项,第三项应该是刚才计算产生的,即变量s。 填空3: 由算法可以看出,这里应该是把子函数的计算结果返回给主函数,需要 返回的就是每次进行累加的变量sum。 答案: 【1】math.h【2】s2=s【3】sum 【真题2】给定程序modi.c中,函数fun的功能是: 把主函数中输入的3个数, 最大的放在a中,最小的放在c中。 例如,输入的数为: 551234,输出结果应 当是: a=55.0,b=34.0,c=12.0。 请改正程序中的错误,使它能得出正确结果。 注意: 不要改动main函数, #include voidfun(float*p,float*q,float*s) {/************found************/ float*k; if(*p<*q) {k=*p;*p=*q;*q=k;} /************found************/ if(*s<*p) {k=*s;*s=*p;*p=k;} if(*q<*s) {k=*q;*q=*s;*s=k;} } main() {floata,b,c; printf("Inputabc: ");scanf("%f%f%f",&a,&b,&c); printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c); fun(&a,&b,&c); printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c); } (2011年2月) 解析: 本题着重考察考生对C语言中一些简单算法的掌握情况。 本题中的第一个错误: 由程序可知,变量k应为一个简单变量,它是用来交换 两个数的值,所以程序中语句"float*k;"应改为"floatk;" 本题中的第二个错误: 程序中应使得*p中的数最大,*s中的数最小,当*s中 的数大于*p的值时,应交换二者的值,所以程序中语句"if(*s<*p)"应改为 "if(*s>*p)"或相同作用的语句。 【真题3】请编写函数fun,其功能是: 计算并输出 S=1+(1+2^0.5)+(1+2^0.5+3^0.5)+……+(1+2^0.5+3^0.5+……+n^0.5) 例如,在主函数中从键盘给n输入20后,输出为: s=534.188884。 注意: 要求 n的值大于1但不大于100。 部分源程序在文件prog.c中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include doublefun(intn) {……} main() {intn;doubles; printf("\n\nInputn: ");scanf("%d",&n); s=fun(n); printf("\n\ns=%f\n\n",s); } (2011年2月) 解析: 本题的考核点是c语言中的基本算法和sqrt()函数的使用。 解题思路: 本题要求计算并输出多项式的值,通式为: 1+2^0.5+3^0.5+……+n^0.5, 在给出的参考程序中,由于函数的返回值为双精度型,所以定义变量fac、sum 为双精度型,再使用sqrt()函数求出每一个多项式的值,最后通过sum+=fac; 计算出所有多项式之和,最终返回。 #include #include doublefun(intn) {inti;/*定义一个整形变量*/ doublefac=1.0;/*定义变量fac、sum为双精度型*/ doublesum=1.0; if(n>1&&n<=100) for(i=2;i<=n;i++) {fac+=sqrt(i);/*使用sqrt()函数求出每一个多项式的值*/ sum+=fac;/*通过sum+=fac;计算出所有多项式之和*/ } returnsum;} ∙下一篇: 计算机二级C语言上机真题(99)【附详解】 真题1】给定程序中,函数fun()的功能是: 求输入的两个数中较小的数。 例 如: 输入510,结果为minis5。 请改正fun()程序中的错误,使它能得出正确的 结果。 试题程序: #include #include intfun(intx,___1___) {intz; z=x y; return(z); } main() {inta,b,c; scanf("%d,%d\n",__3___); c=fun(a,b); printf("minis%d",c); } (2011年2月) 解析: 填空1: 根据题目的意思,这里应该是子函数的参数声明部分,C语言 中规定,在函数的形参中不允许出现intx,y之类的语句,必须指定每一个参 数的类型,所以不能直接写y。 填空2: 根据题目的意思,此处是使用三目运算符"? "比较两个数的大小,使用 规则是如果运算符前面的表达式中哪个变量成立,则整个式子就取运算符后面 的哪个变量。 填空3: 由算法可以看出,此处是输入变量a和b的值,因为使用了scanf函 数,所以应该使用符号"&",注意两个变量之间的","不能省略。 答案: 【1】inty【2】? 【3】&a,&b 【真题2】下列给定程序中函数fun()的功能是计算1/n! 的值。 例如: 给n输入 5,则输出0.008333。 请改正程序中的错误,使它能得到正确结果。 注意: 不要 改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include /**********************found***********************/ intfun(intn) {doubleresult=1.0; if(n==0) return1.0; while(n>1&&n<170) /**********************found***********************/ result*=n++; result=1/result; returnresult; } main() { intn; printf("InputN: "); scanf("%d",&n); printf("\n1/%d! =%lf\n",n,fun(n)); } (2011年2月) 解析: (1)错误: intfun(intn)正确: doublefun(intn) (2)错误: result*=n++;正确: result*=n--; 错误1: 函数的返回值为实型数据,所以函数的返回类型应为double。 错误2: 根据阶乘的概念,从n开始,每递减1的数相乘,直到1,因此此处n 递减,而不是递增。 【真题3】请编写一个函数intfun(intx),它的功能是: 判断整数x是否是同构 数。 若是同构数,函数返回1;否则返回0。 所谓“同构数”是指这样的数,它出现在 它的平方数的右边。 例如: 输入整数5,5的平方数是25,5是25中右侧的数, 所以5是同构数。 x的值由主函数从键盘读入,要求不大于100。 注意: 部分源程 序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include intfun(intx) {……} main() {intx,y; clrscr(); printf("\nPleaseenterainteger numbers: ");scanf("%d",&x); if(x>100){printf("dataerror! \n");exit(0);} y=fun(x); if(y)printf("%dYES\n",x); elseprintf("%dNO! \n",x); } (2011年2月) 解析: 本题的考核点是C语言中的数字运算。 根据同构数的定义,小于10的 同构数的平方减同构数本身与10取模结果一定为0,同样位于10和100之间 的同构数的平方减同构数本身与100取模结果也一定为0。 我们只需将取模的 结果取反,就可以在是同构数时返回1,在非同构数时返回0。 intfun(intx) {if(x<10) return! ((x*x-x)%10);/*假如x的平方减去x除10 的余数为0时,则函数返回1*/ else return! ((x*x-x)%100);} 【真题1】下列给定程序中,函数fun()的功能是: 通过某种方式实现两个变量值的 交换,规定不允许增加语句和表达式。 例如变量a初值为8,b初值为3,程序运行 后a中的值为3,b中的值为8。 试题程序: #include #include intfun(int*x,inty) {__1___t; t=*x;*x=y; return(t)__2__ } main() {inta=3,b=8; printf("%d%d\n",a,b); b=fun(__3__,b); printf("%d%d\n",a,b); } (2011年2月) 解析: 填空1: 根据题目的意思,这里应该是声名一个新的变量t,由后面的赋 值语句以及返回语句可以明白这个变量应该是整型的(因为函数的返回值类型 是int)。 填空2: 根据题目的意思,此处是子函数的返回语句,由C语言的知识,每个 语句的结尾都应该使用";"。 填空3: fun()函数的调用方式说明fun()函数的参数应当为指针类型,即应该 把变量的地址作为参数传递(符号"&"是取地址操作)。 答案: 【1】int【2】;【3】&a 【真题2】给定程序modi.c中函数fun的功能是: 求两个形参的乘积和商数,并 通过形参返回调用程序。 例如输入: 61.82和12.65,输出为: c= 782.023000d=4.886957。 请改正fun函数中的错误,使它能得出正确的结 果。 注意: 不要改动main函数, #include #include /*
本文来自【C语言中文网】:
本文来自【C语言中文网】:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级