①简单,把float换成double就行了。为什么呢?因为计算机把5.2和3.1存储到变量中是用的2进制,这样存储有些数2进制 会变成无限循环小数。再相加就难免有问题。double精度高一些,可以克服问题。(比如用计算器算1÷3×3,答案是 0.9999999999,而不是1,这是一个道理)
②不定义变量c,把printf("%f",c);改成printf("%f",a+b);或干脆改成printf("%f",5.2+3.1);就行了。这样没有了相加 并存储的步骤,答案就会正确(尽管这样还是强烈建议使用double,还不行就用long double)。
详见C语言常见错误总结 |