c程序问题,,求助!!在线等!!谢谢!!!

c程序问题,,求助!!在线等!!谢谢!!!
1. 黄金队列
黄金分割数0.618与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的0.618处,墙上的画像一般也挂在房间高度的0.618处,甚至股票的波动据说也能找到0.618的影子....
黄金分割数是个无理数,也就是无法表示为两个整数的比值。0.618只是它的近似值,其真值可以通过对5开方减去1再除以2来获得,我们取它的一个较精确的近似值:0.618034
有趣的是,一些简单的数列中也会包含这个无理数,这很令数学家震惊!
1 3 4 7 11 18 29 47 .... 称为“鲁卡斯队列”。它后面的每一个项都是前边两项的和。
如果观察前后两项的比值,即:1/3,3/4,4/7,7/11,11/18 ... 会发现它越来越接近于黄金分割数!
你的任务就是计算出从哪一项开始,这个比值四舍五入后已经达到了与0.618034一致的精度。
请写出该比值。格式是:分子/分母。比如:29/47
/*黄金队列*/
#include "stdio.h"
#define N 40
#include "math.h"
main()
{ int i,z;
double a[N],s=0;
a[0]=1,a[1]=3;
for(i=2;i a[i]=a[i-1]+a[i-2];
for(i=0;i printf("%.0f ",a[i]);
i=0;
while((s)!=0.618034)
{ s=a[i]/a[i+1];
z=i,i++;

}
printf("n %.0f/%.0f %f n",a[z],a[z+1],s);
}
就是执行不了!!!求原因!!谢谢各位啦!!!
浪浪女 1年前 已收到1个回答 举报

军容 幼苗

共回答了8个问题采纳率:100% 举报

因为double型是浮点数,所以判断句while((s)!=0.618034)永远为真,所以程序会一直执行下去
改成 while(0.618034-s>0.000001)就行了

1年前

8
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.029 s. - webmaster@yulucn.com