解题思路:
关键在于四舍五入和输出处理
#include<stdio.h>
struct num
{
double a;
double b;
}num;
void print(double a1, double a2)
{
if(a2 < 0)
printf("(%.1lf%.1lfi)", a1, a2);
else
printf("(%.1lf+%.1lfi)", a1, a2);
}
void printf_sum(double c1, double c2)
{
//c1 is real part. c2 is imag part
if(c2 < 0.05 && c2 > -0.05)
printf("%.1lf", c1);
else if(c1 < 0.05 && c1 > -0.05)
printf("%.1lfi", c2);
else if(c2 < 0)
printf("%.1lf%.1lfi", c1, c2);
else
printf("%.1lf+%.1lfi", c1, c2);
printf("\n");
}
int main(void)
{
struct num t[2];
double c1, c2 = 0.0;
scanf("%lf %lf %lf %lf", &t[0].a, &t[0].b, &t[1].a, &t[1].b);
//+
c1 = t[0].a + t[1].a;
c2 = t[0].b + t[1].b;
print(t[0].a, t[0].b);
printf(" + ");
print(t[1].a, t[1].b);
printf(" = ");
printf_sum(c1, c2);
//-
c1 = t[0].a - t[1].a;
c2 = t[0].b - t[1].b;
print(t[0].a, t[0].b);
printf(" - ");
print(t[1].a, t[1].b);
printf(" = ");
printf_sum(c1, c2);
//*
c1 = t[0].a * t[1].a - t[0].b * t[1].b;
c2 = t[0].b * t[1].a + t[0].a * t[1].b;
print(t[0].a, t[0].b);
printf(" * ");
print(t[1].a, t[1].b);
printf(" = ");
printf_sum(c1, c2);
// /
c1 = (t[0].a * t[1].a + t[0].b * t[1].b) / (t[1].a * t[1].a + t[1].b * t[1].b);
c2 = (t[0].b * t[1].a - t[0].a * t[1].b) / (t[1].a * t[1].a + t[1].b * t[1].b);
print(t[0].a, t[0].b);
printf(" / ");
print(t[1].a, t[1].b);
printf(" = ");
printf_sum(c1, c2);
return 0;
}