我的C++三角函数计算代码输入a=90时Z应为-1但输出错误,是什么问题?
问题排查与解决方案
核心错误原因
- 输入格式符不匹配:代码中
a声明为double类型,但scanf使用了仅适配float类型的%g格式符,导致输入的数值无法被正确读取到变量a中,后续所有三角函数计算的输入值都是错误的。
预期结果验证(输入a=90时)
当输入正确读取为90时,计算逻辑完全符合预期:
- 角度转弧度:
a = 90 * π / 180 = π/2 sin1 = sin(3π - 2a) = sin(3π - π) = sin(2π) = 0,因此X = 2 * 0² = 0cos1 = cos(5π - 2a) = cos(5π - π) = cos(4π) = 1,因此Y = 1² = 1- 最终
Z = 0 - 1 = -1,和预期结果完全一致。
修正后的完整代码
#define _CRT_SECURE_NO_WARNINGS #define _USE_MATH_DEFINES #include <iostream> #include <conio.h> #include <cmath> using namespace std; int main() { const double pi = M_PI; double Z, a, sin1, cos1, X, Y; printf("%s", "Input a = "); scanf("%lf", &a); // 格式符修改为%lf,适配double类型输入 a = a * pi / 180; sin1 = sin(3 * pi - 2 * a); X = (sin1 * sin1)*2; cos1 = cos(5 * pi - 2 * a); Y = cos1 * cos1; Z = X - Y; printf("Z = %g\n\n", Z); _getch(); return 0; }
可选优化建议
- 可替换
scanf/printf为C++标准的cin/cout,不需要手动匹配格式符,可避免同类问题 - 现有代码中
_USE_MATH_DEFINES、_CRT_SECURE_NO_WARNINGS宏定义的放置顺序是正确的,无需调整。
内容的提问来源于stack exchange,提问作者arcend
相关产品推荐
相关产品推荐

