C程序,哪位大虾能指点一下下

来源:百度知道 编辑:UC知道 时间:2024/07/02 03:08:06
#include<stdio.h>
#include<math.h>
main()
{
double x1=1,x2=2,x,n,i;
double item,sum=0;

scanf("%lf",&n);
for(i=1;i<=n;i++){
item=x2/x1;
sum+=item;
x=x1+x2;
x1=x2;
x2=x;
}
printf("%lf\n",sum);
}

为何X1,X2,X,N,I,必须定义为浮点型才能输出正确结果,而定义为整型小数点后的数据会丢失,我的困惑是在这个程序中X1,X2,X,N,I,所用的数据都是整数啊

整形的特点就是舍弃小数点后的数字,无论大小,哪怕是.9也一样。
所以在浮点运算和除法运算时要用浮点型,或双精度浮点型。
二级C的试题中有不少这样的题目。

简单地说吧,这个循环语句进行了加权和赋值
for(i=1;i<=n;i++)
{
item=x2/x1;
sum+=item;
x=x1+x2;
x1=x2;
x2=x;
}

n=2时,第一轮循环:
i=1
item=x2/x1=2.0
sum=item+sum=2+0=2.0
x=x1+x2=3.0
x1=x2=2.0
x2=x=3.0
第二轮循环:
i=2
item=x2/x1=1.5
sum=item+sum=1.5+2=3.5
x=x1+x2=5.0
x1=x2=3.0
x2=x=5.0
这里就能看出问题了
如果是整型,就会变成
item=x2/x1=1.0
sum=item+sum=1.0+2.0=3.0
x=x1+x2=5
x1=x2=3
x2=x=5

3.5和3,问题就出在除法运算产生的小数位上。
因此要用浮点型而不是整型。
——————————————————————————————————
item=x2/x1
这里的除法结果是
浮点型=(强制类型转换)(整型/整型)

假设x2=3,x1=2
item=x2/x1=1.0而不是1.5
因为x2/x1的结果是整型,结果取1
再转换为浮点型为1.0

所以i,n可以定义为整型
其他的都不可以哦~

C/C++语言里的整型数如果涉及到除法运算时,会将小数点后的结果省略(这是由它的数据类型特点所决定的),因此一般涉及到除法时,是不会用整型的。除非的确是符合实际的(比如计算人数时,不可