#include<stdio.h>
#include<math.h>
main()
{ int a=1,b=2,t=1,j=0;
double i,sum;
i=0.0;
sum=0.0;
clrscr();
while(t<=20)
{ i=a/b;
sum=sum+i;
j=b;
b=a;
a=b+j;
t=t+1;
}
printf("sum=%f\ni=%f\n",sum,i);
printf("a=%d\nb=%d",a,b);
}
这个程序里面最后的a和b都没有错,就是sum和i怎么改输出的都是一个整数,而且最后影响到结果,重t=2开始,sum就开始不对了,输出不了小数部分,输出的时候直接只输出整数,可是定义的是小数呀?
自己想通了,原来定义的时候a和b也应该定义为double类型,因为i=a/b;而a和b两个整数相除在这个里面的结果他怎么都是一个整数,至于为什么,我也没搞懂。
帮你改了一个地方,加了注释,你看看:
#include<stdio.h>
#include<math.h>
main()
{ int a=1,b=2,t=1,j=0;
double i,sum;
i=0.0;
sum=0.0;
clrscr();
while(t<=20)
{ i=(double)a/b;// 这里加个强制转换就OK了
sum=sum+i;
j=b;
b=a;
a=b+j;
t=t+1;
}
printf("sum=%f\ni=%f\n",sum,i);
printf("a=%d\nb=%d",a,b);
}
运行结果: