7-36 複數四則運算 (15 分)
本題我認爲主要是麻煩在了各種的判斷if,else if等的判斷,但是隻要寫一個函數把他都封裝起來,就簡單了很多。
在做這道題是在c語言的課上,沒有集中注意力,靜下心來導致很煩躁,讓他的判斷給搞煩了,但是晚上回宿舍再看題目時,思路就清晰了許多,也就做出來了。
這提示我們編程時要選擇相對安靜的環境,或者自己能夠靜下心來。
#include <stdio.h>
#include <stdlib.h>
//打印相同的部分
void Print_same(double a1,double b1,double a2,double b2,char c);
//打印最後的結果
void Print_result(double res1,double res2);
//對結果進行四捨五入操作
double rounding(double num);
int main()
{
double a1,b1,a2,b2;
// a1 = 2;b1 = 3.08;a2 = -2.04;b2 = 5.06;
scanf("%lf%lf%lf%lf",&a1,&b1,&a2,&b2);
//加法
Print_same(a1,b1,a2,b2,'+');
Print_result(rounding(a1+a2),rounding(b1+b2));
//減法
Print_same(a1,b1,a2,b2,'-');
Print_result(rounding(a1-a2),rounding(b1-b2));
//乘法
Print_same(a1,b1,a2,b2,'*');
Print_result(rounding(a1*a2-b1*b2),rounding(a1*b2+a2*b1));
//除法
Print_same(a1,b1,a2,b2,'/');
Print_result(rounding((a1*a2+b1*b2)/(a2*a2+b2*b2)),rounding((-a1*b2+a2*b1)/(a2*a2+b2*b2)));
return 0;
}
//打印相同的部分
void Print_same(double a1,double b1,double a2,double b2,char c){
if(b1 < 0 && b2 < 0) printf("(%.1lf%.1lfi) %c (%.1lf%.1lfi) = ",a1,b1,c,a2,b2);
else if(b1<0) printf("(%.1lf%.1lfi) %c (%.1lf+%.1lfi) = ",a1,b1,c,a2,b2);
else if(b2<0) printf("(%.1lf+%.1lfi) %c (%.1lf%.1lfi) = ",a1,b1,c,a2,b2);
else printf("(%.1lf+%.1lfi) %c (%.1lf+%.1lfi) = ",a1,b1,c,a2,b2);
}
//打印結果
void Print_result(double res1,double res2){
if(res1 == 0 && res2 == 0) printf("0.0\n");
else if(res1 == 0) printf("%.1lfi\n",res2);
else if(res2 == 0) printf("%.1lf\n",res1);
else if(res2 < 0) printf("%.1lf%.1lfi\n",res1,res2);
else printf("%.1lf+%.1lfi\n",res1,res2);
}
//四捨五入
double rounding(double num)
{
if(num>0) num = (int)(num*10+0.5)/10.0;
else num = (int)(num*10-0.5)/10.0;
return num;
}