C语言关于int型和float型的区别

题目是:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
我的程序是
#include<stdio.h>
int main()
{
int i=1,b=1,a=2,t;
float sum=0;
for(;i<=20;i++)
{
sum=sum+a/b;
t=a;
a=a+b;
b=t;
}
printf("sum=%f\n",sum);
return 0;
}
我这个应该没错啊,但是得出来的答案是21,我把第五行和第六行改为int i=1;float b=1,a=2,t,sum=0;这样又能得出正确答案32.660261,我知道int型和float型的精准度是不同的,变量类型不同会影响到答案,但是a,b,t本来就是整型变量啊,改为float型也只是在小数点后面多加几个零而已,怎么会对结果的影响这么大呢?

[1] 如果 是 int a,b,c;
那么 c=a/b 将执行 整数除以整数 的 “整除” 运算。
例如 a=3, b=2; 则 c = a/b = 3/2 = 1 得 1
[2] 如果 是 float a,b,c; 那么 c=a/b 将执行 浮点 除法, c = 3.0 / 2.0 = 1.5
[3] 如果 是 int a=3,b=2; float c;
那么 c=a/b 将执行 整数除以整数 的 “整除” 运算, 运算结果转 float.
c = a/b = 3/2 = 1 = 1.0 得 1.0
如果 写成 c = (float)a / b 那么 会执行 c = 3.0 / 2 = 1.5 得 1.5
其中 (float)a 叫 “强制转化”成 浮点数。
温馨提示:答案为网友推荐,仅供参考
相似回答