C语言 <complex.h> 标准库详解
编程小白也能理解的复数运算指南
实部 (Real)
虚部 (Imaginary)
📚 什么是复数?
复数就像是数学中的”超级数字”,它由两部分组成:
- 实部(Real) – 就像普通数字的一部分
- 虚部(Imaginary) – 带有一个特殊单位 i 的部分,其中 i² = -1
例如:3 + 4i 就是一个复数,其中3是实部,4是虚部系数。
#include <complex.h>
double complex z = 3.0 + 4.0 * I;
double complex z = 3.0 + 4.0 * I;
注意: 在C语言中,复数类型是
double complex
、float complex
或 long double complex
,其中 I
表示虚数单位 i。
🔧 核心宏定义
<complex.h>
提供了几个重要的宏:
#define complex _Complex // 定义complex关键字
#define I _Complex_I // 虚数单位 i
#define imaginary _Imaginary // 虚数类型(可选)
#define I _Complex_I // 虚数单位 i
#define imaginary _Imaginary // 虚数类型(可选)
使用示例:
#include <complex.h>
#include <stdio.h>
int main() {
double complex z1 = 1.2 + 3.4 * I; // 创建复数
double complex z2 = conj(z1); // 计算共轭复数
printf(“z1 = %.1f%+.1fi\n”, creal(z1), cimag(z1));
printf(“z2 = %.1f%+.1fi\n”, creal(z2), cimag(z2));
return 0;
}
#include <stdio.h>
int main() {
double complex z1 = 1.2 + 3.4 * I; // 创建复数
double complex z2 = conj(z1); // 计算共轭复数
printf(“z1 = %.1f%+.1fi\n”, creal(z1), cimag(z1));
printf(“z2 = %.1f%+.1fi\n”, creal(z2), cimag(z2));
return 0;
}
🔍 复数基本操作
这些函数用于获取复数的基本属性:
double creal(double complex z); // 获取实部
double cimag(double complex z); // 获取虚部
double cabs(double complex z); // 计算模(长度)
double carg(double complex z); // 计算辐角(角度)
double complex conj(double complex z); // 计算共轭
double cimag(double complex z); // 获取虚部
double cabs(double complex z); // 计算模(长度)
double carg(double complex z); // 计算辐角(角度)
double complex conj(double complex z); // 计算共轭
使用示例:
double complex z = 3.0 + 4.0 * I;
double real_part = creal(z); // 3.0
double imag_part = cimag(z); // 4.0
double magnitude = cabs(z); // 5.0 (勾股定理)
double angle = carg(z); // 0.927弧度
double complex conjugate = conj(z); // 3.0 – 4.0i
double real_part = creal(z); // 3.0
double imag_part = cimag(z); // 4.0
double magnitude = cabs(z); // 5.0 (勾股定理)
double angle = carg(z); // 0.927弧度
double complex conjugate = conj(z); // 3.0 – 4.0i
🧮 复数数学函数
<complex.h>
提供了一套完整的复数数学函数:
cexp()
– 指数函数 e^zclog()
– 自然对数cpow()
– 幂函数 z^powercsqrt()
– 平方根csin()
– 正弦函数ccos()
– 余弦函数ctan()
– 正切函数casin()
– 反正弦函数cacos()
– 反余弦函数catan()
– 反正切函数csinh()
– 双曲正弦ccosh()
– 双曲余弦ctanh()
– 双曲正切
指数函数示例:
double complex z = 0.0 + 1.0 * I; // i
double complex res = cexp(z); // 计算 e^i
// 结果近似为 0.540 + 0.841i (欧拉公式)
double complex res = cexp(z); // 计算 e^i
// 结果近似为 0.540 + 0.841i (欧拉公式)
🔄 复数的算术运算
复数支持所有基本算术运算符,就像普通数字一样:
double complex a = 1.0 + 2.0 * I;
double complex b = 3.0 + 4.0 * I;
double complex sum = a + b; // (4.0 + 6.0i)
double complex diff = a – b; // (-2.0 – 2.0i)
double complex product = a * b; // (1*3 – 2*4) + (1*4 + 2*3)i = -5.0 + 10.0i
double complex quotient = a / b; // 使用公式计算除法
double complex b = 3.0 + 4.0 * I;
double complex sum = a + b; // (4.0 + 6.0i)
double complex diff = a – b; // (-2.0 – 2.0i)
double complex product = a * b; // (1*3 – 2*4) + (1*4 + 2*3)i = -5.0 + 10.0i
double complex quotient = a / b; // 使用公式计算除法
除法公式:
对于两个复数 a+bi 除以 c+di:
(a+bi) / (c+di) = [(a+bi)(c-di)] / (c²+d²)
= [(ac+bd) + (bc-ad)i] / (c²+d²)
= [(ac+bd) + (bc-ad)i] / (c²+d²)
💡 关键知识点总结
- 复数包含实部和虚部两部分
- 使用
double complex z = real + imag * I;
创建复数 creal()
和cimag()
获取实部和虚部cabs()
计算复数的模(长度)carg()
计算复数的辐角(角度)conj()
计算复数的共轭(虚部取反)- 复数支持所有算术运算:+、-、*、/
- 复数数学函数(如
csin()
、cexp()
)处理复数运算 - 在工程和科学计算中广泛使用(信号处理、量子力学等)
重要提示: 复数运算可能会产生NaN(非数字)或无穷大结果,特别是在计算复数的对数或负实数的平方根时。