版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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;
}