复数四则运算
7-5 复数四则运算 (10 分)

暑假自学时刷到过这道题,题目输出格式特别麻烦,当时代码写了五百多行,各种的if-else
这是当时的代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
struct xinxi {
double real;
double imag;
};
int main()
{
struct xinxi a,b;
double real = 0, imag = 0;
scanf("%lf %lf %lf %lf", &a.real, &a.imag, &b.real, &b.imag);
//加法
if (fabs(a.real + b.real) < 0.05)
{
if (fabs(a.imag+b.imag)<0.05)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) + (%.1f+%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
else
{
printf("(%.1f+%.1fi) + (%.1f%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) + (%.1f+%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
else
{
printf("(%.1f%.1fi) + (%.1f%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
}
}
else
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) + (%.1f+%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, a.imag + b.imag);
}
else
{
printf("(%.1f+%.1fi) + (%.1f%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, a.imag + b.imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) + (%.1f+%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, a.imag + b.imag);
}
else
{
printf("(%.1f%.1fi) + (%.1f%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, a.imag + b.imag);
}
}
}
}
else
{
if (fabs(a.imag + b.imag) < 0.05)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) + (%.1f+%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, a.real + b.real);
}
else
{
printf("(%.1f+%.1fi) + (%.1f%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, a.real + b.real);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) + (%.1f+%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, a.real + b.real);
}
else
{
printf("(%.1f%.1fi) + (%.1f%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, a.real + b.real);
}
}
}
else
{
if (a.imag + b.imag >= 0)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) + (%.1f+%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, a.real + b.real, a.imag + b.imag);
}
else
{
printf("(%.1f+%.1fi) + (%.1f%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, a.real + b.real, a.imag + b.imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) + (%.1f+%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, a.real + b.real, a.imag + b.imag);
}
else
{
printf("(%.1f%.1fi) + (%.1f%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, a.real + b.real, a.imag + b.imag);
}
}
}
else
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) + (%.1f+%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, a.real + b.real, a.imag + b.imag);
}
else
{
printf("(%.1f+%.1fi) + (%.1f%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, a.real + b.real, a.imag + b.imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) + (%.1f+%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, a.real + b.real, a.imag + b.imag);
}
else
{
printf("(%.1f%.1fi) + (%.1f%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, a.real + b.real, a.imag + b.imag);
}
}
}
}
}
//减法
if (fabs(a.real - b.real)<0.05)
{
if (fabs(a.imag - b.imag)<0.05)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) - (%.1f+%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
else
{
printf("(%.1f+%.1fi) - (%.1f%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) - (%.1f+%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
else
{
printf("(%.1f%.1fi) - (%.1f%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
}
}
else
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) - (%.1f+%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, a.imag - b.imag);
}
else
{
printf("(%.1f+%.1fi) - (%.1f%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, a.imag - b.imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) - (%.1f+%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, a.imag - b.imag);
}
else
{
printf("(%.1f%.1fi) - (%.1f%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, a.imag - b.imag);
}
}
}
}
else
{
if (fabs(a.imag - b.imag)<0.05)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) - (%.1f+%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, a.real - b.real);
}
else
{
printf("(%.1f+%.1fi) - (%.1f%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, a.real - b.real);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) - (%.1f+%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, a.real - b.real);
}
else
{
printf("(%.1f%.1fi) - (%.1f%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, a.real - b.real);
}
}
}
else
{
if (a.imag - b.imag >= 0)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) - (%.1f+%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, a.real - b.real, a.imag - b.imag);
}
else
{
printf("(%.1f+%.1fi) - (%.1f%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, a.real - b.real, a.imag - b.imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) - (%.1f+%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, a.real - b.real, a.imag - b.imag);
}
else
{
printf("(%.1f%.1fi) - (%.1f%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, a.real - b.real, a.imag - b.imag);
}
}
}
else
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) - (%.1f+%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, a.real - b.real, a.imag - b.imag);
}
else
{
printf("(%.1f+%.1fi) - (%.1f%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, a.real - b.real, a.imag - b.imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) - (%.1f+%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, a.real - b.real, a.imag - b.imag);
}
else
{
printf("(%.1f%.1fi) - (%.1f%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, a.real - b.real, a.imag - b.imag);
}
}
}
}
}
//乘法
real = a.real * b.real - a.imag * b.imag;
imag = a.real * b.imag + a.imag * b.real;
if (fabs(real) <0.05)
{
if (fabs(imag)<0.05)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) * (%.1f+%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
else
{
printf("(%.1f+%.1fi) * (%.1f%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) * (%.1f+%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
else
{
printf("(%.1f%.1fi) * (%.1f%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
}
}
else
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) * (%.1f+%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, imag);
}
else
{
printf("(%.1f+%.1fi) * (%.1f%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) * (%.1f+%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, imag);
}
else
{
printf("(%.1f%.1fi) * (%.1f%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, imag);
}
}
}
}
else
{
if (fabs(imag) < 0.05)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) * (%.1f+%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, real);
}
else
{
printf("(%.1f+%.1fi) * (%.1f%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, real);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) * (%.1f+%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, real);
}
else
{
printf("(%.1f%.1fi) * (%.1f%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, real);
}
}
}
else
{
if (imag > 0)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) * (%.1f+%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
else
{
printf("(%.1f+%.1fi) * (%.1f%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) * (%.1f+%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
else
{
printf("(%.1f%.1fi) * (%.1f%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
}
}
else
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) * (%.1f+%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
else
{
printf("(%.1f+%.1fi) * (%.1f%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) * (%.1f+%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
else
{
printf("(%.1f%.1fi) * (%.1f%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
}
}
}
}
//除法
real = 1.0 * (a.real * b.real + a.imag * b.imag) / (b.real * b.real + b.imag * b.imag);
imag = 1.0 * (a.imag * b.real - a.real * b.imag) / (b.real * b.real + b.imag * b.imag);
if (fabs(real) < 0.05)
{
if (fabs(imag) < 0.05)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) / (%.1f+%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
else
{
printf("(%.1f+%.1fi) / (%.1f%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) / (%.1f+%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
else
{
printf("(%.1f%.1fi) / (%.1f%.1fi) = 0.0\n", a.real, a.imag, b.real, b.imag);
}
}
}
else
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) / (%.1f+%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, imag);
}
else
{
printf("(%.1f+%.1fi) / (%.1f%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) / (%.1f+%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, imag);
}
else
{
printf("(%.1f%.1fi) / (%.1f%.1fi) = %.1fi\n", a.real, a.imag, b.real, b.imag, imag);
}
}
}
}
else
{
if (fabs(imag) < 0.05)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) / (%.1f+%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, real);
}
else
{
printf("(%.1f+%.1fi) / (%.1f%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, real);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) / (%.1f+%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, real);
}
else
{
printf("(%.1f%.1fi) / (%.1f%.1fi) = %.1f\n", a.real, a.imag, b.real, b.imag, real);
}
}
}
else
{
if (imag > 0)
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) / (%.1f+%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
else
{
printf("(%.1f+%.1fi) / (%.1f%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) / (%.1f+%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
else
{
printf("(%.1f%.1fi) / (%.1f%.1fi) = %.1f+%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
}
}
else
{
if (a.imag >= 0)
{
if (b.imag >= 0)
{
printf("(%.1f+%.1fi) / (%.1f+%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
else
{
printf("(%.1f+%.1fi) / (%.1f%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
}
else
{
if (b.imag >= 0)
{
printf("(%.1f%.1fi) / (%.1f+%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
else
{
printf("(%.1f%.1fi) / (%.1f%.1fi) = %.1f%.1fi\n", a.real, a.imag, b.real, b.imag, real, imag);
}
}
}
}
}
return 0;
}
这是现在的代码
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<math.h>
struct xinxi {
double real;
double imag;
};
char op[4] = { '+','-','*','/' };
void put_before(struct xinxi x);
void put_later(struct xinxi x);
struct xinxi add(struct xinxi a, struct xinxi b);
struct xinxi sub(struct xinxi a, struct xinxi b);
struct xinxi mul(struct xinxi a, struct xinxi b);
struct xinxi div(struct xinxi a, struct xinxi b);
int main()
{
struct xinxi a, b,result[4];
int n = 0, i = 0, j = 0;
scanf("%lf %lf %lf %lf", &a.real, &a.imag, &b.real, &b.imag);
result[0] = add(a, b);
result[1] = sub(a, b);
result[2] = mul(a, b);
result[3] = div(a, b);
for (i = 0; i < 4; i++)
{
put_before(a);
printf(" %c ", op[i]);
put_before(b);
printf(" = ");
put_later(result[i]);
}
return 0;
}
void put_before(struct xinxi x)
{
printf("(%.1f%+.1fi)", x.real, x.imag);
}
void put_later(struct xinxi x)
{
if (fabs(x.real) > 0.1)
{
printf("%.1f", x.real);
if (fabs(x.imag) > 0.1)
printf("%+.1fi", x.imag);
}
else if (fabs(x.imag) > 0.1)
{
printf("%.1fi", x.imag);
}
if (fabs(x.real) < 0.1 && fabs(x.imag) < 0.1)
printf("0.0\n");
else printf("\n");
}
struct xinxi add(struct xinxi a, struct xinxi b)
{
struct xinxi c;
c.real = a.real + b.real;
c.imag = a.imag + b.imag;
return c;
}
struct xinxi sub(struct xinxi a, struct xinxi b)
{
struct xinxi c;
c.real = a.real - b.real;
c.imag = a.imag - b.imag;
return c;
}
struct xinxi mul(struct xinxi a, struct xinxi b)
{
struct xinxi c;
c.real = a.real * b.real - a.imag * b.imag;
c.imag = a.real * b.imag + a.imag * b.real;
return c;
}
struct xinxi div(struct xinxi a, struct xinxi b)
{
struct xinxi c;
c.real = 1.0 * (a.real * b.real + a.imag * b.imag) / (b.real * b.real + b.imag * b.imag);
c.imag = 1.0 * (a.imag * b.real - a.real * b.imag) / (b.real * b.real + b.imag * b.imag);
return c;
}
如上

浙公网安备 33010602011771号