二级c上机试题Word下载.docx
- 文档编号:21656816
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:37
- 大小:34.36KB
二级c上机试题Word下载.docx
《二级c上机试题Word下载.docx》由会员分享,可在线阅读,更多相关《二级c上机试题Word下载.docx(37页珍藏版)》请在冰豆网上搜索。
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;
returnsum
main()
{intn;
clrscr();
printf("
InputN="
);
scanf("
%d"
&
n);
%f\n"
fun(n));
本题的考核点是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的花括号
中填入所编写的若干语句。
试题程序:
intfun(intt)
{……}
main()
{intn;
clrscr();
n=1000;
n=%d,f=%d\n"
n,fun(n));
}
{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<
t);
/*如果求得的数c比指定比较的数大时,退出
循环*/
c=a;
/*此时数c的前一个Fibonacci数为小于指
定比较的数的最大的数*/
returnc;
}
99
【真题1】下列给定程序中,函数fun()的功能是:
通过某种方式实现两个变量值的
交换,规定不允许增加语句和表达式。
例如变量a初值为8,b初值为3,程序运行
后a中的值为3,b中的值为8。
intfun(int*x,inty)
{__1___t;
t=*x;
*x=y;
return(t)__2__
{inta=3,b=8;
%d%d\n"
a,b);
b=fun(__3__,b);
填空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函数,
/**********found**********/
voidfun(doublea,b,doublex,y)
{/**********found**********/
x=a*b;
y=a/b;
{doublea,b,c,d;
printf("
Entera,b:
"
scanf("
%lf%lf"
a,&
b);
fun(a,b,&
c,&
d);
printf("
c=%fd=%f\n"
c,d);
本题的考核点是C语言中函数的入口参数和指针的使用。
函数的参数表是由逗号分隔的变量表,变量表由变量类型和变量名组成,与普
通的变量说明不同,函数参数必须同时具有变量类型和变量名,因此应该把程
序中"
voidfun(doublea,b,doublex,y)"
语句改为"
voidfun(doublea,
doubleb,double*x,double*y)"
或相同作用的语句。
从主函数里的"
fun(a,b,&
语句可以看出,fun函数后两个参数
应为长浮点型数据的指针,因此应该把程序中"
语句改
为"
*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的花括号中填入你编写的若干语句。
floatfun(floath)
{……}
{floata;
Entera:
%f"
&
a);
Theoriginaldatais:
%f\n\n"
a);
Theresult:
%f\n"
fun(a));
本题的考核点是类型转换与小数四舍五入的算法。
提示思路:
先将原数
值加上要保留位上的位权值的一半,再除以要保留位上的位权值,通过类型的
转换将要舍去部分去掉,最后再通过类型转换将其转换为最终结果。
floatfun(floath)
{longnum;
h=h+0.005;
h=h*100;
num=h;
/*对h求整*/
h=num;
h=h/100;
returnh;
}
98
【真题1】已知一个数列从0项开始的前3项:
0,0,1,以后的各项都是其相邻
的前3项之和。
下列给定的程序中,函数fun()的功能是:
计算并输出该数列前n项
的平方根之和sum。
例如,当n=10时,程序的输出结果应
为23.197745。
__1__>
doublefun(intn)
{doublesum,s0,s1,s2,s;
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__;
fun(n));
从C语言的学习中我们知道,下面的运算使用了数学函数
sqrt,所以在前面的头文件中应该包含数学函数头文件math.h。
根据题目的意思,此处是更新数列中将要进行计算的三项,其中前两项
就是前一步计算中的后面两项,第三项应该是刚才计算产生的,即变量s。
由算法可以看出,这里应该是把子函数的计算结果返回给主函数,需要
返回的就是每次进行累加的变量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函数,
voidfun(float*p,float*q,float*s)
{/************found************/
float*k;
if(*p<
*q)
{k=*p;
*p=*q;
*q=k;
if(*s<
*p)
{k=*s;
*s=*p;
*p=k;
if(*q<
*s)
{k=*q;
*q=*s;
*s=k;
{floata,b,c;
Inputabc:
scanf("
%f%f%f"
a,&
b,&
c);
a=%4.1f,b=%4.1f,c=%4.1f\n\n"
a,b,c);
fun(&
本题着重考察考生对C语言中一些简单算法的掌握情况。
本题中的第一个错误:
由程序可知,变量k应为一个简单变量,它是用来交换
两个数的值,所以程序中语句"
floatk;
本题中的第二个错误:
程序中应使得*p中的数最大,*s中的数最小,当*s中
的数大于*p的值时,应交换二者的值,所以程序中语句"
*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的花括号中填入你编写的若干语句。
doubles;
\n\nInputn:
s=fun(n);
\n\ns=%f\n\n"
s);
本题的考核点是c语言中的基本算法和sqrt()函数的使用。
解题思路:
本题要求计算并输出多项式的值,通式为:
1+2^0.5+3^0.5+……+n^0.5,
在给出的参考程序中,由于函数的返回值为双精度型,所以定义变量fac、sum
为双精度型,再使用sqrt()函数求出每一个多项式的值,最后通过sum+=fac;
计算出所有多项式之和,最终返回。
{inti;
/*定义一个整形变量*/
doublefac=1.0;
/*定义变量fac、sum为双精度型*/
doublesum=1.0;
if(n>
1&
n<
=100)
for(i=2;
{fac+=sqrt(i);
/*使用sqrt()函数求出每一个多项式的值*/
sum+=fac;
/*通过sum+=fac;
计算出所有多项式之和*/
97
【真题1】给定程序中,函数fun()的功能是:
求输入的两个数中较小的数。
例
如:
输入510,结果为minis5。
请改正fun()程序中的错误,使它能得出正确的
结果。
#include<
intfun(intx,___1___)
{intz;
z=x<
y__2__x:
y;
return(z);
{inta,b,c;
%d,%d\n"
__3___);
c=fun(a,b);
minis%d"
c);
根据题目的意思,这里应该是子函数的参数声明部分,C语言
中规定,在函数的形参中不允许出现intx,y之类的语句,必须指定每一个参
数的类型,所以不能直接写y。
根据题目的意思,此处是使用三目运算符"
?
比较两个数的大小,使用
规则是如果运算符前面的表达式中哪个变量成立,则整个式子就取运算符后面
的哪个变量。
由算法可以看出,此处是输入变量a和b的值,因为使用了scanf函
数,所以应该使用符号"
,注意两个变量之间的"
"
不能省略。
【1】inty【2】?
b
【真题2】下列给定程序中函数fun()的功能是计算1/n!
的值。
给n输入
5,则输出0.008333。
请改正程序中的错误,使它能得到正确结果。
改动main函数,不得增行或删行,也不得更改程序的结构。
/**********************found***********************/
{doubleresult=1.0;
if(n==0)
return1.0;
while(n>
1&
n<
170)
result*=n++;
result=1/result;
returnresult;
{
intn;
InputN:
\n1/%d!
=%lf\n"
n,fun(n));
(1)错误:
intfun(intn)正确:
(2)错误:
正确:
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的花括号中填入你编写的若干语句。
intfun(intx)
{intx,y;
\nPleaseenterainteger
numbers:
x);
if(x>
100){printf("
dataerror!
\n"
exit(0);
y=fun(x);
if(y)printf("
%dYES\n"
x);
elseprintf("
%dNO!
本题的考核点是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
((x*x-x)%100);
或相同
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 上机 试题