C语言附值

来源:百度知道 编辑:UC知道 时间:2024/07/06 12:38:02
高手请看下列程序氢弹
main()
{
int n,i;
float t=1.0,sum=0.0,s=-1.0;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
printf ("%d ",i);
------------------ t=(2*i-1)*(2*i+1)/(2*i)/(2*i)*1.0;---------------
printf ("%f\n",t);
s=-s;
t=s*t;
sum=sum+t;
}
printf ("%f \n",sum);
}
其中---------句不能对t变量进行附值 都输出0.000000若该成
t=1.0*(2*i-1)*(2*i+1)/(2*i)/(2*i)就ok了 这是为什么呢,详细- -!

原因是类型转换
i 是int
t 是float

在int 运算中 因为没有小数 所以当被除数小于除数 就返回0 例如2/4 = 0

而在C中 int可以自动转换为float 当遇到float数据的时候 (赋值或者与其进行运算)

(2*i-1)*(2*i+1)/(2*i)/(2*i)中 全部是 int 运算 因此如果(2*i-1)*(2*i+1)<(2*i)*(2*i)的时候 返回0 然后 0 和 后面的float 1.0 相乘 得到0.0

而下面的那一个 一开始就是1.0* 所以自动把后面的数据类型转换为float 就有小数点来满足 被除数小于除数的情况了

你吧i 给定义成float ,在用第一个程序运行一下,你就能运行出来了

的确是你定义变量的问题。