第三十五讲|问题求解方法——迭代

来源:互联网 发布:帝国时代3mac版本 编辑:程序博客网 时间:2024/05/01 10:22
【项目1:另类求和】
求 Sn=a+aa+aaa+...+aa...a之值,其中 a是一个数字。

例如2+22+222+2222( 此时a=2,n=4),a和n均由键盘输入。

#include "stdio.h"int main(){int a,n,count=1,Sn=0,Tn=0;printf("请输入a和n的值:\n");scanf("%d,%d",&a,&n);while(count<=n){Tn=Tn*10+a;Sn+=Tn;count++;//n已为常量不可以++}printf("a+aa+aaa+...=%d\n",Sn);return 0;}
运行结果


心得 当时编这条的时候思维注意不是太集中。Tn=Tn*10+a一开始想起来,不知道为什么没写,费解。

变量太多,一不留神count++写成了n++,n为常量,常量不可以使用自增自减符。变量多以后记得在语句后面加上备注//。


【项目2:反弹的皮球】
一球从的100米高度自由落下,每次落地后反跳回原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?

#include "stdio.h"int main(){float sn=100.0,hn=sn/2;int n;for(n=2;n<=10;n++){sn+=(2*hn);hn/=2;}printf("第十次落地时共经过%f米\n",sn);printf("第十次反弹%f米\n",hn);return 0;}


运行结果



心得 之前把过程理解错了,只求了经过高度的一半。还有循环次数也搞错了,应该是9次,因为第一次就是你丢的过程。


【项目3:Bessel函数】
Bessel函数Jn(X)有以下的递推关系:

 编写程序,利用递推关系,由任意的n和x≠0求Jn(X)。

#include "stdio.h"#include "math.h"int main(){int i,n;double x,J0,J1,Jn;printf("请输入n,x。\n");scanf("%d,%lf",&n,&x);J0=sin(x)/x;J1=sin(x)/x*x-cos(x)/x;for(i=1;i<=n;i++){Jn=(2*i-1)*J1/x-J0;//J(n+1)=(2n+1)/x*Jn-J(n-1)xJ0=J1;J1=Jn;}printf("Jn = %.4f\n",Jn);}//注:变量jn代表的实际是公式中的jn+1,推导一下,2*i-1,而不是2*i+1,这是对的

运行结果



心得 还是迭代没有深刻理解好。jn,j1,j0三者互相表示,以求迭代。还有个2*i-1需要认真思考。因为迭代没有理解好,所以附上两个课堂事例。

例一 Fibonacci数列

有fn

#include "stdio.h"int main(){long f1,f2,fn;int i;f1=f2=1;printf("%ld\t%ld\t",f1,f2);for(i=3;i<=40;i++){fn=f1+f2;printf("%ld\t",fn);if(i%5==0)printf("\n");f1=f2;f2=fn;}}

没有fn

#include "stdio.h"int main(){long f1,f2;int i;f1=f2=1;for(i=1;i<=20;i++){printf("%ld\t%ld\t",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;//左f1代表第3个数,是第1、2数之和 f2=f2+f1;//左f2代表第4个数,是第2、3数之和 }}
其中里面还是有个小技巧的,输出几个就换行。if(i%2==0) printf("\n");


例二 级数公式

#include "stdio.h"#include "math.h"int main(){double x,sum=1,term=1;int i=1;scanf("%lf",&x);while(fabs(term)>=1e-5){term=term*(-1)*x*x/((2*i)*(2*i-1));sum=sum+term;i++;}printf("%f\n",sum);}

心得 再看一下pdf文件中,term的推导过程。好好体味一下迭代。



【项目4:贪财的富翁】
一个百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,该计划如下:我每天给你十万元,而你第一天只需给我一分钱,第二天我仍给你十万元,你给我两分钱,第三天我仍给你十万元,你给我四分钱,....,你每天给我的钱是前一天的两倍,直到满一个月(30天),百万富翁很高兴,欣然接受了这个契约。请编程序,通过计算说明,这个换钱计划对百万富翁是否是个划算的交易。
提示:(1)需要计算出30天后陌生人给了百万富翁多少钱,百万富翁给了陌生人多少钱,然后才能做出判断;(2)想要看得清楚,可以选择列出每一天双方交易获得的钱数。

#include "stdio.h"int main(){int i;double a=0,b=0.01;for(i=1;i<=30;i++){a=a+100000;b*=2;printf("%lf\n%lf\n",a,b/2);}printf("%lf\n%lf\n",a,b/2);}

运行结果




【项目5:在北京买房】

现在北京有一套房子,价格200万,假设房价每年上涨10%,一个软件工程师每年固定能赚40万。如果他想买这套房子,不贷款,不涨工资,没有其他收入,每年不吃不喝不消费,那么他需要几年才能攒够钱买这套房子? 

#include "stdio.h"int main(){int year=0,salary=400000;double house_price=2000000;while(house_price>=salary){//salary*=1.05;salary+=400000;house_price*=1.10;year++;}printf("%d年后才能攒够钱买房。",year);}
运行结果

永远买不起。。。









0 0
原创粉丝点击