frog77 发表于 2019-9-17 14:35:13

萌新求助

#include<stdio.h>
int main(void)
{
    int flag=1,i=1,n,x;
    float sum=0,item;
    scanf("%d",&n);
    for (x=1;x<=n;x++){
      item=flag*1.0/i;                                                 *
      sum=sum+item;
      i=i+2;
      flag=-flag;
    }
    printf("the sum is %f",sum);
    return 0;
}

请问为什么加粗的语句里的   flag*1.0/i 改成 flag*1/i 之后结果就错误了呢?...

superbe 发表于 2019-9-17 16:34:37

本帖最后由 superbe 于 2019-9-17 16:37 编辑

这里面有个类型转换的问题,如果是flag*1.0/i,因为有1.0,就按double计算,结果也是double。如果是flag*1/i,就按int计算,结果也是int,小数被截断了。也就是不同类型数计算时隐式向较高类型转换。
例1.0/2=0.5,而1/2=0.
页: [1]
查看完整版本: 萌新求助