题目

从标准输入读入实数 a 与 b,构造复数 z = a + bi,分别计算该复数的共轭复数、实部、虚部、模长(绝对值)以及主幅角(弧度与角度表示)。

输入格式:一行输入两个浮点数 a 和 b,代表复数的实部与虚部。

输出格式:分行输出复数标准式、共轭复数、实部、虚部、模长与主幅角。

数据范围与约定:a, b 属于实数。

思路与算法

1. 复数原生支持
Octave 将复数作为第一等公民原生支持。内置虚数单位为 i 或 j,直接书写 complex(a, b) 或 a + b*1i。使用 1i 语法可避免变量名 i 被局部循环变量覆盖带来的解析混淆。

2. 关键内建函数
real(z) 提取实部,imag(z) 提取虚部,conj(z) 求共轭,abs(z) 求模长 $|z|=\sqrt{a^2+b^2}$,angle(z) 求解主值区间 $(-\pi, \pi]$ 的幅角。

3. 弧度与度数转化
主幅角默认输出弧度值,工程中习惯同时输出角度值:$\text{deg} = \text{rad} \times 180 / \pi$。

完整程序

% Octave / MATLAB 第5题:复数基础运算
[vals, count] = scanf("%f %f", 2);

if count < 2
    fprintf("错误:请输入复数的实部与虚部。\n");
    return;
end

a = vals(1);
b = vals(2);

% 构造复数(使用 1i 防御 i 被当做普通变量)
z = complex(a, b);

re = real(z);
im = imag(z);
mag = abs(z);
rad = angle(z);
deg = rad * (180 / pi);
z_conj = conj(z);

fprintf("复数 z: %.4f %+.4fi\n", re, im);
fprintf("共轭 z*: %.4f %+.4fi\n", real(z_conj), imag(z_conj));
fprintf("实部: %.4f\n", re);
fprintf("虚部: %.4f\n", im);
fprintf("模长: %.4f\n", mag);
fprintf("幅角: %.4f rad (%.2f deg)\n", rad, deg);

运行示例

输入:

3 4

输出:

复数 z: 3.0000 +4.0000i
共轭 z*: 3.0000 -4.0000i
实部: 3.0000
虚部: 4.0000
模长: 5.0000
幅角: 0.9273 rad (53.13 deg)