如何使用结构来表示复数

我需要编写一个程序,它使用结构来定义复数,即z1 = x + yi。 然后添加2个复数。 在继续使用我的代码之前,我需要弄清楚如何正确地使用它们。 到目前为止,我已经尝试了一些东西,这是我提出的最好的东西,它仍然没有编译。

这是我的代码的副本,我只需要修复这部分,然后我就可以自己做其余的事了。

#include typedef struct complex1{ float *real1; float *imaginary1; } complex1; typedef struct complex2{ float *real2; float *imaginary2; } complex2; int main(){ struct complex1 real; struct complex1 *realptr; struct complex1 imaginary; struct complex1 *imaginaryptr; struct complex2 real; struct complex2 *realptr; struct complex2 imaginary; struct complex2 *imaginaryptr; printf("Please enter variable x1."); scanf("%d", &real.real1); printf("Please enter variable y1."); scanf("%d", &imaginary.imaginary1); printf("Please enter variable x2."); scanf("%d", &real.real2); printf("Please enter variable y2."); scanf("%d", &imaginary.imaginary2); printf("You have entered: %d,%d,%d,%d\n", real.real1, imaginary.imaginary1,real.real2, imaginary.imagnary2); return 0; } 

文件中有多个错误,但是这样的东西可能更符合您的要求?

 #include typedef struct _complex1{ double real1; double imaginary1; } complex1; 

不要使用相同的名称两次命名结构,我相信你想跳过real1和imaginary1的指针 – 因为它们没有获得任何东西。

 int main(){ complex1 real; complex1 *realptr; complex1 imaginary; complex1 *imaginaryptr; complex2 real2; complex2 *realptr2; complex2 imaginary2; complex2 *imaginaryptr2; 

复杂的typedef已告诉编译器它是一个struct。 而且你不能有两个同名的变量。

  printf("Please enter variable x1."); scanf("%lf", &real.real1); 

您需要将发送到scanf的内容与预期的内容对齐。 %f需要一个double *而不是double **或(在你的情况下为float **)。

你的代码没什么意义:

  • 你正在定义两个相同的结构,这似乎毫无意义。
  • 结构包含指向浮点数的指针 ,而不是实际的浮点数,这似乎是不明智的。
  • 使用scanf()读入浮点数的代码使用非初始化指针来存储值,这会导致未定义的行为。
  • 您不应该使用%d格式说明符来读取浮点数,它是整数。

尝试:

 typedef struct { float real; float imaginary; } complex; complex a, b; scanf("%f", &a.real); scanf("%f", &a.imaginary); 

我会给你一个提示,因为这似乎是一个功课问题。 结构用于将标准数据类型定义或分组在一起以形成新的数据类型,如虚数。 一旦定义,您可以自由使用它。 看起来你正在使用C所以我会继续使用它。 首先定义新类型:

 struct complex { float real; float imaginary; }; 

在C中,要声明一个struct类型,你通常必须再次输入“struct”,所以大多数程序员也会键入def。 我们可以像这样单独做:

 typedef complex ComplexType; 

或组合:

 typedef struct complex { float real; float imaginary; } ComplexType; 

然后申报并分配:

 ComplexType myComplexType; myComplexType.real = 0.5f; myComplexType.imaginary = 0.5f; 

要么:

 ComplexType myComplexType = { 0.0f, 0.0f }; 

从那里你可以自由使用你的新类型。 代码中的一些错误是,当您看起来只需要一个时,就会声明两种新的数据类型。 另一种是你正在声明浮点数的指针,这可能不是你需要的。 当你想为堆中的类型分配内存时,通常使用指针。