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}
复数除法,将分母实数化,也就是把除法换算成乘法做。
在分子分母同时乘上分母的共轭所谓共轭你可以理解为加减号的变换,互为共轭的两个复数相乘是个实常数。
乘法法则:
规定复数的乘法按照以下的法则进行:
设z1=a+bi,z2=c+di(a、b、c、d∈R)是任意两个复数,那么它们的积(a+bi)(c+di)=(ac-bd)+(bc+ad)i。
其实就是把两个复数相乘,类似两个多项式相乘,展开得:ac+adi+bci+bdi2,因为i2=-1,所以结果是(ac-bd)+(bc+ad)i。两个复数的积仍然是一个复数。
在极坐标下,复数可用模长r与幅角θ表示为(r,θ)。对于复数a+bi,r=√(a²+b²),θ=arctan(b/a)。此时,复数相乘表现为幅角相加,模长相乘。
除法法则:
复数除法定义:满足(c+di)(x+yi)=(a+bi)的复数x+yi(x,y∈R)叫复数a+bi除以复数c+di的商。
运算方法:可以把除法换算成乘法做,在分子分母同时乘上分母的共轭。所谓共轭你可以理解为加减号的变换,互为共轭的两个复数相乘是个实常数。
乱七八糟写了一个,肯定有很多不对的地方,懒得找了,如果你找到了发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
}