C 始终打印相同的浮点值
这个程序是关于为C 始终打印相同的浮点值,c,gcc,floating-point,C,Gcc,Floating Point,这个程序是关于为i的不同值打印浮点值t,但它每次都打印相同的值。即使t的值在变化,它总是为n的每个值打印零 为什么会这样 #include <stdio.h> int main(){ float n; float sum=0,t,s=1,i; scanf("%f",&n); for(i=0;i<n;i++){ t=(100/(1+2i)); printf("\n%f",t); } } 这就是结
i
的不同值打印浮点值t
,但它每次都打印相同的值。即使t
的值在变化,它总是为n
的每个值打印零
为什么会这样
#include <stdio.h>
int main(){
float n;
float sum=0,t,s=1,i;
scanf("%f",&n);
for(i=0;i<n;i++){
t=(100/(1+2i));
printf("\n%f",t);
}
}
这就是结果。问题在于:
t=(100/(1+2i));
似乎您打算将2乘以i
,但忘记了乘法运算符*
。取而代之的是2i
,它实际上是一个复数常量。请注意,这不是标准C,而是一个GCC扩展(-pedantic
开关引发警告)
添加乘法运算符,它应该按预期工作
t=(100/(1+2*i));
此代码不会使用
t=(100/(1+2i))编译代码>1+2i
?它是什么?复杂?带学究气:“警告:虚常量是GCC扩展”,代码确实编译了,GCC。证明它编译:也可能转换为float
,否则你会得到整数除法。@Jean Françoisfare不需要,因为i
声明为float
。true。你能补充一下这是一个gcc扩展而不是C规范吗?@Jean-Françoisfare Done@Jean-Françoisfare如果你将结果保存在一个float复合体中
你会得到一个0-50i的结果。我不确定我是否理解转换。将100更改为100.0将获得20-40i的预期结果。
t=(100/(1+2*i));