Comment les structures peuvent-elles être utilisées pour représenter des nombres complexes

J’ai besoin d’écrire un programme qui utilise des structures pour définir des nombres complexes, à savoir z1 = x + yi. Et ajoute ensuite 2 nombres complexes. Je dois trouver comment les initialiser correctement avant de passer à mon code. J’ai essayé quelques choses jusqu’à présent, c’est le meilleur que j’ai créé et ce n’est pas encore compilé.

Voici une copie de mon code, je dois juste corriger cette partie et ensuite je pourrai faire le rest moi-même.

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

Il y avait plusieurs erreurs dans le fichier, mais peut-être que quelque chose comme ça est plus ce que vous voulez?

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

Ne nommez pas la structure deux fois avec le même nom, et je pense que vous souhaitez ignorer les pointeurs réels1 et imaginaires1, car ils ne vous rapportent rien.

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

Les typedefs complexes disent déjà au compilateur qu’il s’agit d’une structure. Et vous ne pouvez pas avoir deux variables avec le même nom.

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

Vous devez aligner ce que vous envoyez à scanf avec ce à quoi il s’attend. % f s’attend à un double * et non à un double ** ou (float ** dans votre cas).

Votre code a peu de sens:

  • Vous définissez deux structures identiques, ce qui semble inutile.
  • Les structures contiennent des pointeurs sur les flotteurs, plutôt que sur les flotteurs réels, ce qui semble déconseillé.
  • Votre code qui lit de manière flottante à l’aide de scanf() utilise des pointeurs non initialisés pour stocker des valeurs, ce qui conduit à un comportement indéfini.
  • Vous ne devez pas utiliser le spécificateur de format %d pour lire des nombres à virgule flottante, mais des nombres entiers.

Essayer:

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

Je vais vous donner un indice, car cela semble être un problème de devoirs. Les structures sont utilisées pour définir ou regrouper des types de données standard afin de former un nouveau type de données, tel qu’un nombre imaginaire. Une fois défini, vous êtes libre de l’utiliser. On dirait que vous utilisez C, je vais donc y aller. Définissant d’abord le nouveau type:

 struct complex { float real; float imaginary; }; 

En C, pour déclarer un type de structure, vous devez généralement taper à nouveau “struct”, donc la plupart des programmeurs le typent également. Nous pouvons le faire séparément comme ceci:

 typedef complex ComplexType; 

ou combiné:

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

Puis déclarer et assigner:

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

Ou:

 ComplexType myComplexType = { 0.0f, 0.0f }; 

De là, vous êtes libre d’utiliser votre nouveau type. Quelques erreurs dans votre code: vous déclarez deux nouveaux types de données alors qu’il semble que vous n’en avez besoin que d’un seul. L’autre est que vous déclarez le pointeur sur floats, ce qui n’est probablement pas ce dont vous avez besoin. Les pointeurs sont généralement utilisés lorsque vous souhaitez allouer de la mémoire pour le type en tas.