递推法.docx
《递推法.docx》由会员分享,可在线阅读,更多相关《递推法.docx(22页珍藏版)》请在冰豆网上搜索。
递推法
第1题(10.0分)题号:
431
功能:
计算圆周率的近似值。
#include
#include
main()
{
ints;
/***********SPACE***********/
floatn,【?
】;
doublet;
t=1;pi=0;n=1;s=1;
/***********SPACE***********/
while(【?
】>=2e-6)
{
pi+=t;n+=2;s=-s;t=s/n;
}
/***********SPACE***********/
pi*=【?
】;
printf("pi=%.6f\n",pi);
}
答案:
1).pi
2).fabs(t)
3).4
第30题(10.0分)题号:
447
功能:
已知一个数列,它的头两项分别是0和1,从第三项开始以
后的每项都是其前两项之和。
编程打印此数,直到某项的
值超过200为止。
main()
{
inti,f1=0,f2=1;
/***********SPACE***********/
for(【?
】;;i++)
{
printf("5%d",f1);
/***********SPACE***********/
if(f1>【?
】)break;
printf("5%d",f2);
if(f2>200)break;
if(i%2==0)printf("\n");
f1+=f2;
/***********SPACE***********/
f2+=【?
】;
}
printf("\n");
}
答案:
1).i=1
2).200
3).f1
第77题(10.0分)题号:
439
功能:
1982年我国第三次人口普查,结果全国人口为10.3亿,假
如人口增长率为5%。
编写一个程序求在公元多少年总人口
翻了一番。
#include
voidmain()
{
doublep1=10.3,p2,r=0.05;
intn=1;
/***********SPACE***********/
p2=p1*【?
】;
/***********SPACE***********/
while(p2<=【?
】)
{
n++;
/***********SPACE***********/
p2=p2*【?
】;
}
/***********SPACE***********/
n=【?
】;
printf("%d年人口总数翻了一番,即为%g亿人\n",n,p2);
}
答案:
1).(1+r)或(r+1)
2).2*p1或p1*2
3).(1+r)或(r+1)
4).n+1982或1982+n
第91题(10.0分)题号:
9
功能:
以下程序的功能如(图1)。
#include
main()
{
intf;
/***********SPACE***********/
【?
】;
floatt,pi;
t=1;pi=t;f=1;n=1.0;
/***********SPACE***********/
while(【?
】)
{
n=n+2;
/***********SPACE***********/
【?
】;
t=f/n;
pi=pi+t;
}
/***********SPACE***********/
【?
】;
printf("pi=%10.6f\n",pi);
}
答案:
1).floatn或duoblen
2).fabs(t)>=1e-6或fabs(t)>=0.000001或1e-6<=fabs(t)或0.000001<=fabs(t)
3).f=-f或f=-1*f或f=f*(-1)或f=f*-1或f=(-1)*f
4).pi=pi*4或pi*=4
第101题(10.0分)题号:
479
功能:
十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二
个小孩2块,第三个小孩8块,第四个小孩22块,第五个
小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩
6块,第九个小孩14块,第十个小孩20块。
然后所有的小孩
同时将自己手中的糖分一半给左边的小孩;糖块数为奇数的人
可向老师要一块。
问经过这样几次调整后大家手中的糖的块数
都一样?
每人各有多少块糖?
main()
{
inti,count=0,a[11]={0,10,2,8,22,16,4,10,6,14,20};
/***********SPACE***********/
while(【?
】)
{
for(i=1;i<=10;i++)
a[i-1]=a[i-1]/2+a[i]/2;
a[10]=a[10]/2+a[0];
for(i=1;i<=10;i++)
/***********SPACE***********/
if(【?
】)a[i]++;
for(i=1;i<10;i++)
/***********SPACE***********/
if(a[i]!
=a[i+1])【?
】;
if(i==10)
break;
else
{
a[0]=0;
count++;
}
}
printf("count=%dnumber=%d\n",count,a[1]);
}
答案:
1).1
2).a[i]%2==1
3).break
第125题(10.0分)题号:
411
功能:
有n个人围成一圈,顺序排号。
从第一个人开始报数(从1
到3报数),凡报到3的人退出圈子,问最后留下的是原来
第几号的那位。
#definenmax50
main()
{
inti,k,m,n,num[nmax],*p;
printf("pleaseinputthetotalofnumbers:
");
scanf("%d",&n);
p=num;
/***********SPACE***********/
for(i=0;【?
】;i++)
/***********SPACE***********/
*(p+i)=【?
】;
i=0;
k=0;
m=0;
while(m{
/***********SPACE***********/
if(【?
】!
=0)k++;
if(k==3)
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n)i=0;
}
/***********SPACE***********/
while(【?
】)p++;
printf("%disleft\n",*p);
}
答案:
1).ii
2).i+1或i+1
3).*(p+i)或*(p+i)
4).*p==0或*p==0
第128题(10.0分)题号:
480
功能:
输出Fibonacci数列的前15项,要求每行输出5项。
Fibonacci数列:
1,1,2,3,5,8,13...........
#include
main()
{
/***********SPACE***********/
int【?
】[14],i;
fib[0]=1;fib[1]=1;
for(i=2;i<15;i++)
/***********SPACE***********/
fib[i]=【?
】;
for(i=0;i<15;i++)
{
printf("%d\t",fib[i]);
/***********SPACE***********/
if(【?
】)printf("\n");
}
}
答案:
1).fib
2).fib[i-2]+fib[i-1]或fib[i-2]+fib[i-1]
3).i%5==4
第48题(10.0分)题号:
425
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
有n个人围成一圈,顺序排号。
从第一个人开始报数(从1
到3报数),凡报到3的人退出圈子,问最后留下的是原来
第几号的那位。
------------------------------------------------------*/
#include"stdio.h"
#definenmax50
main()
{
inti,k,m,n,num[nmax],*p;
printf("pleaseinputthetotalofnumbers:
");
scanf("%d",&n);
/**********FOUND**********/
p==num;
for(i=0;i*(p+i)=i+1;
i=0;
k=0;
m=0;
/**********FOUND**********/
while(m>n-1)
{
if(*(p+i)!
=0)k++;
/**********FOUND**********/
if(k!
=3)
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n)i=0;
}
while(*p==0)p++;
printf("%disleft\n",*p);
getch();
}
答案:
1).p=num;
2).while(m3).if(k==3)
第50题(10.0分)题号:
20
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
已知一个数列从第0项开始的前三项分别为0、0、1,以
后的各项都是其相邻的前三项的和。
下列给定程序中,
函数fun的功能是:
计算并输出该数列的前n项的平方根
之和sum,n的值通过形参传入。
例如:
当n=10时,程序的输出结果应为23.197745。
------------------------------------------------------*/
#include
/**********FOUND**********/
fun(intn)
{
doublesum,s0,s1,s2,s;
intk;
/**********FOUND**********/
sum=0.0;
if(n<=2)sum=0.0;
s0=0.0;
s1=0.0;
/**********FOUND**********/
s2=0.0;
/**********FOUND**********/
for(k=4;k>n;k++)
{
s=s0+s1+s2;
sum+=sqrt(s);
s0=s1;s1=s2;s2=s;
}
returnsum;
}
main()
{
intn;
scanf("%d",&n);
printf("%lf\n",fun(n));
}
答案:
1).doublefun(intn)
2).sum=1.0;或sum=1;
3).s2=1.0;或s2=1;
4).for(k=4;k<=n;k++)或for(k=4;n>=k;k++)或for(k=4;kk;k++)或for(k=4;1+n>k;k++)
第54题(10.0分)题号:
376
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
根据整型形参n,计算某一数据项的值。
A[1]=1,A[2]=1/(1+A[1]),A[3]=1/(1+A[2]),…,
A[n]=1/(1+A[n-1])
例如:
若n=10,则应输出:
a10=0.617977。
------------------------------------------------------*/
#include
#include
/**********FOUND**********/
intfun(intn)
{
floatA=1;inti;
/**********FOUND**********/
for(i=2;i/**********FOUND**********/
A=1.0\(1+A);
returnA;
}
main()
{
intn;
clrscr();
printf("\nPleaseentern:
");
scanf("%d",&n);
printf("A%d=%f\n",n,fun(n));
}
答案:
1).floatfun(intn)
2).for(i=2;i<=n;i++)
3).A=1.0/(1+A);
第100题(10.0分)题号:
420
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
有5个人坐在一起,问第五个人多少岁?
他说比第4个人
大2岁。
问第4个人岁数,他说比第3个人大2岁。
问第三
个人,又说比第2人大两岁。
问第2个人,说比第一个人
大两岁。
最后问第一个人,他说是10岁。
请问第五个人
多大?
------------------------------------------------------*/
#include"stdio.h"
age(n)
intn;
{
intc;
/**********FOUND**********/
if(n=1)
c=10;
else
/***********FOUND***********/
c=age(n)+2;
return(c);
}
main()
{
/**********FOUND**********/
printf("%d",age5);
}
答案:
1).if(n==1)
2).c=age(n-1)+2;
3).printf("%d",age(5));
第124题(10.0分)题号:
414
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
一球从100米高度自由落下,每次落地后反跳回原高度的
一半;再落下,求它在第10次落地时,共经过多少米?
第10次反弹多高?
------------------------------------------------------*/
#include"stdio.h"
main()
{
/**********FOUND**********/
floatsn=100.0;hn=sn/2;
intn;
/**********FOUND**********/
for(n=2;n<10;n++)
{
sn=sn+2*hn;
/**********FOUND**********/
hn=hn%2;
}
printf("thetotalofroadis%f\n",sn);
printf("thetenthis%fmeter\n",hn);
}
答案:
1).floatsn=100.0,hn=sn/2;
2).for(n=2;n<=10;n++)或for(n=2;n<11;n++)
3).hn=hn/2;
第126题(10.0分)题号:
415
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,
还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉
一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一
半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
------------------------------------------------------*/
#include"stdio.h"
main()
{
intday,x1,x2;
day=9;
/**********FOUND**********/
x2==1;
while(day>0)
{
/**********FOUND**********/
x1=(x2+1)/2;
x2=x1;
/**********FOUND**********/
day++;
}
printf("thetotalis%d\n",x1);
}
答案:
1).x2=1;
2).x1=(x2+1)*2;
3).day--;或day-=1;或day=day-1;
第131题(10.0分)题号:
377
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
求广义菲玻那契级数的第n项。
广义菲玻那契级数的前n
项为:
1,1,1,3,5,9,17,31,……
项值通过函数值返回main()函数。
例如:
若n=15,则应输出:
Thevalueis:
2209。
------------------------------------------------------*/
#include
#include
longfun(intn)
{
longa=1,b=1,c=1,d=1,k;
/**********FOUND**********/
for(k=4;k{
d=a+b+c;
/**********FOUND**********/
a=b
b=c;
c=d;
}
/**********FOUND**********/
returnk;
}
main()
{
intn=15;
clrscr();
printf("Thevalueis:
%ld\n",fun(n));
}
答案:
1).for(k=4;k<=n;k++)
2).a=b;
3).returnd;
第137题(10.0分)题号:
15
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
输出Fabonacci数列的前20项,要求变量类型定义成浮点型,
输出时只输出整数部分,输出项数不得多于或少于20。
------------------------------------------------------*/
fun()
{
inti;
floatf1=1,f2=1,f3;
/**********FOUND**********/
printf("%8d",f1);
/**********FOUND**********/
for(i=1;i<=20;i++)
{
f3=f1+f2;
/**********FOUND**********/
f2=f1;
/**********FOUND**********/
f3=f2;
printf("%8.0f",f1);
}
printf("\n");
}
main()
{
fun();
}
答案:
1).printf("%8.0f",f1);或printf("%f",f1);或printf("%8f",f1);
2).for(i=1;i<20;i++)或for(i=1;20>i;i++)或for(i=2;i<=20;i++)或for(i=2;20>=i;i++)或for(i=1;i<=19;i++)或for(i=1;19>=i;i++)
3).f1=f2;
4).f2=f3;
━━━━━━━━━━━━━━━━━━
一、程序设计共116题(共计1160分)
━━━━━━━━━━━━━━━━━━
第2题(10.0分)题号:
401
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:
编写main程序调用函数fact求解从m个元素选n个元
素的组合数的个数。
计算公式是:
组合数=m!
/(n!
.(m-n)!
)。
要求:
m不能小于n,否则
应有容