如何在C语言中处理复数?我看到有一个complex.h头文件,但它没有给我多少关于如何使用它的信息.如何有效地访问实部和虚部?是否有本机函数来获取模块和阶段?

推荐答案

这段代码将对您有所帮助,而且它相当不言自明:

#include <stdio.h>      /* Standard Library of Input and Output */
#include <complex.h>    /* Standard Library of Complex Numbers */

int main() {

    double complex z1 = 1.0 + 3.0 * I;
    double complex z2 = 1.0 - 4.0 * I;

    printf("Working with complex numbers:\n\v");

    printf("Starting values: Z1 = %.2f + %.2fi\tZ2 = %.2f %+.2fi\n", creal(z1), cimag(z1), creal(z2), cimag(z2));

    double complex sum = z1 + z2;
    printf("The sum: Z1 + Z2 = %.2f %+.2fi\n", creal(sum), cimag(sum));

    double complex difference = z1 - z2;
    printf("The difference: Z1 - Z2 = %.2f %+.2fi\n", creal(difference), cimag(difference));

    double complex product = z1 * z2;
    printf("The product: Z1 x Z2 = %.2f %+.2fi\n", creal(product), cimag(product));

    double complex quotient = z1 / z2;
    printf("The quotient: Z1 / Z2 = %.2f %+.2fi\n", creal(quotient), cimag(quotient));

    double complex conjugate = conj(z1);
    printf("The conjugate of Z1 = %.2f %+.2fi\n", creal(conjugate), cimag(conjugate));

    return 0;
}

  with:

100:获得真实部分(对于浮动crealf(z1),对于长双creall(z1))

100:获取虚部(对于浮点cimagf(z1),对于长双精度cimagl(z1))

处理复数时需要记住的另一个要点是,像cos()exp()sqrt()这样的函数必须替换为它们的复数形式,例如ccos()cexp()csqrt().

C++相关问答推荐

当包含头文件时,gcc会发出隐式函数声明警告

GCC预处理宏和#杂注GCC展开

整型文字后缀在左移中的用途

Flose()在Docker容器中抛出段错误

为什么将函数名括在括号中会禁用隐式声明?

为什么我可以在GCC的标签后声明变量,但不能声明Clang?

如何按顺序将所有CSV文件数据读入 struct 数组?

编译器如何处理具有更复杂值的枚举?

如何使用libgpio(d)为Raspberry Pi编译C程序?

-Wnonnull-Compare警告不是具有误导性吗?

为什么WcrTomb只支持ASCII?

当我用scanf(&Q;%S%S%S&Q;,单词0,单词1,单词2)输入多个单词时,除了最后一个单词外,每个单词的第一个字符都丢失了

具有正确标头的C struct 定义问题

为什么二进制文件的大小不会随着静态数据的大小而增加?

某些EAX值的不同调用方的CPUID结果不一致

关于不同C编译器中的__attribute__支持

模仿 memmove 的行为

传递参数:C 和 C++ 中 array 与 *&array 和 &array[0] 的区别

为什么创建局部变量的指针需要过程在堆栈上分配空间?

仅使用其内存地址取消引用 C 中的 struct