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));