在此感謝小志的合作和幫助~~~~!
在平板上完成的文章輸入,所以沒有簡體字,還請諒解。【我不會拼音,拼音不好】
一 複數的計算公式
若有兩個複數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