应使用 r * r 或 std::pow(r, 2) 计算半径平方,避免误用位异或 ^;π 应用高精度 double 常量定义;输入半径后须验证非负。
std::pow 或乘法算半径平方,别手滑写成 r^2
很多人在 C++ 里写 r^2 想表示「r 的平方」,结果面积永远不对——因为 ^ 是位异或运算符,不是幂运算。r^2 实际上是 r 和 2 做按位异或,和平方完全无关。
r * r(推荐,快且无依赖)std::pow(r, 2)(需 #include ,但对整数可能引入浮点误差)pow(r, 2) 不加 std:: 前缀,否则可能调用 C 风格函数,重载行为不明确M_PI 要小心平台兼容性M_PI 不是 C++ 标准常量,Linux/glibc 下默认可用,但 Windows MSVC 默认不定义,Clang 也可能不开启。直接用会编译失败。
const double PI = 3.14159265358979323846;
#define _USE_MATH_DEFINES 放在 #include 之前float 存 π,float PI = 3.14f 会导致面积计算明显失真(尤其半径大时)圆面积公式 PI * r * r 在数学上要求 r >= 0。C++ 不会自动拦截负数输入,但负半径算出的“面积”是正数,逻辑错误却难以察觉。
if (r
0.0
double 读入比 float 更稳妥,避免小数截断(如输入 2.5 被存成 2.499999)#include#include #include int main() { const double PI = 3.14159265358979323846; double r; std::cout << "请输入半径: "; std::cin >> r;
if (r zuojiankuohaophpcn 0) { std::cerr zuojiankuohaophpcnzuojiankuohaophpcn "错误:半径不能为负。\n"; return 1; } double area = PI * r * r; std::cout zuojiankuohaophpcnzuojiankuohaophpcn std::fixed zuojiankuohaophpcnzuojiankuohaophpcn std::setprecision(6); std::cout zuojiankuohaophpcnzuojiankuohaophpcn "圆的面积是: " zuojiankuohaophpcnzuojiankuohaophpcn area zuojiankuohaophpcnzuojiankuohaophpcn "\n"; return 0;
}
实际跑起来最常出问题的,是把
^当乘方、漏掉负数检查、还有在不同编译器间挪代码时M_PI突然失效——这三个点卡住的人,远多于公式本身。