您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第十二章-算法-迭代
【程序1】一个饲养场引进一只刚出生的新品种兔子,这种兔子从出生的下一个月开始,每月新生一只兔子,新生的兔子也如此繁殖。如果所有的兔子都不死去,问到第12个月时,该饲养场共有兔子多少只?#includestdio.hmain(){intx=1,y,i;while(x=12){y=x*2;x=y;}printf(%d\t\n,x);}【程序2】阿米巴用简单分裂的方式繁殖,它每分裂一次要用3分钟。将若干个阿米巴放在一个盛满营养参液的容器内,45分钟后容器内充满了阿米巴。已知容器最多可以装阿米巴220,220个。试问,开始的时候往容器内放了多少个阿米巴?请编程序算出。#includestdio.h#includemath.hmain(){inti;longx;x=pow(2,20);for(i=1;i16;i++){x=x/2;//printf(%d,x);}printf(%d,x);}【程序3】验证谷角猜想。日本数学家谷角静夫在研究自然数时发现了一个奇怪现象:对于任意一个自然数n,若n为偶数,则将其除以2;若n为奇数,则将其乘以3,然后再加1。如此经过有限次运算后,总可以得到自然数1。人们把谷角静夫的这一发现叫做“谷角猜想”。要求:编写一个程序,由键盘输入一个自然数n,把n经过有限次运算后,最终变成自然数1的全过程打印出来。递归#includestdio.hintfun(intn){if(n==1){printf(%d,n);return1;}if(n%2==0){printf(%d,n);returnfun(n/2);}if(n%2==1){printf(%d,n);returnfun(n*3+1);}}main(){printf(%,fun(21));}迭代方法#includestdio.hintfun(intn){intx;while(n!=1){if(n%2==0){x=n/2;}elseif(n%2==1){x=n*3+1;}n=x;printf(%d,n);}}main(){printf(%,fun(9));}【程序4】反弹的皮球一球从的100米高度自由落下,每次落地后反跳回原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?#includestdio.hintmain(){floatsn=100.0,hn=sn/2;intn;for(n=2;n=(1);n++){sn=(2);hn=(3);}printf(第10次落地时共经过%f米\n,Sn);printf(第10次反弹%f米\n,hn);return0}【程序5】迭代法求正整数m,n的最大公约数和最小公倍数。【程序6】用迭代法求菲波那切数列的前40个数;#includestdio.h#includestdlib.hintmain(){intf1,f2,fn;inti;f1=f2=1;fn=0;printf(斐波那契数列的初值为:);printf(f1=%d\tf2=%d\t\n,f1,f2);//求斐波那契数列f3-f40的值for(i=3;i=40;++i){fn=f1+f2;printf(f%d=%d\t,i,fn);if(i%5==0)printf(\n);f1=f2;f2=fn;}return0;}【程序7:贪财的富翁】一个百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,该计划如下:我每天给你十万元,而你第一天只需给我一分钱,第二天我仍给你十万元,你给我两分钱,第三天我仍给你十万元,你给我四分钱,....,你每天给我的钱是前一天的两倍,直到满一个月(30天),百万富翁很高兴,欣然接受了这个契约。请编程序,通过计算说明,这个换钱计划对百万富翁是否是个划算的交易。提示:(1)需要计算出30天后陌生人给了百万富翁多少钱,百万富翁给了陌生人多少钱,然后才能做出判断;(2)想要看得清楚,可以选择列出每一天双方交易获得的钱数。#includestdio.hintmain(){doublem2f=1.0e5,f2m=0.01,m2fs=0,f2ms=0;intday=1;//一定要赋初值for(day=1;day=30;day++){m2fs+=m2f;f2ms+=f2m;f2m*=2;//下面的输出不是必需,但可以使我们更加清楚地知道解题的过程,这可以是一个技巧printf(第%d天,陌生人给富翁累计%.2f,富翁给陌生人累计%.2f\n,day,m2fs,f2ms);}printf(最终,陌生人给富翁:%.2f,富翁给陌生人:%.2f。,m2fs,f2ms);if(m2fsf2ms)printf(陌生人自找);else{if(m2fsf2ms)printf(富翁傻帽了);elseprintf(两人持平,没意思的交易);}printf(\n);return0;}【程序8:在北京买房】现在北京有一套房子,价格200万,假设房价每年上涨10%,一个软件工程师每年固定能赚40万。如果他想买这套房子,不贷款,不涨工资,没有其他收入,每年不吃不喝不消费,那么他需要几年才能攒够钱买这套房子?#includestdio.hintmain(){doublehousePrice=200,salarys=40;doublerate=0.1,salary=40;intyear=0;while(year80&&salaryshousePrice){housePrice*=(1+rate);salarys+=salary;year++;printf(第%d年,房子值%.0f万,程序员有%.0f万元\n,year,housePrice,salarys);}if(year=80)printf(惨,不能算了!);elseprintf(%d年可以买下,继续努力工作!,year);printf(\n);return0;}【程序9】迭代法开平方:#includestdio.h#includemath.hfloatfun(floata){floatx0,x1;x0=a/2;x1=(x0+a/x0)/2;while(fabs(x0-x1)=0.00001){x0=x1;x1=(x0+a/x0)/2;}returnx1;}main(){printf(%lf,fun(99));}【程序10】迭代法求方程的根用牛顿迭代法求下面方程在输入初值点附近的根:2x3-4x2+3x-6=0要求前后两次求出的x的差的绝对值小于10-6牛顿迭代法公式如下:f(x)=2x3-4x2+3x-6=0f'(x0)=f(x0)/(x1-x0)所以x1=x0-f(x0)/f'(x0)。.#includestdio.h#includemath.hintmain(){doublex0,x1,f,fd;scanf(%lf,&x1);do{x0=x1;f=2*x0*x0*x0-4*x0*x0+3*x0-6;fd=6*x0*x0-8*x0+3;x1=x0-f/fd;}while(fabs(x0-x1)=1e-6);printf(%.6f,x1);return0;}.【程序11:Bessel函数】Bessel函数Jn(X)有以下的递推关系:编写程序,利用递推关系,由任意的n和x≠0求Jn(X)。#includestdio.h#includemath.hintmain(){doublejn,j0,j1,x;intn,i;scanf(%d%lf,&n,&x);j0=sin(x)/x;j1=sin(x)/(x*x)-cos(x)/x;for(i=2;i=n;i++){jn=(2*i-1)*j1/x-j0;//见后注j0=j1;j1=jn;}printf(Jn=%.4f\n,jn);return0;}注:变量jn代表的实际是公式中的jn+1,推导一下,2*i-1,而不是2*i+1,这是对的
本文标题:第十二章-算法-迭代
链接地址:https://www.777doc.com/doc-5707174 .html