Live2D

复数四则运算

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;
}

如上

posted @ 2019-11-22 09:14  风吟承渊  阅读(350)  评论(0)    收藏  举报