PTA 7-36 复数四则运算(详解)
前言:本期是關于復數四則運算的具體解法,今天你c了嗎?
?
題目:
本題要求編寫程序,計算2個復數的和、差、積、商。
輸入格式:
輸入在一行中按照a1 b1 a2 b2的格式給出2個復數C1=a1+b1i和C2=a2+b2i的實部和虛部。題目保證C2不為0。
輸出格式:
分別在4行中按照(a1+b1i) 運算符 (a2+b2i) = 結果的格式順序輸出2個復數的和、差、積、商,數字精確到小數點后1位。如果結果的實部或者虛部為0,則不輸出。如果結果為0,則輸出0.0。
輸入樣例1:
2 3.08 -2.04 5.06輸出樣例1:
(2.0+3.1i) + (-2.0+5.1i) = 8.1i (2.0+3.1i) - (-2.0+5.1i) = 4.0-2.0i (2.0+3.1i) * (-2.0+5.1i) = -19.7+3.8i (2.0+3.1i) / (-2.0+5.1i) = 0.4-0.6i輸入樣例2:
1 1 -1 -1.01輸出樣例2:
(1.0+1.0i) + (-1.0-1.0i) = 0.0 (1.0+1.0i) - (-1.0-1.0i) = 2.0+2.0i (1.0+1.0i) * (-1.0-1.0i) = -2.0i (1.0+1.0i) / (-1.0-1.0i) = -1.0?代碼實現:
#include<stdio.h> #include<math.h> int main() {double a1 = 0.0;double b1 = 0.0;double a2 = 0.0;double b2 = 0.0;scanf("%lf %lf %lf %lf", &a1, &b1, &a2, &b2);char ch[10] = { '+','-', '*','/' };double real[4] = { 0 };double image[4] = { 0 };//+-*/的結果的實部分別存入real數組中real[0] = a1 + a2;real[1] = a1 - a2;real[2] = a1 * a2 - b1 * b2;real[3] = (a1 * a2 + b1 * b2) / (pow(a2, 2) + pow(b2, 2));//+-*/ 的結果的虛部分別存入real數組中image[0] = b1 + b2;image[1] = b1 - b2;image[2] = a1 * b2 + a2 * b1;image[3] = (a2 * b1 - a1 * b2) / (pow(a2, 2) + pow(b2, 2));//打印int i = 0;for (i = 0; i < 4; i++){//實部虛部都無if (fabs(real[i]) < 0.05 && fabs(image[i]) < 0.05){printf("(%.1f%+.1fi) %c (%.1f%+.1fi) = 0.0\n", a1, b1, ch[i], a2, b2);}//只有實部else if (fabs(image[i]) < 0.05){printf("(%.1f%+.1fi) %c (%.1f%+.1fi) = %.1f\n", a1, b1, ch[i], a2, b2,real[i]);}//只有虛部else if (fabs(real[i]) < 0.05){printf("(%.1f%+.1fi) %c (%.1f%+.1fi) = %.1fi\n", a1, b1, ch[i], a2, b2, image[i]);}//實部虛部都有else{printf("(%.1f%+.1fi) %c (%.1f%+.1fi) = %.1f%+.1fi\n", a1, b1, ch[i], a2, b2, real[i],image[i]);}}return 0; }大致思路:?
1.加 減 乘 除各自都有自己結果的虛部和實部,將這四個實部集合在一起,四個虛部集合在一起
2.加 減 乘 除各自都有四種不同的結果可能:
a: 結果為0.0, b: 結果只有實部 ,c:結果只有虛部,d:結果的實部虛部都有
代碼解讀:
part 1
double a1 = 0.0;double b1 = 0.0;double a2 = 0.0;double b2 = 0.0;scanf("%lf %lf %lf %lf", &a1, &b1, &a2, &b2);char ch[10] = { '+','-', '*','/' };1. 讀取a1,b1,a2,b2
2.將+ - * / 這四種運算符存入字符數組中(后面的循環打印要用)
part 2?
double real[4] = { 0 };double image[4] = { 0 };//+-*/的結果的實部分別存入real數組中real[0] = a1 + a2;real[1] = a1 - a2;real[2] = a1 * a2 - b1 * b2;real[3] = (a1 * a2 + b1 * b2) / (pow(a2, 2) + pow(b2, 2));//+-*/ 的結果的虛部分別存入real數組中image[0] = b1 + b2;image[1] = b1 - b2;image[2] = a1 * b2 + a2 * b1;image[3] = (a2 * b1 - a1 * b2) / (pow(a2, 2) + pow(b2, 2));1.用real數組存儲+ - * / 運算結果的實部
2.用image數組存儲+ - * / 運算結果的虛部?
tips:
復數的加法運算:實部+實部,虛部+虛部
復數的減法運算:實部-實部,虛部-虛部
復數的乘法運算:(a1+b1i)*(a2+b2i)=a1*a2+a1*b2i+a2*b1i+b1*b2i^2 (就是簡單的相乘)
復數的除法運算:(a1+b1i)/(a2+b2i):這兩個多項式分別乘以第二個多項式的共軛式:(a2-b2i)
pow函數是用于計算某個數的平方
part 3
//打印int i = 0;for (i = 0; i < 4; i++){//實部虛部都無if (fabs(real[i]) < 0.05 && fabs(image[i]) < 0.05){printf("(%.1f%+.1fi) %c (%.1f%+.1fi) = 0.0\n", a1, b1, ch[i], a2, b2);}//只有實部else if (fabs(image[i]) < 0.05){printf("(%.1f%+.1fi) %c (%.1f%+.1fi) = %.1f\n", a1, b1, ch[i], a2, b2,real[i]);}//只有虛部else if (fabs(real[i]) < 0.05){printf("(%.1f%+.1fi) %c (%.1f%+.1fi) = %.1fi\n", a1, b1, ch[i], a2, b2, image[i]);}//實部虛部都有else{printf("(%.1f%+.1fi) %c (%.1f%+.1fi) = %.1f%+.1fi\n", a1, b1, ch[i], a2, b2, real[i],image[i]);}}1. for循環打印+ - * / 的運算式子+結果
2.+ - * / 分別都有四種輸出結果的可能:
a: 結果為0.0, b: 結果只有實部 ,c:結果只有虛部,d:結果的實部虛部都有
用if else 語句就可解決
tips:
%+.1fi: 當這個虛部是正數時,會顯示+,當這個虛部是負數時,會顯示-
本期完!今天你c了嗎?
總結
以上是生活随笔為你收集整理的PTA 7-36 复数四则运算(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沉迷java_Java程序员迷恋游戏不可
- 下一篇: 土建中级工程师考试用书电子版_2018建