當(dāng)前位置:
首頁 >
#笔记:pta题笔记:注意:double不能直接比较大小!!!///////计算2个复数的和、差、积、商。
發(fā)布時間:2025/3/13
39
豆豆
生活随笔
收集整理的這篇文章主要介紹了
#笔记:pta题笔记:注意:double不能直接比较大小!!!///////计算2个复数的和、差、积、商。
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本題要求編寫程序,計算2個復(fù)數(shù)的和、差、積、商。
輸入格式:
輸入在一行中按照a1 b1 a2 b2的格式給出2個復(fù)數(shù)C1=a1+b1i和C2=a2+b2i的實部和虛部。題目保證C2不為0。
輸出格式:
分別在4行中按照(a1+b1i) 運算符 (a2+b2i) = 結(jié)果的格式順序輸出2個復(fù)數(shù)的和、差、積、商,數(shù)字精確到小數(shù)點后1位。如果結(jié)果的實部或者虛部為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 ``` `` #include<stdio.h> #include<stdlib.h> #include<string.h> //虛數(shù)結(jié)構(gòu)體 struct imaginaryNum {double a;double b; }; typedef struct imaginaryNum cnum; cnum* addition(cnum* c1,cnum* c2);//虛數(shù)加法 cnum* subtraction(cnum* c1,cnum* c2);//虛數(shù)減法 cnum* multiplication(cnum* c1,cnum* c2);//虛數(shù)乘法 cnum* division(cnum* c1,cnum* c2);//虛數(shù)除法 */ //(2.0+3.1i) + (-2.0+5.1i) = 8.1i int main(void) {int ii=0;cnum c1,c2;memset(&c1,0,sizeof(c1));memset(&c2,0,sizeof(c2));cnum* c3=NULL;scanf("%lf %lf %lf %lf",&c1.a,&c1.b,&c2.a,&c2.b);//輸入虛數(shù)for(ii=0;ii<4;ii++){ //打印 算式printf("(%.1lf",c1.a);if(c1.b<0)printf("");else printf("+");printf("%.1lfi)",c1.b);//給出 運算符號,順便利用 已有的函數(shù) 運算switch(ii){case 0:{printf(" + ");c3=addition(&c1,&c2);};break;case 1:{printf(" - ");c3=subtraction(&c1,&c2);};break;case 2:{printf(" * ");c3=multiplication(&c1,&c2);};break;case 3:{printf(" / ");c3=division(&c1,&c2);};break;}printf("(%.1lf",c2.a);if(c2.b<0)printf("");else printf("+");printf("%.1lfi)",c2.b);printf(" = ");if(c3->a>(0-0.1)&&c3->a<(0+0.1)&&c3->b>(0-0.1)&&c3->b<(0+0.1))printf("0.0");else if(!(c3->a>(0-0.1)&&c3->a<(0+0.1)||c3->b>(0-0.1)&&c3->b<(0+0.1))){printf("%.1lf",c3->a);if(c3->b<0)printf("");else printf("+");printf("%.1lfi",c3->b);}else {if(!(c3->a>(0-0.1)&&c3->a<(0+0.1)))printf("%.1lf",c3->a);else printf("%.1lfi",c3->b);}printf("\n");}return 0; } //下面是構(gòu)造的虛數(shù)運算函數(shù) cnum* addition(cnum* c1,cnum* c2) {cnum* c3=(cnum*)malloc(sizeof(cnum));c3->a=c1->a+c2->a;c3->b=c1->b+c2->b;return c3; } cnum* subtraction(cnum* c1,cnum* c2) {cnum* c3=(cnum*)malloc(sizeof(cnum));c3->a=c1->a-c2->a;c3->b=c1->b-c2->b;return c3; } cnum* multiplication(cnum* c1,cnum* c2) {cnum* c3=(cnum*)malloc(sizeof(cnum));c3->a=c1->a*c2->a - c1->b*c2->b;c3->b=c1->a*c2->b + c1->b*c2->a;return c3; } cnum* division(cnum* c1,cnum* c2) {cnum* c3=(cnum*)malloc(sizeof(cnum));c3->a=c1->a*c2->a + c1->b*c2->b;c3->b=-c1->a*c2->b + c1->b*c2->a;c3->a=c3->a/(c2->a*c2->a+c2->b*c2->b);c3->b=c3->b/(c2->a*c2->a+c2->b*c2->b);return c3; }特別注意,題目要求中
如果結(jié)果的實部或者虛部為0,則不輸出。如果結(jié)果為0,則輸出0.0。這個步驟涉及到浮點數(shù)的比較大小的問題,我最開始是直接用==0來處理,但是提交上去一直顯示錯誤,后來想起來浮點數(shù)不能直接比較大小,就讓 c3->a在 -0.01 到 +0.01的范圍內(nèi)就認(rèn)為是0 了(因為 結(jié)果精度為0.1),但是還不對,最后調(diào)整到(+0.1~0.1)認(rèn)為是0,終于提交正確
這個題給我的教訓(xùn)是,再次強調(diào)了 “浮點數(shù)不能直接比較大小這個知識點”
總結(jié)
以上是生活随笔為你收集整理的#笔记:pta题笔记:注意:double不能直接比较大小!!!///////计算2个复数的和、差、积、商。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转载:力扣字符串题atoi
- 下一篇: 原创:pta做题笔记:注意数组大小大一点