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