哪位大神可以帮帮我,这个复数四则运算在构造复数时虚数不能为负数,否则就一直刷屏,求解决,拜托了( •̥́ ˍ •̀ू )
我々★ぬ行 2019-05-07 06:38:30 #include <stdlib.h>
#include <stdio.h>
typedef struct Complex{
float real;
float image;
}Complex;
Complex CreatCom(float real,float image)
{
Complex NewCom;
NewCom.real=real;
NewCom.image=image;
return NewCom;
}
Complex jia(Complex c1,Complex c2)
{
Complex AddComplex;
AddComplex.real=c1.real+c2.real;
AddComplex.image=c1.image+c2.image;
return AddComplex;
}
Complex jian(Complex c1,Complex c2)
{
Complex SubComplex;
SubComplex.real=c1.real-c2.real;
SubComplex.image=c1.image-c2.image;
return SubComplex;
}
Complex cheng(Complex c1,Complex c2)
{
Complex MulComplex;
MulComplex.real=(c1.real*c2.real)-(c1.image*c2.image);
MulComplex.image=(c1.real*c2.image)+(c1.image*c2.real);
return MulComplex;
}
Complex chu(Complex c1,Complex c2)
{
Complex DivComplex;
DivComplex.real=((c1.real*c2.real)+(c1.image*c2.image))/(c2.real*c2.real+c2.image*c2.image);
DivComplex.image=((c1.image*c2.real)-(c1.real*c2.image))/(c2.real*c2.real+c2.image*c2.image);
return DivComplex;
}
void PrintCom(Complex c1)
{
if(c1.image>0||c1.image==0)
{
if(c1.real!=0&&c1.image!=0)
printf("%.2f+%.2fi\n",c1.real,c1.image);
else if(c1.real==0&&c1.image!=0)
printf("%.2fi\n",c1.image);
else if(c1.real!=0&&c1.image==0)
printf("%.2f\n",c1.real);
else if(c1.real==0&&c1.image==0)
printf("%.2f\n",c1.real);
}
else
{
if(c1.real!=0&&c1.image!=0)
printf("%.2f-%.2fi\n",c1.real,-c1.image);
else if(c1.real==0&&c1.image!=0)
printf("-%.2fi\n",-c1.image);
}
}
main()
{
Complex c1,c2,c3;
float Real1=0,Image1=0,Real2=0,Image2=0;
int choice,flag=0;
printf("*************************复数运算**************************\n");
printf("\t\t\t1.复数构造\n\t\t\t2.复数相加\n\t\t\t3.复数相减\n");
printf("\t\t\t4.复数相乘\n\t\t\t5.复数相除\n\t\t\t6.提取实部\n");
printf("\t\t\t7.提取虚部\n\t\t\t0.退出\n\t\t\t\n");
printf("***********************************************************\n");
while(1){
printf("\n输入你的操作序号:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("输入第一个复数的实部和虚部:");
scanf("%f,%f",&Real1,&Image1);
c1=CreatCom(Real1,Image1);
printf("1vvvvvvvvvvvvv");
getchar();
PrintCom(c1);
printf("wrwermwejhwjf");
printf("输入第二个复数的实部和虚部:");
scanf("%f,%f",&Real2,&Image2);
c2=CreatCom(Real2,Image2);
PrintCom(c2);
flag=1;
break;
case 2:
if(flag==1){
c3=jia(c1,c2);
printf("两数之和是:");
PrintCom(c3);}
else
printf("您还未构造复数!\n");
break;
case 3:
if(flag==1){
c3=jian(c1,c2);
printf("两数之差是:");
PrintCom(c3);}
else
printf("您还未构造复数!\n");
break;
case 4:
if(flag==1){
c3=cheng(c1,c2);
printf("两数之积是:");
PrintCom(c3);}
else
printf("您还未构造复数!\n");
break;
case 5:
if(flag==1){
c3=chu(c1,c2);
printf("两数之商是:");
PrintCom(c3);}
else
printf("您还未构造复数!\n");
break;
case 6:
if(flag==1){
printf("第一个复数实部为:%.2f\n",c1.real);
printf("第二个复数实部为:%.2f\n",c2.real);}
else
printf("您还未构造复数!\n");
break;
case 7:
if(flag==1){
printf("第一个复数虚部为:%.2fi\n",c1.image);
printf("第二个复数虚部为:%.2fi\n",c2.image);}
else
printf("您还未构造复数!\n");
break;
case 0:
break;
default:
printf("非法操作!\n"); break;
}
if(choice==0)
break;
}
}