日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1051. 复数乘法 (15)

發(fā)布時間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1051. 复数乘法 (15) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


復數(shù)可以寫成(A + Bi)的常規(guī)形式,其中A是實部,B是虛部,i是虛數(shù)單位,滿足i2 = -1;也可以寫成極坐標下的指數(shù)形式(R*e(Pi)),其中R是復數(shù)模,P是輻角,i是虛數(shù)單位,其等價于三角形式(R(cos(P) + isin(P))。

現(xiàn)給定兩個復數(shù)的R和P,要求輸出兩數(shù)乘積的常規(guī)形式。

輸入格式:

輸入在一行中依次給出兩個復數(shù)的R1, P1, R2, P2,數(shù)字間以空格分隔。

輸出格式:

在一行中按照“A+Bi”的格式輸出兩數(shù)乘積的常規(guī)形式,實部和虛部均保留2位小數(shù)。注意:如果B是負數(shù),則應該寫成“A-|B|i”的形式。
輸入樣例:

2.3 3.5 5.2 0.4

輸出樣例:

-8.68-8.23i



錯誤代碼:

/*************************************************************************> File Name: 1051.c> Author: YueBo > Function:復數(shù)乘法> Created Time: 2016年11月23日 星期三 22時16分44秒************************************************************************/#include <stdio.h> #include <math.h>float myRound(float x) {float val = 0.0;if (x >= 0) {val = x * 1000 + 5;} else {val = x * 1000 - 5;}val = (int)(val / 10);val = val / 100.0;return val; }int main() {float R1, P1, R2, P2, R3, P3;float temp1 = 0.0, temp2 = 0.0;scanf("%f%f%f%f", &R1, &P1, &R2, &P2);R3 = R1 * R2;P3 = P1 + P2;temp1 = myRound(R3*sin(P3));temp2 = myRound(R3*cos(P3));if (temp1 >= 0) {printf("%.2f+%.2fi", temp2, temp1);} else {printf("%.2f%.2fi", temp2, temp1);}return 0; }
錯誤提示:

錯誤原因:

總有一個測試數(shù)據(jù)過不去,感覺怪異的不得了,怎么檢查都查不出錯誤,后來查看別人的代碼發(fā)現(xiàn)是自己數(shù)據(jù)類型用錯啦,由于float的精度在中間結果中可能會出錯,譬如說0.000000003 × 10000000 == 0,這樣的錯誤,因為float是8位有效數(shù)字,double是16位有效數(shù)字,很明顯把上面所有的float改成double就OK啦?,由此發(fā)現(xiàn),對于科學計算,一定要用double及精度在之之上的數(shù)據(jù)類型。

正確代碼

#include <stdio.h> #include <math.h>double myRound(double x) {double val = 0.0;if (x >= 0) {val = x * 1000 + 5;} else {val = x * 1000 - 5;}val = (int)(val / 10);val = val / 100.0;return val; }int main() {double R1, P1, R2, P2, R3, P3;double temp1 = 0.0, temp2 = 0.0;scanf("%lf%lf%lf%lf", &R1, &P1, &R2, &P2);R3 = R1 * R2;P3 = P1 + P2;temp1 = myRound(R3*sin(P3));temp2 = myRound(R3*cos(P3));if (temp1 >= 0) {printf("%.2f+%.2fi", temp2, temp1);} else {printf("%.2f%.2fi", temp2, temp1);}return 0; }
之所以自己寫一個四舍五入的函數(shù)而不用printf自動進行四舍五入是因為,printf("%.2f", -0.0002);結果為-0.00,其實這樣做還是麻煩啦,稍微對printf函數(shù)進行限制一下就OK啦,

代碼如下:

/*************************************************************************> File Name: 1051.c> Author: YueBo > Function:復數(shù)乘法> Created Time: 2016年11月23日 星期三 22時16分44秒************************************************************************/#include <stdio.h> #include <math.h>int main() {double R1, P1, R2, P2, Re, Im;scanf("%lf%lf%lf%lf", &R1, &P1, &R2, &P2);Re = R1 * R2 * cos(P1+P2);Im = R1 * R2 * sin(P1+P2);if (-0.005<Re && Re<0) {printf("0.00");} else {printf("%.2f", Re);}if (-0.005<Im && Im<0) {printf("+0.00i");} else if (Im >= 0) {printf("+%.2fi", Im);} else {printf("%.2fi", Im);}return 0; }

總結

以上是生活随笔為你收集整理的1051. 复数乘法 (15)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。