标题说明一切。在给定半径的情况下,计算体积的数学方法是错误的,但计算面积的方法是正确的。
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <string.h>
#include <math.h>
float radius[4][3];
int x = 0;
int main()
{
while (x < 4)
{
printf("Please enter Radius %d: ",(x+1));
scanf("%f", &radius[x][0]);
radius[x][1] = ((4 / 3) * M_PI * pow(radius[x][0], 3));
radius[x][2] = M_PI * pow(radius[x][0], 2);
x++;
}
x = 0;
while (x < 4)
{
printf("nrThe volume for a sphere with the radius %.2f is %.2f", radius[x][0], radius[x][1]);
printf("nrThe area for a circle with the radius %.2f is %.2f", radius[x][0], radius[x][2]);
x++;
}
return 0;
}
4 / 3
的两个操作数都是整数,因此执行整数除法。这将结果向0截断,结果为1。
使用浮点常量进行浮点除法。
radius[x][1] = ((4.0 / 3.0) * M_PI * pow(radius[x][0], 3));
本行:radius[x][1] = ((4 / 3) * M_PI * pow(radius[x][0], 3));
这个运算符(4 / 3)
是一个整数除法,因为左、右操作数都是整数{4
和3
),所以它将截断为0。
4 / 3 = 1.33333333333333333...
,但结果被截断,所以它将返回1
。
使用浮点数:
radius[x][1] = ((4.0f / 3.0f) * M_PI * pow(radius[x][0], 3));
或将其类型转换为float
类型。
radius[x][1] = (((float)4 / 3) * M_PI * pow(radius[x][0], 3));
除了从整数除法((4 / 3)
是1
)到浮点除法,考虑使用一致的数学类型:
double radius[4][3];
radius[x][1] = ((4.0 / 3.0) * M_PI * pow(radius[x][0], 3));
radius[x][2] = M_PI * pow(radius[x][0], 2);
或
#define M_PIf 3.1415926535897932f
float radius[4][3];
radius[x][1] = ((4.0f / 3.0f) * M_PIf * powf(radius[x][0], 3));
radius[x][2] = M_PIf * powf(radius[x][0], 2);
我将继续使用double
并利用先前的乘法,而不是调用昂贵的pow()
。
double radius[4][3];
radius[x][2] = M_PI * radius[x][0] * radius[x][0]; // pi * r^2
radius[x][1] = (4.0 / 3.0) * radius[x][0] * radius[x][2]; // 4/3 * r * area