C中复杂数字的问题

时间:2017-03-13 16:48:55

标签: c

我有一大段代码(我没写过),它使用了通过结构定义的复数。我需要编辑它并简单地将一个复数乘以一个实数,但似乎无法正确。我一直收到以下错误消息。

error: invalid operands to binary * (have ‘cplx’ and ‘double’)

我知道这可以使用complex.h库来完成,但这意味着要进行大量的重写,那么有更简单的方法吗?下面的代码重现了我的问题。

#include <stdio.h>
#include <math.h>

typedef struct cplxS {
    double re;
    double im;
} cplx;

int main()
{   
    double a = 1.3;
    cplx b = {1, 2};
    c = a * b;
}

2 个答案:

答案 0 :(得分:1)

您首先必须使用malloc

初始化节点
 #include <stdlib.c>

 int main(){   
    double a = 1.3;

    //initialize struct
    struct cplxS* b = malloc(sizeof(struct cplxS));

    //set values for b
    b->re = 1;
    b->im = 2;

    //preform your multiplication
    double c = a*(b->re); //value c with re
    double d = a*(b->im); //value d with im

    //free node memory 
    free(b);
    b = NULL;
}

如果要通过将c乘以其值来更新结构,则它将遵循

 #include <stdlib.c>

 int main(){   
    double a = 1.3;

    //initialize struct
    struct cplxS* b = malloc(sizeof(struct cplxS));

    //set values for b
    b->re = 1;
    b->im = 2;

    //preform your multiplication
    b->re = a*(b->re); //update b with a*re
    b->im = a*(b->im); //value b with a*im

    //free node memory 
    free(b);
    b = NULL;
}

希望这有帮助!

答案 1 :(得分:0)

您需要将double转换为复数,并使用复数乘法函数(可能存在,或者可以/应该通过重载*运算符来编写)

int main()
{   
    double a = 1.3;
    cplx a_c = {1.3, 0}
    cplx b = {1, 2};
    c = a_c * b;
}

或实际执行乘法,或者通过构建实数和复数的乘法定义(未显示),或者只是自己做。

int main()
{   
    double a = 1.3;
    cplx b = {1, 2};
    cplx c = {b.re*a, b.im*a};
}