C语言圆面积计算代码运行输出与预期不符问题求助
问题原因
导致结果不符的核心是浮点精度损失,具体分为两点:
- 你将
radius(半径)和area(面积)都定义为float单精度浮点类型,这类变量的十进制有效数字仅为6~7位,计算过程中会自动截断多余精度,最终输出时就会产生误差。 - 计算时你定义的
PI是double双精度类型,双精度值和单精度的radius计算后得到的结果仍为双精度,赋值给单精度的area时会再次发生精度截断,进一步放大误差。
另外如果需要完全匹配预期的输出格式,还要注意原代码里打印提示语的语句多了换行符\n,会导致提示语输出后自动换行,和预期的连续输出格式不符。
修复方案
把radius和area的类型从float改为double双精度类型,同时对应修改scanf的输入格式符为%lf,再删除提示语后的多余换行符即可,修改后的代码如下:
#include <stdio.h> int main(void) { const double PI = 3.14159; double area, radius; printf("Please enter the radius: "); // double类型对应的输入格式符为%lf scanf("%lf",&radius); area = PI * radius * radius; printf("The area of the circle is %f\n", area); return 0; }
内容的提问来源于stack exchange,提问作者Michael Cunningham
相关产品推荐
相关产品推荐

