递推法.docx
- 文档编号:11624257
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:22
- 大小:19.99KB
递推法.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).i 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(m 3).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;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,否则 应有容
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 递推法