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