¿Cómo se pueden usar las estructuras para representar números complejos?

Necesito escribir un progtwig que use estructuras para definir números complejos, es decir, z1 = x + yi. Y luego sum 2 números complejos. Necesito averiguar cómo inicializarlos correctamente antes de continuar con mi código. He intentado algunas cosas hasta ahora, esto es lo mejor que he encontrado y todavía no está comstackndo.

Aquí hay una copia de mi código, solo necesito arreglar esta parte y luego podré hacer el rest yo mismo.

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

Hubo varios errores en el archivo, pero tal vez algo como esto es más de lo que quieres.

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

No nombre la estructura dos veces con el mismo nombre, y creo que quiere omitir los punteros para real1 e imaginary1, ya que no le dan nada.

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

Los typedefs complejos ya le dicen al comstackdor que es una estructura. Y no puedes tener dos variables con el mismo nombre.

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

Debe alinear lo que está enviando a scanf con lo que espera. % f espera un doble * y no un doble ** o (flotante ** en su caso).

Su código tiene poco sentido:

  • Estás definiendo dos estructuras idénticas, lo que parece inútil.
  • Las estructuras contienen punteros a flotadores, en lugar de flotadores reales, lo que parece poco aconsejable.
  • Su código que lee en flotadores usando scanf() está utilizando punteros no inicializados para almacenar valores, lo que lleva a un comportamiento indefinido.
  • No debe usar el especificador de formato %d para leer en números de punto flotante, es para enteros.

Tratar:

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

Te daré una pista, ya que esto parece ser un problema de tarea. Las estructuras se utilizan para definir o agrupar tipos de datos estándar para formar un nuevo tipo de datos, como un número imaginario. Una vez definido, eres libre de usarlo. Parece que estás usando C, así que seguiré con eso. Primero definiendo el nuevo tipo:

 struct complex { float real; float imaginary; }; 

En C, para declarar un tipo de estructura, normalmente tienes que escribir “estructura” de nuevo, así que la mayoría de los progtwigdores también lo teclean. Podemos hacerlo por separado así:

 typedef complex ComplexType; 

o Combinado:

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

Luego declarar y asignar:

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

O:

 ComplexType myComplexType = { 0.0f, 0.0f }; 

A partir de ahí eres libre de usar tu nuevo tipo. Algunos errores en su código son que está declarando dos tipos de datos nuevos cuando parece que solo necesita uno. La otra es que está declarando puntero a flotadores, que probablemente no es lo que necesita. Los punteros se usan generalmente cuando se desea asignar la memoria para el tipo en el montón.