数据结构-C语言 || 实现复数的四则运算(定义+代码)
生活随笔
收集整理的這篇文章主要介紹了
数据结构-C语言 || 实现复数的四则运算(定义+代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路:
①首先了解復數四則運算——加、減、乘、除;以及分別對應的公式(以a+bi和c+di為例推導);
加/減法:(a+bi)±(c+di)=(a±c)+(b±d)i
乘法:(a+bi)(c+di)=(ac-bd)+(bc+ad)i
除法:
②根據數據結構的定義,自定義數據類型Complex,利用結構體的知識進行構造復數的實部和虛部(此處數據類型采用double類型,以便于浮點數的運算)。
復數的抽象數據類型定義
ADT Complex{ 數據對象:D={e1,e2|e1,e2∈R} 數據關系:R1={<e1,e2>|e1是復數的實部,e2是復數的虛部} 基本操作:InitComplex(&Z,v1,v2)操作結果:構造復數Z,其實部和虛部分別被賦役參數v1和v2的值。Destroy(&Z)初始條件:復數已存在。操作結果:復數Z被銷毀。GetReal(Z,&realPart)初始條件:復數已存在。操作結果:用realPart返回復數Z的實部值。GetImag(Z,& imagPart)初始條件:復數已存在操作結果:用imagPart返回復數Z的虛部值。ADD(z1,z2,&z_sum)初始條件:z1,z2是復數。操作結果:用z_sum返回兩個復數z1,z2的和值。SUM(z1,z2,&z_sub)初始條件:z1,z2是復數。操作結果:用z_sub返回兩個復數z1,z2的差值。MUL(z1,z2,&z_mul)初始條件:z1,z2是復數。操作結果:用z_mul返回兩個復數z1,z2的積值。DIV(z1,z2,&z_div)初始條件:z1,z2是復數。操作結果:用z_div返回兩個復數z1,z2的商值。 }ADT Complex代碼(.h+.c文件)
//complex.h #include<stdio.h> #include<stdlib.h> typedef struct { //自定義complex數據類型double e1, e2; }complex; void InitComplex(complex* z0, double v1, double v2); void DestoryComplex(); double GetReal(complex z2); double GetImag(complex z2);//9_9.c #include<stdio.h> #include"complex.h"void InitComplex(complex* z0, double v1, double v2){ //構造復數的函數z0->e1 = v1;z0->e2 = v2; } void DestoryComplex(){ //銷毀數據的函數printf("\n系統自動清除內存,數據已被銷毀。\n"); } double GetReal(complex z2) { //得到復數的實部double* realpart = &z2.e1;return *realpart; } double GetImag(complex z2) { //得到復數的虛部double* imagpart = &z2.e2;return *imagpart; }void ADD(complex z1, complex z2, complex* z) //復數加法運算 {z->e1 = z1.e1 + z2.e1;z->e2 = z1.e2 + z2.e2; } void SUB(complex z1, complex z2, complex* z) //復數減法運算 {z->e1 = z1.e1 - z2.e1;z->e2 = z1.e2 - z2.e2; } void MUL(complex z1, complex z2, complex* z) //復數乘法運算(以a+bi和c+di計算找出普遍規律) {z->e1 = z1.e1 * z2.e1 - z1.e2 * z2.e2;z->e2 = z1.e2 * z2.e1 + z1.e1 * z2.e2; } void DIV(complex z1, complex z2, complex* z) //復數除法運算 {z->e1 = (z1.e1 * z2.e1 + z1.e2 * z2.e2) / (z2.e1 * z2.e1 + z2.e2 * z2.e2);z->e2 = (z1.e2 * z2.e1 - z1.e1 * z2.e2) / (z2.e1 * z2.e1 + z2.e2 * z2.e2); }int main() {complex z1, z2, z[4]; //z[4]用來儲存四個計算過的值char str[4][16] = { { "SUM 和|| z_sum"},{"SUB 差|| z_sub"},{"MUL 積|| z_mul"},{"DIV 商|| z_div"} }; //為界面優化所設double z1e1, z1e2, z2e1, z2e2;printf("[注]減法和除法默認 第一個數 -/÷第二個數 \n\n ——please enter the first complex.\nRealpart:");scanf_s("%lf", &z1e1);printf("Imagpart:");scanf_s("%lf", &z1e2);printf(" ——please enter the second complex.\nRealpart:");scanf_s("%lf", &z2e1);printf("Imagpart:");scanf_s("%lf", &z2e2);InitComplex(&z1, z1e1, z1e2); //構造復數,把輸入的z1e1(實部)和z1e2(虛部)與z1連接起來InitComplex(&z2, z2e1, z2e2);ADD(z1, z2, &z[0]);//調用函數進行計算SUB(z1, z2, &z[1]);MUL(z1, z2, &z[2]);DIV(z1, z2, &z[3]);printf("\n—Here are the results—\n");//由于正負原因,輸出結果需要對正負進行判斷for (int i = 0; i < 4; i++) {if (GetImag(z[i]) > 0) { //如果虛部大于零,可直接以a+bi的形式輸出if (GetReal(z[i]) == 0) { //實部等于零,省略printf("%s=%lfi\n", str[i], GetImag(z[i]));}else{ //實部大于或等于0,直接輸出printf("%s=%lf+%lfi\n", str[i], GetReal(z[i]), GetImag(z[i]));}}else if (GetImag(z[i]) == 0) { //如果虛部等于零,則虛部省略printf("%s=%lf\n", str[i], GetReal(z[i]));}else if (GetImag(z[i]) < 0) { //如果虛部小于零,此時虛部自帶負號,以abi的形式輸出(b自帶-號)if (GetReal(z[i]) == 0) { //與虛部大于零同理printf("%s=%lfi\n", str[i], GetImag(z[i]));}else {printf("%s=%lf%lfi\n", str[i], GetReal(z[i]), GetImag(z[i]));}}}DestoryComplex(); //提示數據銷毀return 0; }?
?
?
總結
以上是生活随笔為你收集整理的数据结构-C语言 || 实现复数的四则运算(定义+代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大疆SDK-初识MSDK V5
- 下一篇: 工厂必备信息化管理系统——生产管理系统