分数表达式的 n 项之和为整数时应为浮点数

adi*_*i99 0 c integer-division fractions implicit-conversion

在下面的代码中,为什么除非我放入term = 1.0/n而不是 when ,否则我不会得到有效的结果term = 1/n。我已将 term 声明为浮动,这还不够吗?

#include <stdio.h>

int main()
{    
     float sum = 0, term;
     int n, i;
     
     printf("enter the value of n:\n");
     scanf("%d", &n);
     term = 1.0 / n;
     for(i = 1; i <= n; i++)
     {  
        sum = term + sum; 
       
      }
     printf("Sum = %.3f\n", sum);   
     
     return 0; 
}
Run Code Online (Sandbox Code Playgroud)

ana*_*ciu 7

在下面的代码中,为什么除非我放入term = 1.0/n而不是 when ,否则我不会得到有效的结果term = 1/n。我已声明termfloat. 这还不够吗?

抱歉不行。

ISO/IEC 9899:2017 §6.5.5 6 规定:

当整数被除时,/运算符的结果是代数商,其中任何小数部分都被丢弃。105)如果商a/b是可表示的,则表达式(a/b)*b + a%b应等于a[...]

105)这通常被称为“向零截断”。

翻译:两个整数相除的结果是一个整数。

即使将它分配给 afloatdouble变量也不够,它会在分配之前被截断,解决方案是将小数表达式中的一个操作数转换为浮点数或双精度数,就像您所做的那样。