指定float/double却获整数值:圆周长面积计算异常求助
问题描述
我用以下C语言代码计算圆的直径、周长和面积,但结果始终不符合预期。哪怕把float换成double、%f换成%lf,周长和面积还是以xxx.000000的格式输出,就像整数转浮点数的结果。比如半径输入4时,正确面积应该是约50.27,但实际输出是50.000000,求解决办法。
#include <stdio.h> int diameter_fn(int r) { return (2 * r); } void circumference_fn(int r) { float pie = 22 / 7; float circum = (2 * pie * r); printf(", Circumference = %f", circum); } void area_fn(int r) { float pie = 22 / 7; float area = (22 * r * r / 7); printf(" & the Area = %f", area); } int main() { printf("\nName = NAME & UID = UID\n"); int radius; printf("Enter the Radius of Circle:\t\t"); scanf("%d", &radius); printf("\nDiameter = %d", diameter_fn(radius)); circumference_fn(radius); area_fn(radius); return 0; }
问题原因与解决方法
核心问题:整数除法截断
代码里的22 / 7是两个整数相除,C语言中整数除法会直接截断小数部分,结果是整数3,而非我们需要的近似圆周率3.142857...。不管后续赋值给float还是double变量,截断已经发生,后续计算都基于整数3,结果自然是整数转成的浮点数,出现.000000的情况。解决步骤
- 将整数除法改为浮点数除法:把
22 / 7改成22.0 / 7或22 / 7.0,只要其中一个操作数是浮点数,C语言就会按浮点数除法计算,得到正确的圆周率近似值。 - 优化面积计算逻辑:原代码
22 * r * r / 7存在中间整数运算截断问题(比如半径4时,2244=352,352/7=50,整数除法直接截断小数),改成用浮点数圆周率参与计算,或直接写22.0 * r * r /7,避免截断。 - 可选:使用标准库圆周率常量:若追求更高精度,可包含
math.h头文件,直接使用M_PI常量(注意部分编译器需开启数学库,如GCC编译时加-lm选项)。
- 将整数除法改为浮点数除法:把
修正后的代码
#include <stdio.h> // 若使用M_PI,取消下面一行注释 // #include <math.h> int diameter_fn(int r) { return 2 * r; } void circumference_fn(int r) { // 改成浮点数除法,或用M_PI替代22.0/7 float pie = 22.0 / 7; float circum = 2 * pie * r; printf(", Circumference = %.2f", circum); // 用%.2f控制小数位数,结果更直观 } void area_fn(int r) { float pie = 22.0 / 7; float area = pie * r * r; // 用pie参与计算,避免整数运算截断 printf(" & the Area = %.2f", area); } int main() { printf("\nName = NAME & UID = UID\n"); int radius; printf("Enter the Radius of Circle:\t\t"); scanf("%d", &radius); printf("\nDiameter = %d", diameter_fn(radius)); circumference_fn(radius); area_fn(radius); return 0; }
内容的提问来源于stack exchange,提问作者ParthProLegend
相关产品推荐
相关产品推荐

