You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的C++三角函数计算代码输入a=90时Z应为-1但输出错误,是什么问题?

问题排查与解决方案

核心错误原因

  • 输入格式符不匹配:代码中a声明为double类型,但scanf使用了仅适配float类型的%g格式符,导致输入的数值无法被正确读取到变量a中,后续所有三角函数计算的输入值都是错误的。

预期结果验证(输入a=90时)

当输入正确读取为90时,计算逻辑完全符合预期:

  1. 角度转弧度:a = 90 * π / 180 = π/2
  2. sin1 = sin(3π - 2a) = sin(3π - π) = sin(2π) = 0,因此X = 2 * 0² = 0
  3. cos1 = cos(5π - 2a) = cos(5π - π) = cos(4π) = 1,因此Y = 1² = 1
  4. 最终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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:57:02