机试练习43140套含答案Word文档格式.docx
《机试练习43140套含答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《机试练习43140套含答案Word文档格式.docx(27页珍藏版)》请在冰点文库上搜索。
例如a=3,n=6,则以上表达式为:
s=333333-33333-3333-333-33-3
其值是296298。
a和n是函数fun的形参,表达式的值作为函数值传回main函数。
请改正程序中的错误,使它能计算出正确的结果。
不要改动main函数,不得增行或删行,也不得更改程序的结构。
longfun(inta,intn)
intj;
/*************found**************/
longs=0,t=1;
for(j=0;
j<
j++)
t=t*10+a;
s=t;
for(j=1;
n;
/*************found**************/
t=t%10;
s=s-t;
}
return(s);
main()
inta,n;
printf("
\nPleaseenteraandn:
scanf("
%d%d"
&
a,&
n);
\nThevalueoffunctionis%ld\n"
fun(a,n));
(1)错误:
longs=0,t=1;
正确:
longs=0,t=0;
(2)错误:
for(j=0;
j++)
正确:
(3)错误:
t=t%10;
t=t/10;
第三十二套
请补允函数fun,该函数的功能是:
计算并输出下列多项式的值。
例如,若主函数从键盘给n输入50后,则输出为S=1.960784。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填若干表达式或语句。
【1】fun(intn)
inti,j;
doublesum=0.0,t;
for(i=1;
i<
i++)
t=0.0;
for(j=1;
=i;
t+=【2】;
sum+=【3】;
returnsum;
intn;
doubles;
\nInputn:
s=fun(n);
\n\ns=%f\n\n"
s);
(1)double
(2)j(3)1.0/t或(double)1/t
根据整型形参m,计算如下公式的值。
例如,若m的值为5,则应输出:
1.463611。
请改正程序中的错误,使它能得出正确的结果。
doublefun(intm)
{doubley=1.0;
inti;
for(i=2;
m;
y+=1/(i*i);
return(y);
{intn=5;
system("
\nTheresultis%1f\n"
fun(n));
for(i=2;
i++)
for(i=2;
=m;
y+=1/(i*i);
y+=1.0/(i*i);
第三十三套
程序的功能是计算。
请勿改动main函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。
longfun(intn)
intI;
longs;
s=【1】;
for(I=1;
s=【2】;
returns;
intk,n;
s=【3】;
for(k=0;
k<
k++)
s=【4】;
%ld\n"
(1)1
(2)s*i或i*s(3)0(4)s+fun(k)
数列中,第一项为3,后一项都比前一项的值增5。
下列给定程序中,函数fun的功能是:
计算前项的累计和。
在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数里。
如当n的值为20时,该数列为3,8,13,18,23,28,…,93,98。
符合此条件的累加值应为42,126,366,570,1010。
#defineN20
intfun(intn,int*a)
/*************found**************/
{intI,j,k,sum;
sum=0;
for(k=3,I=0;
I++,k+=5)
{sum=sum+k;
if(sum%4=2)
a[j++]=sum;
returnj;
{inta[N],d,n,i;
\nEntern(4<
=n<
=50):
d=fun(n,a);
\n\nTheresult:
\n"
for(i=0;
d;
i++)printf("
%6d"
a[i]);
\n\n"
inti,j,k,sum;
inti,j=0,k,sum;
if(sum%4=2)正确:
if(sum%4==2)
returnj;
returnj++;
第三十四套
求1+2!
+3!
+…+N!
的和。
例如,1+2!
+…+5!
+6!
的和为873。
intI,n;
longs=0,t=1;
\n"
{
t=【2】;
s=【3】;
}
1!
+2!
...+%d!
n,s);
【参考答案】
(1)&
n
(2)t*i(3)s+t
求S的值。
设
S=(22/(1*3))*(42/(3*5))*(62/(5*7))*…*(2k)2/((2k-1)*(2k+1))
例如,当k为10时,函数的值应为1.533852。
math.h>
fun(intk)
{intn;
floats,w,p,q;
n=1;
s=1.0;
while(n<
=k)
{w=2.0*n;
p=w-1.0;
q=w+1.0;
s=s*w*w/p/q;
n++;
returns
{system("
%f\n"
fun(10));
fun(intk)正确:
doublefun(intk)
returns正确:
returns;
第三十五套
给定程序的功能是:
计算并输出下列级数的前N项之和SN,直到SN大于q为止,q的值通过形参传入。
例如,若q的值为50.0,则函数值为50.416687。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
doublefun(doubleq)
{
doubles,t;
n=2;
s=2.0;
while(s【1】q)
s=s+(double)(n+1)/n;
【2】;
n=%d\n"
n);
【3】;
fun(50));
(1)<
=
(2)n++或n+=1或n=n+1
(3)returns或return(s)
给定n个实数,输出平均值,并统计平均值以上(含平均值)的实数个数。
例如,n=8时,输入193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763,所得平均值为195.838745,在平均值以上的实数个数应为5。
intfun(floatx[],intn)
intj,c=0;
floatxa=0.0;
for(j=0;
j<
j++)
xa+=x[j]/n;
ave=%f\n"
xa);
if(x[j]>
=xa)
c++;
returnc;
{floatx[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763};
%d\n"
fun(x,8));
缺{正确:
加{
第三十六套
请在函数fun的横线上填写若干表达式,使从键盘上输入一个整数n,输出n对应的斐波拉契数列。
斐波拉契数列是一整数数列,该数列自第三项开始,每数等于前面两数之和,即0,1,1,2,3,5,8,13,21,34,55,…
intfun(intn);
inti,n=0;
for(i=0;
printf("
%d"
fun(i));
intfun(intn)
if(【1】)
return0;
else
if(【2】)
return1;
else
return【3】;
(1)n==0
(2)n==1(3)fun(n-1)+fun(n-2)
根据整型形参n,计算如下公式的值。
A1=1,A2=1/(1+A1),A3=1/(1+A2),…,An=1/(1+A(n-1))
例如,若n=10,则应输出0.617977。
{floatA=1;
intI;
for(I=2;
A=1.0/(1+A);
returnA;
\nPleaseentern:
A%d=%lf\n"
n,fun(n));
intfun(intn)
floatfun(intn)
第三十七套
请补充函数fun,该函数的功能是:
把从键盘输入的3个整数按从小到大输出。
例如,输入"
337825"
结果输出"
253378"
intx,y,z,t;
Inputx,y,z\n"
%d%d%d"
x,&
y,&
z);
t=x;
x=y;
y=t;
}/*交换x,y的值*/
if(【2】)
t=z;
z=x;
x=t;
}/*交换x,z的值*/
if(【3】)
t=y;
y=z;
z=t;
}/*交换z,y的值*/
******theresult*******\n"
fromsmalltobig:
%d%d%d\n"
x,y,z);
(1)x>
y
(2)x>
z(3)y>
z
找出100到n(不大于1000)之间三个位上的数字都相等的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。
请改正函数fun中的错误,使它能得出正确的结果。
#defineN100
intfun(int*s,intn)
intI,j,k,a,b,c;
j=0;
for(I=100;
I<
I++)
k=n;
a=k%10;
k/=10;
b=k/10;
c=k/10;
if(a==b&
&
a==c)
s[j++]=I;
inta[N],n,num=0,i;
do
\nEntern(<
=1000):
"
}
while(n>
1000);
num=fun(a,n);
i<
num;
i++)
%5d"
\n\n"
k=n正确:
k=i;
b=k/10;
b=k%10;
第三十八套
计算三名学生学科的平均成绩。
例如,当score[N][M]={{83.5,82,86,65,67},{80,91.5,84,99,95},{90,95,86,95,97}}时,五门学科的平均分为:
84.5,89.5,85.3,86.3,86.3。
#defineN3
#defineM5
intmain()
intI,j;
staticfloatscore[N][M]={{83.5,82,86,65,67},{80,91.5,84,99,95},{90,95,86,95,97}};
staticfloatbb[N];
for(I=0;
M;
bb[I]=0.0;
【1】;
for(j=0;
【2】;
bb[j]+=score[I][j];
\nsubject%d\taverage=%5.1f"
I+1,【3】);
return0;
(1)N
(2)M(3)bb[i]/N
求k!
(k<
13),所求阶乘的值作为函数值返回。
例如,若k=10,则应输出3628800。
longfun(intk)
ifk>
1
return(k*fun(k-1));
return1;
{intk=10;
=%ld\n"
k,fun(k));
错误:
ifk>
1正确:
if(k>
1)
第三十九套
判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回"
yes!
否则返回"
no!
char*fun(intn)
intg,s,b;
g=n%10;
s=n/10%10;
b=【1】;
if((g+b)==s)
return【2】;
return【3】;
intnum=0;
******Inputdata*******\n"
num);
\n\n\n"
******Theresult*******\n"
\n\n\n%s"
fun(num));