国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > complex.h 以获得更好的体验。

# C 语言标准库头文件 complex.h

请查看 C 语言标准库头文件列表 了解更多相关 API。

这个头文件提供 复数运算 的相关功能,提供了一系列处理复数的类型定义、宏和函数。

复数在数字信号处理、系统控制理论、电路分析、量子力学等数学和工程领域有着广泛的应用。

complex.h 中定义了以下复数类型:

  • float complex - 单精度复数,即实部和虚部是 float 类型

  • double complex - 双精度复数,即实部和虚部是 double 类型

  • long double complex - 长双精度复数,即实部和虚部是 long double 类型

其中虚数单位通过常量 I(大写字母 I)表示。

需要链接数学库,例如在 gcc 中需要添加 -lm 链接选项。

# 示例

#include <stdio.h>
#include <complex.h>  // 复数支持
#include <math.h>     // 数学函数

int main(void) {
    // ========== 1. 复数基础操作 ==========
    double complex z1 = 3.0 + 4.0 * I;  // 3 + 4i
    double complex z2 = 1.0 - 2.0 * I;  // 1 - 2i

    // 算术运算
    double complex sum = z1 + z2;
    double complex product = z1 * z2;
    double complex conjugate = conj(z1);

    printf("基础运算:\n");
    printf("z1 + z2 = %.2f %+.2fi\n", creal(sum), cimag(sum));
    printf("z1 * z2 = %.2f %+.2fi\n", creal(product), cimag(product));
    printf("z1的共轭复数 = %.2f %+.2fi\n\n", creal(conjugate), cimag(conjugate));

    // ========== 2. 工程应用:阻抗计算 ==========
    double R = 5.0;    // 电阻 (Ω)
    double L = 0.1;     // 电感 (H)
    double omega = 50;  // 角频率 (rad/s)
    double complex Z = R + omega * L * I;  // 阻抗 Z = R + jωL

    printf("阻抗计算 (RLC电路):\n");
    printf("Z = %.2f + j%.2f Ω\n", creal(Z), cimag(Z));
    printf("|Z| = %.2f Ω\n", cabs(Z));
    printf("Z 的相位角 = %.2f 度\n\n", carg(Z) * 180 / M_PI);

    // ========== 3. 信号处理:DFT计算 ==========
    double complex signal[] = {1 + 0*I, 0 + 1*I, -1 + 0*I, 0 - 1*I};  // 示例信号
    int N = sizeof(signal) / sizeof(signal[0]);
    double complex freq_component = 0;

    for (int k = 0; k < N; k++) {
        freq_component += signal[k] * cexp(-I * 2 * M_PI * k / N);  // DFT公式
    }

    printf("信号分析 (DFT):\n");
    printf("基频分量 = %.2f %+.2fi\n", creal(freq_component), cimag(freq_component));
    printf("幅值主值 = %.2f, 相位 = %.2f°\n\n", 
           cabs(freq_component), carg(freq_component) * 180 / M_PI);

    // ========== 4. 复数函数应用 ==========
    double complex z = 1.0 + 1.0 * I;
    printf("复数函数:\n");
    printf("e^(1+i) = %.2f %+.2fi\n", creal(cexp(z)), cimag(cexp(z)));
    printf("sqrt(i) = %.2f %+.2fi\n", creal(csqrt(I)), cimag(csqrt(I)));
    printf("sin(iπ/2) = %.2fi\n", cimag(csin(I * M_PI_2)));

    return 0;
}

运行结果:

user@host:~ $ gcc main.c -lm
user@host:~ $ ./a.out
基础运算:
z1 + z2 = 4.00 +2.00i
z1 * z2 = 11.00 -2.00i
z1的共轭复数 = 3.00 -4.00i

阻抗计算 (RLC电路):
Z = 5.00 + j5.00 Ω
|Z| = 7.07 Ω
Z 的相位角 = 45.00 度

信号分析 (DFT):
基频分量 = 4.00 +0.00i
幅值主值 = 4.00, 相位 = 0.00°

复数函数:
e^(1+i) = 1.47 +2.29i
sqrt(i) = 0.71 +0.71i
sin(iπ/2) = 2.30i

# 类型

| 类型 | 标准 | 说明 | | :- | :- | :- | imaginary | C99 | 虚数类型 | complex | C99 | 复数类型

# 常量

| 常量 | 标准 | 说明 | | :- | :- | :- | I | C99 | 虚数单位

# 函数

函数 标准 说明
CMPLX C11 创建 double complex 类型的复数
CMPLXF C11 创建 float complex 类型的复数
CMPLXL C11 创建 long double complex 类型的复数
creal C99 获取 double complex 的实部
crealf C99 获取 float complex 的实部
creall C99 获取 long double complex 的实部
cimag C99 获取 double complex 的虚部
cimagf C99 获取 float complex 的虚部
cimagl C99 获取 long double complex 的虚部
cabs C99 计算 double complex 的绝对值
cabsf C99 计算 float complex 的绝对值
cabsl C99 计算 long double complex 的绝对值
carg C99 计算 double complex 的辐角主值(−π 到 π)
cargf C99 计算 float complex 的辐角主值(−π 到 π)
cargl C99 计算 long double complex 的辐角主值(−π 到 π)
conj C99 计算 double complex 的共轭复数
conjf C99 计算 float complex 的共轭复数
conjl C99 计算 long double complex 的共轭复数
cproj C99 计算 double complex 在黎曼球上的投影
cprojf C99 计算 float complex 在黎曼球上的投影
cprojl C99 计算 long double complex 在黎曼球上的投影
cexp C99 计算 double complex 以自然常数 e 为底的复指数
cexpf C99 计算 float complex 以自然常数 e 为底的复指数
cexpl C99 计算 long double complex 以自然常数 e 为底的复指数
clog C99 计算 double complex 以自然常数 e 为底的对数
clogf C99 计算 float complex 以自然常数 e 为底的对数
clogl C99 计算 long double complex 以自然常数 e 为底的对数
cpow C99 计算 double complex 的幂
cpowf C99 计算 float complex 的幂
cpowl C99 计算 long double complex 的幂
csqrt C99 计算 double complex 的平方根
csqrtf C99 计算 float complex 的平方根
csqrtl C99 计算 long double complex 的平方根
csin C99 计算 double complex 的正弦
csinf C99 计算 float complex 的正弦
csinl C99 计算 long double complex 的正弦
ccos C99 计算 double complex 的余弦
ccosf C99 计算 float complex 的余弦
ccosl C99 计算 long double complex 的余弦
ctan C99 计算 double complex 的正切
ctanf C99 计算 float complex 的正切
ctanl C99 计算 long double complex 的正切
casin C99 计算 double complex 的反正弦
casinf C99 计算 float complex 的反正弦
casinl C99 计算 long double complex 的反正弦
cacos C99 计算 double complex 的反余弦
cacosf C99 计算 float complex 的反余弦
cacosl C99 计算 long double complex 的反余弦
catan C99 计算 double complex 的反正切
catanf C99 计算 float complex 的反正切
catanl C99 计算 long double complex 的反正切
csinh C99 计算 double complex 的双曲正弦
csinhf C99 计算 float complex 的双曲正弦
csinhl C99 计算 long double complex 的双曲正弦
ccosh C99 计算 double complex 的双曲余弦
ccoshf C99 计算 float complex 的双曲余弦
ccoshl C99 计算 long double complex 的双曲余弦
ctanh C99 计算 double complex 的双曲正切
ctanhf C99 计算 float complex 的双曲正切
ctanhl C99 计算 long double complex 的双曲正切
casinh C99 计算 double complex 的双曲反正弦
casinhf C99 计算 float complex 的双曲反正弦
casinhl C99 计算 long double complex 的双曲反正弦
cacosh C99 计算 double complex 的双曲反余弦
cacoshf C99 计算 float complex 的双曲反余弦
cacoshl C99 计算 long double complex 的双曲反余弦
catanh C99 计算 double complex 的双曲反正切
catanhf C99 计算 float complex 的双曲反正切
catanhl C99 计算 long double complex 的双曲反正切

# 推荐阅读

本文 更新于: 2025-11-27 09:38:06 创建于: 2025-11-27 09:38:06