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);
}
}
运算结果截图: