#include<stdio.h>
#include<math.h>
struct num{
double a;
double b;
};
int main(){
struct num c[10];
scanf("%lf%lf%lf%lf",&c[1].a,&c[1].b,&c[2].a,&c[2].b);
c[3].a=c[1].a+c[2].a;
c[3].b=c[1].b+c[2].b;
c[4].a=c[1].a-c[2].a;
c[4].b=c[1].b-c[2].b;
c[5].a=c[1].ac[2].a-c[1].bc[2].b;
c[5].b=c[1].ac[2].b+c[1].bc[2].a;
c[6].a=((c[1].a)(c[2].a)+(c[1].b)(c[2].b))/((c[2].a)(c[2].a)+c[2].bc[2].b);
c[6].b=(c[1].bc[2].a-c[1].ac[2].b)/(c[2].ac[2].a+c[2].bc[2].b);
//输出时候还要考虑到保留一位小数后为0则也算0,
//假如虚部为负,中间的+号不能加
//换行要输完换
//abs是整数绝对值,fabs才是浮点数绝对值!
//注意,输出的算式中的±都要判断过后面那个数的正负的,这也正是这道题目代码复杂并且重复率高的原因
//不知道有没有好的方法解决这个问题。
//注意,当输出的东西多了以后,相似度哪怕有0.95+也可能有很大的地方出错,毕竟基数大了
if(c[1].b>0&&c[2].b>0)
printf("(%.1f+%.1fi) + (%.1f+%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else if(c[1].b<0&&c[2].b>0)
printf(”(%.1f%.1fi) + (%.1f+%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else if(c[1].b>0&&c[2].b<0)
printf(”(%.1f+%.1fi) + (%.1f%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else if(c[1].b<0&&c[2].b<0)
printf(”(%.1f%.1fi) + (%.1f%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
if(fabs(c[3].a)<0.05&&fabs(c[3].b)<0.05) //注意可以用这种方式来判断四舍五入后是否为0.
printf(“0.0”);
if(fabs(c[3].a)>=0.05)
printf(”%.1f",c[3].a);
if(fabs(c[3].a)>=0.05&&c[3].b>0&&fabs(c[3].b)>=0.05)
printf("+");
if(fabs(c[3].b)>=0.05)
printf("%.1fi",c[3].b);
printf("\n");
if(c[1].b>0&&c[2].b>0)
printf("(%.1f+%.1fi) - (%.1f+%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else if(c[1].b<0&&c[2].b>0)
printf(”(%.1f%.1fi) - (%.1f+%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else if(c[1].b>0&&c[2].b<0)
printf(”(%.1f+%.1fi) - (%.1f%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else
printf(”(%.1f%.1fi) - (%.1f%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
if(fabs(c[4].a)<0.05&&fabs(c[4].b)<0.05)
printf(“0.0”);
if(fabs(c[4].a)>=0.05)
printf(”%.1f",c[4].a);
if(fabs(c[4].a)>=0.05&&c[4].b>0&&fabs(c[4].b)>=0.05)//一开始忘了这里,因为要保证后者不约等于0且为正数
printf("+") ;
if(fabs(c[4].b)>=0.05)
printf("%.1fi",c[4].b);
printf("\n");
if(c[1].b>0&&c[2].b>0)
printf("(%.1f+%.1fi) * (%.1f+%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else if(c[1].b<0&&c[2].b>0)
printf(”(%.1f%.1fi) * (%.1f+%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else if(c[1].b>0&&c[2].b<0)
printf(”(%.1f+%.1fi) * (%.1f%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else
printf(”(%.1f%.1fi) * (%.1f%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
if(fabs(c[5].a)<0.05&&fabs(c[5].b)<0.05)
printf(“0.0”);
if(fabs(c[5].a)>=0.05)
printf(”%.1f",c[5].a);
if(fabs(c[5].a)>=0.05&&c[5].b>0&&fabs(c[5].b)>=0.05)
printf("+") ;
if(fabs(c[5].b)>=0.05)
printf("%.1fi",c[5].b);
printf("\n");
if(c[1].b>0&&c[2].b>0)
printf("(%.1f+%.1fi) / (%.1f+%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else if(c[1].b<0&&c[2].b>0)
printf(”(%.1f%.1fi) / (%.1f+%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else if(c[1].b>0&&c[2].b<0)
printf(”(%.1f+%.1fi) / (%.1f%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
else
printf(”(%.1f%.1fi) / (%.1f%.1fi) = “,c[1].a,c[1].b,c[2].a,c[2].b);
if(fabs(c[6].a)<0.05&&fabs(c[6].b)<0.05)
printf(“0.0”);
if(fabs(c[6].a)>=0.05)
printf(”%.1f",c[6].a);
if(fabs(c[6].a)>=0.05&&c[6].b>0&&fabs(c[6].b)>=0.05)
printf("+") ;
if(fabs(c[6].b)>=0.05)
printf("%.1fi",c[6].b);
printf("\n");
return 0;
}
数据结构输出两个复数的四则运算
最新推荐文章于 2023-04-19 22:55:08 发布