C语言实现复数计算器

1.复数的表示:用结构体保存复数的实部和虚部

2.复数的加减法:实部和虚部分别相加减

3.复数的乘法:(a+bi)(c+di)=(ac-bd)+(bc+ad)i

4.复数的除法:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2)+(bc-ad)/(c^2+d^2)

                (注意:考虑除数为0的情况)

函数部分:

void assignment(Complex *p,float real,float imag);                        /*构造一个复数*/
void addition(Complex *p,Complex Z1,Complex Z2);                    /*加法*/
void subtraction(Complex *p,Complex Z1,Complex Z2);              /*减法*/
void multiplication(Complex *p,Complex Z1,Complex Z2);          /*乘法*/
void division(Complex *p,Complex Z1,Complex Z2);                  /*除法*/
void display(Complex p);                                                            /*打印复数*/

思路:

在主函数中,提示用户分别输入两个复数的实部和虚部,然后调用assignment函数分别构造出这两个复数(抽象),然后用户根据提示信息选择接下来的运算,这里要用到do-while语句和switch

#include
#include
 
typedef struct{
		float realpart;		/*实部*/
		float imaginarypart; /*虚部 */
	}Complex;	/*定义"复数"的抽象数据类型*/

void assignment(Complex *p,float real,float imag);	/*构造一个复数*/
void addition(Complex *p,Complex Z1,Complex Z2);	/*加法*/
void subtraction(Complex *p,Complex Z1,Complex Z2);	/*减法*/
void multiplication(Complex *p,Complex Z1,Complex Z2);	/*乘法*/
void division(Complex *p,Complex Z1,Complex Z2);	/*除法*/
void display(Complex p);	/*打印复数*/

int main()
{
	float realpart,imaginarypart;
	Complex C1,C2,C;
	int adjust=0;
	do
	{
		printf("--------------------------------------------\n");
		printf("******欢迎使用复数计算器************\n");
		
		printf("请您输入复数的实部和虚部:\n");
        scanf("%f%f", &realpart, &imaginarypart);
		assignment(&C1,realpart,imaginarypart);
		/*构造复数C1*/
		display(C1);
		
		
		printf("请输入第二个复数的实部和虚部:\n");
		scanf("%f%f", &realpart, &imaginarypart);
		assignment(&C2,realpart,imaginarypart);
		/*构造复数C2*/
		display(C2);
		
		
		printf("接下来的操作:1->加法,2->减法,3->乘法,4->除法, 0->退出\n"); 
		scanf("%d",&adjust);
		if(adjust==1||adjust==2||adjust==3||adjust==4)
		{
			printf("你的计算结果是:\n");
		}
		switch(adjust)
		{
			/*加法*/
			case 1:
				addition(&C,C1,C2);
				display(C);
				break;
			/*减法*/
			case 2:
				subtraction(&C,C1,C2);
				display(C);
				break;
			/*乘法*/
			case 3:
				multiplication(&C,C1,C2);
				display(C);
				break;
			/*除法*/
			case 4: 
			if(C2.realpart==0&&C2.imaginarypart==0)
			{
				printf("除数为0,请重新输入\n");
			}
			else
			{
				division(&C,C1,C2);
				display(C);
			}
			    break;
			default:
				if(adjust==0)
				{
					printf("谢谢使用!\n");
				}
				else
				{
					printf("输入指令错误!请重新输入\n");
				}
		}
	}while(adjust!=0);
	return 0;
}

void assignment(Complex *p,float real,float imag)	/*定义一个复数*/
{
	p->realpart=real;
	p->imaginarypart=imag;
}

void addition(Complex *p,Complex Z1,Complex Z2)	/*加法*/
{
	p->realpart=Z1.realpart+Z2.realpart;
	p->imaginarypart=Z1.imaginarypart+Z2.imaginarypart;
}

void subtraction(Complex *p,Complex Z1,Complex Z2)	/*减法*/
{
	p->realpart=Z1.realpart-Z2.realpart;
	p->imaginarypart=Z1.imaginarypart-Z2.imaginarypart;
}

void multiplication(Complex *p,Complex Z1,Complex Z2)	/*乘法*/
{
	p->realpart=Z1.realpart*Z2.realpart-Z1.imaginarypart*Z2.imaginarypart;
	p->imaginarypart=Z1.imaginarypart*Z2.realpart+Z1.realpart*Z2.imaginarypart;
}


void division(Complex *p,Complex Z1,Complex Z2)	/*除法*/
{
	double tt=pow(Z2.realpart,2)+pow(Z2.imaginarypart,2);
	p->realpart=(Z1.realpart*Z2.realpart+Z1.imaginarypart*Z2.imaginarypart)/tt;
	p->imaginarypart=(Z1.imaginarypart*Z2.realpart-Z1.realpart*Z2.imaginarypart)/tt;
}

void display(Complex p)	//打印复数 
{
	if(p.imaginarypart>0)
	{
		printf("%f+%fi\n", p.realpart, p.imaginarypart);
	}
	else if(p.imaginarypart<0)
	{
		printf("%f%fi\n", p.realpart, p.imaginarypart);
	}
	else
	{
		printf("%f\n",p.realpart);
	}
}

运算结果截图:

C语言实现复数计算器_第1张图片

你可能感兴趣的:(c语言)