如何使用结构来表示复数

时间:2011-02-23 16:14:51

标签: c

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

这是我的代码的副本,我只需要修复这部分,然后我就可以自己完成剩下的工作了。

#include<stdio.h>

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;
}

3 个答案:

答案 0 :(得分:7)

你的代码毫无意义:

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

尝试:

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

complex a, b;

scanf("%f", &a.real);
scanf("%f", &a.imaginary);

答案 1 :(得分:4)

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

#include<stdio.h>

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 **)。

答案 2 :(得分:2)

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

struct complex 
{
    float real;
    float imaginary;
};

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

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 };

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