首页 > 其他分享 >數據結構-複數的四則運算(+ - * /)【C語言描述】

數據結構-複數的四則運算(+ - * /)【C語言描述】

时间:2023-05-07 18:56:33浏览次数:30  
标签:void 數的 數據 Complex 四則 e1 z1 z2 e2

在此感謝小志的合作和幫助~~~~!

在平板上完成的文章輸入,所以沒有簡體字,還請諒解。【我不會拼音,拼音不好】

一 複數的計算公式

若有兩個複數Z1, Z2, 給出它們的四則運算方法:

設Z1 = A + BI

   Z2 = C + DI

加法:

Z1 + Z2 = (A + C) + (B + D)i

減法:

Z1 - Z2 = (A - C) + (B - D)i

乘法:

Z1 * Z2 = (A+Bi) * (C+Di) = (AC - BD) + (BC + AD)i

除法:

Z1 / Z2 = (A + Bi) / (C + Di) = (AC + BD) / (C^2 + D ^2) + ((BC - AD) / (C ^2 + D ^2)) i

二 設計程序以及抽象數據的定義

1. 定義一個Complex的數據結構

Z是用戶決定的複數,需要在鍵盤上輸入

ADT Complex{
數據對象:D={e1,e2|e1,e2∈R}
數據關係:R1={<e1,e2>|e1是複數的實部,e2是複數的虛部}
基本操作:
InitComplex(&Z,v1,v2)
操作結果:構造複數Z,其實部和虛部分別被賦役參數v1和v2的值。
Destroy(&Z)
初始條件:複數已存在。
操作結果:複數Z被銷毀。
GetRealPart(Z,&realPart)
初始條件:複數已存在。
操作結果:用realPart返回複數Z的實部值。
GetImagPart(Z,& imagPart)
初始條件:複數已存在
操作結果:用imagPart返回複數Z的虛部值。
Add(z1,z2,&z_sum)
初始條件:z1,z2是複數。
操作結果:用z_ sum返回兩個複數z1,z2的和值。
Minus(z1,z2,&z_sub)
初始條件:z1,z2是複數。
操作結果:用z_ sub返回兩個複數z1,z2的差值。
Multiply(z1,z2,&z_mul)
初始條件:z1,z2是複數。
操作結果:用z_ mul返回兩個複數z1,z2的積值。
Divide(z1,z2,&z_div)
初始條件:z1,z2是複數。
操作結果:用z_ div返回兩個複數z1,z2的商值。
}

 

 

結構定義完畢,然後根據定義的數據結構僞代碼來完成最終的程序部分。

2. 代碼部分(包含注釋)【可以根據自己的喜好或者是習慣來定義變量名稱】

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 typedef struct Complex             //定义Complex的数据类型 
  5 {
  6     double e1, e2;         //定义复数的实部和虚部 Complex;
  7 };
  8 
  9 
 10 void InitComplex(Complex* z0, double v1, double v2);
 11 void DestoryComplex();
 12 double GetRealPart(Complex z2);
 13 double GetImagPart(Complex z2);//为什么声明两次? 
 14 
 15 //定义进行四则运算的函数
 16 void Add(Complex z1, Complex z2, Complex* z);
 17 void Minus(Complex z1, Complex z2, Complex* z);
 18 void Multiply(Complex z1, Complex z2, Complex* z);
 19 void Divide(Complex z1, Complex z2, Complex* z);
 20 void myprint(Complex* xz, int lenth);
 21 int main()
 22 {
 23     double z1e1, z1e2, z2e1, z2e2;
 24     Complex xz[4];
 25     Complex x;
 26     Complex y;
 27     printf("Now please enter the first complex : \nRealpart: ");
 28     scanf_s("%lf", &z1e1);
 29     printf("Imagpart: ");
 30     scanf_s("%lf", &z1e2);
 31     putchar('\n');
 32     printf("Now you can enter the second complex : \nRealpart: ");
 33     scanf_s("%lf", &z2e1);
 34     printf("Imagpart: ");
 35     scanf_s("%lf", &z2e2);
 36 
 37     InitComplex((Complex*)&x, z1e1, z1e2);   //构造复数,与其和z1链接起来  
 38     InitComplex((Complex*)&y, z2e1, z2e2);
 39 
 40     //调用四则运算函数
 41     Add(x, y, (Complex*)&xz[0]);             //使用数组的第一个元素来进行存储加法结果 
 42     Minus(x, y, (Complex*)&xz[1]);           //使用数组的第二个元素来进行存储减法结果
 43     Multiply(x, y, (Complex*)&xz[2]);        //使用数组的第三个元素来进行存储乘法结果
 44     Divide(x, y, (Complex*)&xz[3]);          //使用数组的第四个元素来进行存储除法结果
 45 
 46     printf("\nThe result is :\n");
 47 
 48     myprint(xz, 4);
 49     DestoryComplex();
 50     return 0;
 51 }
 52 
 53 /*
 54 typedef struct{             //定义Complex的数据类型
 55     double e1, e2;         //定义复数的实部和虚部
 56 }Complex;
 57 */
 58 
 59 void InitComplex(Complex* z0, double v1, double v2)     //构造复数 
 60 {
 61     (*z0).e1 = v1;
 62     (*z0).e2 = v2;
 63 }
 64 
 65 void DestoryComplex()
 66 {
 67     printf("\n系统自动清除内存,数据已被删除。\n");   //销毁数据 
 68 }
 69 
 70 double GetRealPart(Complex z2)                       //得到复数的实部 
 71 {
 72     double* realpart = &z2.e1;                       //储存实部的地址
 73     return *realpart;                                //返回地址的值 
 74 }
 75 
 76 double GetImagPart(Complex z2)                       //得到复数的虚部 
 77 {
 78     double* imagpart = &z2.e2;                       //储存虚部的地址
 79     return *imagpart;                                //返回地址的值 
 80 }
 81 
 82 void Add(Complex z1, Complex z2, Complex* z)
 83 {
 84     (*z).e1 = z1.e1 + z2.e1;
 85     (*z).e2 = z1.e2 + z2.e2;
 86 }
 87 
 88 void Minus(Complex z1, Complex z2, Complex* z)
 89 {
 90     (*z).e1 = z1.e1 - z2.e1;
 91     (*z).e2 = z1.e2 - z2.e2;
 92 }
 93 
 94 void Multiply(Complex z1, Complex z2, Complex* z)
 95 {
 96     (*z).e1 = z1.e1 * z2.e1 - z1.e2 * z2.e2;
 97     (*z).e2 = z1.e2 * z2.e1 + z1.e1 * z2.e2;
 98 }
 99 
100 void Divide(Complex z1, Complex z2, Complex* z)
101 {
102     (*z).e1 = (z1.e1 * z2.e1 + z1.e2 * z2.e2) / (z2.e1 * z2.e1 + z2.e2 * z2.e2);
103     (*z).e2 = (z1.e2 * z2.e1 - z1.e1 * z2.e2) / (z2.e1 * z2.e1 + z2.e2 * z2.e2);
104 }
105 
106 void myprint(Complex* z, int lenth)
107 {
108     for (int i = 0; i < lenth; i++)
109     {
110         if (GetImagPart(z[i]) > 0)
111         {
112             if (GetRealPart(z[i]) == 0)
113             {
114                 printf("%.2fi\n", GetImagPart(z[i]));
115             }
116             else
117             {
118                 printf("%.2fi + %.2fi\n", GetRealPart(z[i]), GetImagPart(z[i]));
119             }
120         }
121         else if (GetImagPart(z[i]) == 0)
122         {
123             printf("%.2f\n", GetRealPart(z[i]));
124         }
125         else if (GetImagPart(z[i]) < 0)
126         {
127             if (GetRealPart(z[i]) == 0)
128             {
129                 printf("%.2fi\n", GetImagPart(z[i]));
130             }
131             else
132             {
133                 printf("%.2f %.2fi\n", GetRealPart(z[i]), GetImagPart(z[i]));
134             }
135         }
136     }
137 }

輸出結果演示:

Now please enter the first complex :
Realpart: 1
Imagpart: 1

Now you can enter the second complex :
Realpart: 1
Imagpart: 1

The result is :
2.00i + 2.00i
0.00
2.00i
1.00

系统自动清除内存,数据已被删除。

标签:void,數的,數據,Complex,四則,e1,z1,z2,e2
From: https://www.cnblogs.com/NoldorFromMiddleEarth/p/17379789.html

相关文章

  • vue動態產生div及v-model數據綁定
    html模板遍歷會涉及到v-model對值的綁定,這里的思路是根據數組中的下標尋找對應行數據<divclass="row"v-for="item,indexinitems"><divclass="col-3">......