结构
第7题
本题要求编写程序,计算2个复数的和、差、积、商。
【输入】
输入在一行中按照“a1 b1 a2 b2”的格式给出2个复数C1=a1+b1*i和C2=a2+b2*i的实部和虚部。题目保证C2不为0。
【输出】
分别在4行中按照“(a1+b1i) 运算符(a2+b2i) = 结果”的格式顺序输出2个复数的和、差、积、商,数字精确到小数点后1位。如果结果的实部或者虚部为0,则不输出。如果结果为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<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].a*c[2].a-c[1].b*c[2].b; c[5].b=c[1].a*c[2].b+c[1].b*c[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].b*c[2].b); c[6].b=(c[1].b*c[2].a-c[1].a*c[2].b)/(c[2].a*c[2].a+c[2].b*c[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; }