⽤C语⾔编程复数计算器,简单实现C++复数计算器
本⽂实例为⼤家分享了简单实现C++复数计算器的具体代码,供⼤家参考,具体内容如下
1.有关计算器的功能
A,实现多个复数(包括实数)的加减乘除,⼤⼩⽐较,
B.实现⼗进制实数的进制转换,可以转换任意进制
2.有关设计的原理
A.复数计算的部分,采⽤运算符的重载,进⾏复数的加减乘除以及⼤⼩⽐较
对于输⼊输出,(>>和<
输⼊的重载,实现a+bi形式的复数的输⼊。
输出的重载,实现实数的输出(实现特殊的只输出实部虚部之类的)。
加减乘除的重载,实现有关复数的运算。
B.进制转换的部分,采⽤进制转换的⽅法,实现10进制的任意进制转换。辗转相除,记录每次的余数,存储在数组中来记录转换得到的数字
3.有关设计的特点
A.采⽤函数对所实现功能进⾏封装。
B.采⽤运算符的重载,使复数运算更加⽅便
C.考虑所有的输⼊输出情况,对选择的操作,输⼊复数的类型等进⾏判断与相应的处理
D.程序在完成以后,接受⼤家建议,规范代码格式,⾃⼰在制作过程有所收获也有所学习。
下⾯是有关代码的实现:
#include
#include
#include
#include
#include
#include
#include
#define EPS 1e-5 //定义精度常数
using namespace std; //使⽤标准空间命名std
namespace NameCCom //定义命名空间NameCCom
{
class CCom //定义⼀个CCom类
{
public:
CCom(double real=0,double image=0) //构造函数
{
Real=real;
Image=image;
}
friend istream & operator>>(istream &is,CCom &com); //重载输⼊friend ostream & operator<
CCom operator+(CCom &com); //加法重载
CCom operator-(CCom &com); //减法重载
CCom operator*(CCom &com); //乘法重载
CCom operator/(CCom &com); //除法重载
CCom operator+=(CCom &com); //加法赋值重载
CCom operator-=(CCom &com); //减法赋值重载
CCom operator*=(CCom &com); //乘法赋值重载
CCom operator/=(CCom &com); //除法赋值重载
};
struct User //定义⽤户结构体类型
{
char szName[20]; //⽤户名
}user; //定义全局变量
int CCom::operator>(CCom &com) //重载运算符">",⽐较模的⼤⼩{
if(mod()&d())
return 1; //若⼤,则返回1
else
return 0; //否则,则返回0
}
int CCom::operator
{
if(mod()
return 1; //若⼩,则返回1
else
return 0; //否则,则返回0
int CCom::operator!=(CCom &com) //重载运算符"!=",分别判断复数的实部和虚部2进制转十进制在线计算器
{
if(*this==com)
return 0; //若相等,则返回0
else
return 1; //否则,则返回1
}
istream & operator>>(istream &is,CCom &com) //重载输⼊,可以输⼊a+bi的形式
{
cout<
char s[80];
is>>s; //⽤字符串的形式接受复数
int len=strlen(s); //求出字符串的长度
int n=0,sign=1; //n为当前从字符串中提取出来的数字,初始化为0;sign是标记符号,初始化为正com.Image=com.Real=0;
for(int k=0;k
{
if((s[k] '9') && (s[k]!='+' && s[k]!='-' && s[k]!='i'))
{
cout<
return is; //错误,输出出错信息并返回
}
}
for(int k=0;k
{
if(n!=0 &&(s[k]=='-'||s[k]=='+')) //当前字符是否是符号位
{
com.Real=sign*n; //sign是符号位,且n!=0,即n已被赋值,表明当前读取的是虚部的符号
n=0; //将原n*sign值赋给实部,将n清零,准备接受虚部的值
}
if(s[k]=='-') //当前字符为负号
{
sign=-1;k++; //给符号标志赋值
if(s[k]=='+') //当前字符为正号
{
sign=1;k++; //给符号标志赋值
}
if(s[k]=='i') //当前字符为'i'
{
if(k!=len-1) //判断字符'i'是否为字符串中作后⼀个字符
cout<
else
com.Image=sign*n; //如果是最后⼀个字符,复数对象已接受完,⽤sign*n为虚部赋值break;
}
while(s[k]>='0' && s[k]<='9') //如果当前字符在0~9之间,将数字字符转换成数字数值{
n=n*10+s[k]-'0';
k++;
}
}
if(s[len-1]!='i' && n!=0) //如果最后⼀个字符不是'i',表⽰复数对象内只有实部,没有虚部{
com.Real=n*sign;
}
return is;
}
ostream & operator<
{
if(fabs(com.Image)
os<
else if((fabs(com.Real)
os<
else if(com.Image>0)
os<
else
return os;
}
CCom CCom::operator+(CCom &com) //加法重载
{
CCom sum;
sum.Real=Real+com.Real; //实部相加
sum.Image=Image+com.Image; //虚部相加
return sum;
}
CCom CCom::operator-(CCom &com) //减法重载
{
CCom sub;
sub.Real=Real-com.Real; //实部相减
sub.Image=Image-com.Image; //虚部相减
return sub;
}
CCom CCom::operator*(CCom &com) //乘法重载
{
CCom multi;
multi.Real=Real*com.Real-Image*com.Image; //实部乘积
multi.Image=Real*com.Image+Image*com.Real; //虚部乘积
return multi;
}
CCom CCom::operator/(CCom &com) //除法重载
{
CCom div;
div.Real=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image); //实部除积div.Image=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image*com.Image); //虚部除积return div;
}
CCom CCom::operator+=(CCom &com) //重载加法赋值
{
Real=Real+com.Real; //实部相加
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论