1)由输入的实部和虚部生成一个复数
2)两个复数求和
3)两个复数求差
4)两个复数求积,
5)从已知复数中分离出实部
6)从已知复数中分离出虚部。
运算结果以相应的复数或实数的表示形式显示(最好用结构体的方法)
要是能用c++和stl,可以这样写#include
<complex>#include <iostream>void main(){ using namespace
stdcomplex<double>a(3, 2)complex<double>b(5, 6)
complex<double>result(0,0)result = a*b/(a+b)cout <<
result}
乱七八糟写了一个,肯定有很多不对的地方,懒得找了,如果你找到了发QQ(252290278)给我吧#include
<stdio.h>
#include<string.h>
int
ope(char
num[])//计算有几个符号
{
int
count=0
for(int
i=0num[i]!='\0'i++)
if('+'==num[i]
||
'-'==num[i])
count++
return
count
}
void
inone(double
&a,double
&b)//输入一个复数
{
int
i,j,l
char
num[100]
scanf("%s",num)
l=strlen(num)
if('i'==num[l-1])//有虚部
{
if(ope(num))//如果有符号
{
i=0
if(2==ope(num))//有两个符号
{
if('+'==num[0])//如果实部是正数
{
for(i=1i<li++)//将整数部分的值存放到整数a中
if('+'==num[i]
||
'-'==num[i])
{
for(j=1j<ij++)
a=a*10+num[j]-'0'
break
}
}
else
if('-'==num[0])//如果实部是负数
{
for(i=1i<li++)//将整数部分的值存放到整数a中
if('+'==num[i]
||
'-'==num[i])
{
for(j=1j<ij++)
a=a*10-(num[j]-'0')
break
}
}
}
else
if(1==ope(num))//一个符号,即实部为正数或者没有实部
{
for(i=0i<li++)//将整数部分的值存放到整数a中
if('+'==num[i]
||
'-'==num[i])
{
for(j=0j<ij++)
a=a*10+(num[j]-'0')
break
}
}
//将虚数部分的值存放到整数b中
if('+'==num[i])//如果虚部是正数
for(j=i+1j<l-1j++)
b=b*10+num[j]-'0'
else
if('-'==num[i])
for(j=i+1j<l-1j++)
b=b*10-(num[j]-'0')
}
else//没有符号
for(i=0i<l-1i++)
b=b*10+num[j]-'0'
}
else//没有虚部
{
if('-'==num[0])//实部是负数
for(i=1i<li++)//将整数部分的值存放到整数a中
a=a*10-(num[i]-'0')
else
{
i=0
if('+'==num[0])//实部是正数
i++
for(i<li++)
a=a*10+num[i]-'0'
}
}
}
void
intwo(double
&a,double
&b,double
&c,double
&d)//输入两个复数
{
a=b=c=d=0
printf("请输入第一个复数:\n")
inone(a,b)
printf("请输入第二个复数:\n")
inone(c,d)
}
void
pri(double
a,double
b)//输出
{
if(0==a
&&
0==b)
{
printf("0\n")
return
}
if(a)
printf("%d",a)
if(b)
{
if(b>0)
printf("+")
printf("%di",b)
}
printf("\n")
}
void
add()//加
{
double
a,b,c,d
intwo(a,b,c,d)
printf("这两个复数相加的结果为:")
pri(a+c,b+d)
}
void
sub()//减
{
double
a,b,c,d
intwo(a,b,c,d)
printf("这两个复数相减的结果为:")
pri(a-c,b-d)
}
void
mul()//乘
{
double
a,b,c,d
intwo(a,b,c,d)
printf("这两个复数相乘的结果为:")
pri(a*c-b*d,b*c+a*d)
}
void
exc()//除
{
double
a,b,c,d
intwo(a,b,c,d)
if(c==0
&&
d==0)
{
printf("错误,除数为零!\n")
return
}
printf("这两个复数相除的结果为:")
pri((a*c+b*d)/(c*c+d*d),(b*c-a*d)/c*c+d*d)
}
void
vei()//幂
{
int
n
double
a,b,c,d
intwo(a,b)
c=ad=b
printf("请出入n次幂(只能为整数!):\n")
scanf("%d",&n)
for(i=1i<ni++)
{
a=a*c-b*d
b=b*c+a*d
}
printf("这个复数相减的结果为:")
pri(a,b)
}
int
main()
{
int
n
char
ch
while(1)
{
printf("请选择需要的运算:\n")
printf("0.退出\n")
printf("1.加运算\n")
printf("2.减运算\n")
printf("3.乘运算\n")
printf("4.除运算\n")
printf("5.幂运算\n")
scanf("%c",&ch)
while('
'==ch
||
'\n'==ch)
scanf("%c",&ch)
if(ch<'0'
||
ch>'9')
{
printf("输入错误请重新输入!\n")
continue
}
n=ch-'0'
switch(n)
{
case
0:
return
0
case
1:
add()
break
case
2:
sub()
break
case
3:
mul()
break
case
4:
exc()
break
case
5:
vei()
break
default:
printf("输入错误,请重新输入\n")
break
}
}
return
0
}