C++入门作业:数学公式转代码结果不符问题排查
问题分析与修正
你的代码主要有两个关键错误导致结果偏差,我们一步步来拆解:
1. 运算符优先级与括号错误
原数学公式中是 10π/(a+b),但你的代码写成了:
(10*3.1416/a+b)
由于C++中除法/的优先级高于加法+,这段代码会先计算10*3.1416/a,再加上b,完全违背了原公式的运算逻辑。正确的写法应该给a+b加上括号,确保先计算和再做除法:
(10*3.1416)/(a+b)
2. (可选但建议)使用更精确的π值
你手动用3.1416近似π,其实C++标准库<cmath>提供了M_PI宏(注意:部分编译器需要在包含<cmath>前定义#define _USE_MATH_DEFINES才能启用),它的精度更高,能减少计算误差。
修正后的完整代码
#include <iostream> #include <cmath> #define _USE_MATH_DEFINES // 启用M_PI的定义(针对MSVC等编译器) using namespace std; int main() { float x, a, b, C; // 移除未使用的y、z变量 cout << "Input the a-value: "; cin >> a; cout << "\nInput the b-value: "; cin >> b; cout << "\nInput the C-value (in degrees): "; cin >> C; // 将角度转换为弧度 C = C * M_PI / 180.0; // 按照正确的公式计算 x = (10 * M_PI / (a + b)) * pow(sin(C), 3) + 3 * log(a) * tan(C); cout << "\nThe value of x is " << x << endl; return 0; }
验证结果
当输入a=5、b=10、C=15时,修正后的代码运行结果约为1.33005,和你用科学计算器得到的结果一致。
另外补充两个小建议:
- 记得包含必要的头文件(你原来的代码没写
#include <iostream>和#include <cmath>,实际编译会报错) - 可以添加输入合法性检查(比如确保
a、b不为0,a为正数等),避免运行时错误
内容的提问来源于stack exchange,提问作者marshblocker
相关产品推荐
相关产品推荐

