题目

从标准输入读入一个角度数值(以度 degree 为单位),将其转换为弧度(radian),并计算其正弦与余弦值;比对度数版函数(sind/cosd)与弧度版函数(sin/cos)的计算结果。

输入格式:一行输入一个浮点数表示角度(度)。

输出格式:分行输出转换弧度、弧度三角函数计算值、度数三角函数计算值。

数据范围与约定:-3600 ≤ deg ≤ 3600。

思路与算法

1. 弧度制与角度制转换
转换常数公式:$\text{rad} = \text{deg} \times \frac{\pi}{180}$;$\text{deg} = \text{rad} \times \frac{180}{\pi}$。

2. Octave 度数专用函数
在 Octave / MATLAB 中,直接提供以度为单位的三角函数族:sind、cosd、tand。它们针对诸如 90 度、180 度的特殊角做了精确的零点补偿,而 sin(pi) 往往会因为浮点表示带有 1.22e-16 级别的残留微小量。

3. 数值精度差异
通过实际对比 sin(deg2rad) 与 sind(deg),能够清晰展示浮点舍入差异。

完整程序

% Octave / MATLAB 第8题:弧度与角度互转及三角函数
[deg, count] = scanf("%f", 1);

if count < 1
    fprintf("错误:请输入角度数值。\n");
    return;
end

% 转换弧度
rad = deg * (pi / 180.0);

% 弧度制函数计算
s_rad = sin(rad);
c_rad = cos(rad);

% 专用度数制函数计算 (自动处理特殊角零点)
s_deg = sind(deg);
c_deg = cosd(deg);

fprintf("输入角度: %.2f deg\n", deg);
fprintf("对应弧度: %.6f rad\n", rad);
fprintf("sin(rad): %.6f | sind(deg): %.6f\n", s_rad, s_deg);
fprintf("cos(rad): %.6f | cos(deg): %.6f\n", c_rad, c_deg);

运行示例

示例 1:

输入:

90

输出:

输入角度: 90.00 deg
对应弧度: 1.570796 rad
sin(rad): 1.000000 | sind(deg): 1.000000
cos(rad): 0.000000 | cos(deg): 0.000000

示例 2:

输入:

180

输出:

输入角度: 180.00 deg
对应弧度: 3.141593 rad
sin(rad): 0.000000 | sind(deg): 0.000000
cos(rad): -1.000000 | cos(deg): -1.000000