c语言入门,abc为三个整数,求其平均值d,为什么已经定义变量d是double型但,printf输出后小数点后全是零而非10.333333,望告知

问题描述:

c语言入门,abc为三个整数,求其平均值d,为什么已经定义变量d是double型但,printf输出后小数点后全是零而非10.333333,望告知
img

img

只把d定义为double型还不行,因为(a+b+c)/3是个表达式,其结果先形成一个隐形变量,然后再赋值给d。所以隐形变量的类型取决于表达式的变量类型。
由于a,b,c都是整数,3也是整数,因此(a+b+c)/3会判定为进行整除,所以最终d没有出现小数
改成(a+b+c)/3.0就可以了。整数和浮点数相除的结果判定为浮点数相除

(a+b+c)/3.0

因为浮点数在计算机的存储形式是:符号位 + 指数位 + 尾数位,尾数部分的存储位数是有限制的,因此会有精度丢失,(这也是为什么会有单精度float和双精度double之分),从内存中取到的数值其实是无限接近于真实值的近似值。总结一句话就是“浮点数只是近似值,非精准值”。
希望可以帮助到你!