C++编写复数四则运算程序
1.知识储备——什么是复数?
复数x被定义为二元有序实数对(a,b) ,记为z=a+bi,这里a和b是实数,i是虚数单位。
在复数a+bi中,a=Re(z)称为实部,b=Im(z)称为虚部。当虚部等于零时,这个复数可以视为实数;
当z的虚部不等于零时,实部等于零时,常称z为纯虚数。
如:Z=a+bi;(a为实部,bi为虚部)
2.如何着手编写程序?
首先,明确怎样表示复数的结构,我们已知复数包含实部和虚部两部分,我们要将两部分同时表示出来,
就要使用到常用的“结构体”表示数据,包含实部数、虚部数两部分。
其次,明确复数的运算法则,如下图所示,在这里我们仅用“复数运算的代数运算法则”进行程序编写。
3.程序编写
**(1)导入要使用的头文件、声明命名空间并定义复数结构。**
注意:因为数值的运算并不一定是整数,如除法时得到的为小数,因此将数据类型定义为float型,
若需求精度更高也可以定义为double型,根据需要而定。
#include<iostream>
using namespace std;
typedef struct{
float realpart; //实部数
float imagpart; //虚部数
}complex; //complex表示复数
**(2)创建复数输入函数。**
这里我们采用“引用传递”形式传递实参。
void Icomplex(complex &z){
cin>>z.realpart;//输入实部数
cin>>z.imagpart; //输入虚部数
}
**(3)创建输出复数的函数。**
因为复数格式为“Z=a+bi”,分为实部和虚部,同时数字又具有正负性,因此要使用if语句对数值正负加以判断。
特别说明:复数的虚部末尾有虚数单位“i”,当虚部b不为0时要加上i,不能忽略。
void Pcomplex(complex &z){
if(z.imagpart>=0) //判断虚数的正负,决定输入符号的形式
cout<<z.realpart<<"+"<<z.imagpart<<"i"<<"\n";
else{
cout<<z.realpart<<z.imagpart<<"i"<<"\n";
cout<<endl;//换行
}
**(4)创建复数求和函数。**
复数的加法法则为:(a+bi)+(c+di)=(a+c)+(b+d)i,可以看出复数相加为实部、虚部分别对应相加。
因为我们进行的是复数运算,传递的参数也为复数类型,因此定义两个复数形参z1,z2作为形参。
void Jcomplex(complex z1,complex z2){
complex Jsum;//接收结果的复数变量
Jsum.realpart=z1.realpart+z2.realpart;//求实部
Jsum.imagpart=z1.imagpart+z2.imagpart;//求虚部
Pcomplex(Jsum);//调用输出函数
}
**(5)创建复数求差函数。**
复数的减法法则为:(a+bi)-(c+di)=(a-c)+(b-d)i;,可以看出复数相减为实部、虚部分别对应相减。
同理,定义两个复数形参z1,z2作为形参。
void Scomplex(complex z1,complex z2){
complex Ssum;//接收结果的复数变量
Ssum.realpart=z1.realpart-z2.realpart;//求实部
Ssum.imagpart=z1.imagpart-z2.imagpart;//求虚部
Pcomplex(Ssum);//调用输出函数
}
**(6)创建复数求乘积函数。**
复数的乘法法则为:(a+bi)·(c+di)=(ac-bd)+(bc+ad)i,根据乘法法则分别是实部乘积作差和虚部乘积作差。
同理,定义两个复数形参z1,z2作为形参。
void Xcomplex(complex z1,complex z2){
complex Xsum;//接收结果的复数变量
Xsum.realpart=((z1.realpart*z2.realpart)- (z1.imagpart*z2.imagpart));//求实部
Xsum.imagpart=((z1.realpart*z2.imagpart)+(z1.imagpart*z2.realpart));//求虚部
Pcomplex(Xsum);//调用输出函数
}
**(7)创建复数求除商函数。**
复数的除法法则为:(a+bi)÷(c+di)=[(ac+bd)/(c²+d²)]+[(bc-ad)/(c²+d²)]i,根据乘法法则先进行分式转化,再分别求解。
同理,定义两个复数形参z1,z2作为形参。
void Ccomplex(complex z1,complex z2){
complex Csum;//接收结果的复数变量
Csum.realpart=(((z1.realpart*z2.realpart)+(z1.imagpart*z2.imagpart))/((z2.realpart*z2.realpart)+(z2.imagpart*z2.imagpart)));//求实部
Csum.imagpart=(((z1.imagpart*z2.realpart)-(z1.realpart*z2.imagpart))/((z2.realpart*z2.realpart)+(z2.imagpart*z2.imagpart)));//求虚部
Pcomplex(Csum);//调用输出函数
}
**(8)创建主函数。**
特别说明:不同的编译器主函数的返回值类型初始定义可能不同,修改返回值类型即可。
如DevCpp定义为int mian,而VC++6.0则为void main。
int main(){
complex z,z1,z2;//定义三个结构体类型变量
cout<<"请输入复数Z1的实部和虚部:"<<endl;
Icomplex(z1);
cout<<"请输入复数Z2的实部和虚部:"<<endl;
Icomplex(z2);
cout<<endl; //换行
//进行运算
cout<<"z1、z2和为:"<<endl;
Jcomplex(z1,z2);//求和
cout<<"z1、z2差为:"<<endl;
Scomplex(z1,z2);//求差
cout<<"z1、z2乘积为:"<<endl;
Xcomplex(z1,z2);//求乘积
cout<<"z1、z2除商:"<<endl;
Ccomplex(z1,z2);//求除
}
4.程序运行结果如下所示:
5.小结
编写程序前需要弄明白复数运算法则以及数据类型和可能出现的情况,这样才能更快速、高效的编写程序,
希望本篇文章能对你有所帮助。
**
> 声明:原创不易,若要转载请注明出处,违者必究。
**