Как можно использовать структуры для представления комплексных чисел - PullRequest
0 голосов
/ 23 февраля 2011

Мне нужно написать программу, которая использует структуры для определения комплексных чисел, т.е. 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 ]

7 голосов
/ 23 февраля 2011

Ваш код не имеет большого смысла:

  • Вы определяете две идентичные структуры, что кажется бессмысленным.
  • Структуры содержат указатели на с плавающей точкой, а нефактические значения с плавающей точкой, которые кажутся необоснованными.
  • Ваш код, который читает с плавающей точкой с использованием scanf(), использует неинициализированные указатели для хранения значений, что приводит к неопределенному поведению.
  • Вы не должныиспользуйте спецификатор формата %d для чтения чисел с плавающей запятой, для целых чисел.

Попробуйте:

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

complex a, b;

scanf("%f", &a.real);
scanf("%f", &a.imaginary);
4 голосов
/ 23 февраля 2011

В файле было несколько ошибок, но может быть что-то вроде этого больше того, что вы хотите?

#include<stdio.h>

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

Не называйте структуру дважды одним и тем же именем, и я верю, что вы хотите пропуститьуказатели для real1 и imaary1 - поскольку они ничего вам не дают.

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

Сложные определения типов уже сообщают компилятору, что это структура.И вы не можете иметь две переменные с одинаковым именем.

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

Вам необходимо согласовать то, что вы отправляете в scanf, с тем, что он ожидает.% f ожидает двойной *, а не двойной ** или (float ** в вашем случае).

2 голосов
/ 23 февраля 2011

Я дам вам подсказку, так как это похоже на домашнее задание. структуры используются для определения или группировки стандартных типов данных вместе, чтобы сформировать новый тип данных, например, воображаемое число. После того, как определено, вы можете использовать его. Похоже, вы используете 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 };

Оттуда вы можете использовать свой новый тип. Несколько ошибок в вашем коде - вы объявляете два новых типа данных, когда кажется, что вам нужен только один. Другой - вы объявляете указатель на число с плавающей точкой, что, вероятно, не то, что вам нужно. Указатели обычно используются, когда вы хотите выделить память для типа в куче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...