最新C++小型复数计算器汇总.docx
- 文档编号:7008814
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:18
- 大小:18.58KB
最新C++小型复数计算器汇总.docx
《最新C++小型复数计算器汇总.docx》由会员分享,可在线阅读,更多相关《最新C++小型复数计算器汇总.docx(18页珍藏版)》请在冰豆网上搜索。
最新C++小型复数计算器汇总
C++小型复数计算器
#include
#include
#include
#include
#include
#include
#defineEPS1e-5//定义精度常数
usingnamespacestd;//使用标准空间命名std
namespaceNameCComplex//定义命名空间NameCComplex
{
classCComplex////定义一个CComplex类
{
private:
doubleReal,Image;
public:
CComplex(doublereal=0,doubleimage=0)//构造函数
{
Real=real;
Image=image;
}
friendistream&operator>>(istream&is,CComplex&com);//重载输入
friendostream&operator<<(ostream&os,CComplex&com);//重载输出
CComplexoperator+(CComplex&com);//加法重载
CComplexoperator-(CComplex&com);//减法重载
CComplexoperator*(CComplex&com);//乘法重载
CComplexoperator+=(CComplex&com);//加法赋值重载
CComplexoperator-=(CComplex&com);//减法赋值重载
CComplexoperator*=(CComplex&com);//乘法赋值重载
CComplexoperator++();//自加
CComplexoperator--();//自减
doublemod(void);//求复数的模
intoperator>(CComplex&com);
intoperator<(CComplex&com);
intoperator!
=(CComplex&com);
intoperator==(CComplex&com);
};
structUser//用户结构体类型定义
{
charszName[20];//用户名
intnTime;//使用次数
intnTest;//测试次数
doublealAve;//平均成绩
intnAdd;//加法次数
intnSub;//减法次数
intnMul;//乘法次数
doubledlScore[3];//3次测试得分
}user;//定义全局变量
CComplexCComplex:
:
operator++()//重载运算符"++",实部与虚部均加1
{
Real++;
Image++;
return*this;
}
CComplexCComplex:
:
operator--()//重载运算符"--",实部与虚部均减1
{
Real--;
Image--;
return*this;
}
doubleCComplex:
:
mod()//求复数的模的平方,返回实部^2+虚部^2
{
returnReal*Real+Image*Image;
}
intCComplex:
:
operator>(CComplex&com)//重载运算符">",比较模的大小
{
if(mod()>com.mod())
return1;
else
return0;
}
intCComplex:
:
operator<(CComplex&com)
{
if(mod() return1;//若大,则返回1 else return0; } intCComplex: : operator! =(CComplex&com) //重载运算符"! =",分别判断复数的实部和虚部 { if(*this==com) return0; else return1; } istream&operator>>(istream&is,CComplex&com)//重载输入,可以输入a+bi的形式 { cout<<"请输入复数: "; chars[80]; is>>s;//用字符串的形式接受复数 intlen=strlen(s);//求出字符串的长度 intn=0,sign=1; //n为当前从字符串中提取出来的数字,初始化为0;sign是难道符号,初始化为正 com.Image=com.Real=0; for(intk=0;k { if((s[k]<'0'||s[k]>'9')&&(s[k]! ='+'&&s[k]! ='-'&&s[k]! ='i')) { cout<<"error"< returnis;//错误,输出出错信息并返回 } } for(k=0;k { if(n! =0&&(s[k]=='-'||s[k]=='+'))//当前字符是否是符号位 { com.Real=sign*n; //是符号位,且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<<"error\n";//如果不是,说明复数数据格式错误 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; } returnis; } ostream&operator<<(ostream&os,CComplex&com)//重载输入 { if(fabs(com.Image) os< elseif((fabs(com.Real) os< elseif(com.Image>0) os< else os< returnos; } CComplexCComplex: : operator+(CComplex&com)//加法重载 { CComplexsum; sum.Real=Real+com.Real;//实部相加 sum.Image=Image+com.Image;//虚部相加 returnsum; } CComplexCComplex: : operator*(CComplex&com)//乘法重载 { CComplexmulti; multi.Real=Real*com.Real-Image*com.Image;//乘积实部 multi.Image=Real*com.Image+Image*com.Real;//乘积虚部 returnmulti; } CComplexCComplex: : operator-(CComplex&com)//减法重载 { CComplexsub; sub.Real=Real-com.Real; sub.Image=Image-com.Image; returnsub; } CComplexCComplex: : operator+=(CComplex&com)//重载加法赋值 { Real=Real+com.Real; Image=Image+com.Image; return*this; } CComplexCComplex: : operator-=(CComplex&com)//重载减法赋值 { Real=Real-com.Real; Image=Image-com.Image; return*this; } CComplexCComplex: : operator*=(CComplex&com)//重载乘法赋值 { doublenReal=Real*com.Real-Image*com.Image; doublenImage=Real*com.Image+Image*com.Real; Real=nReal; Image=nImage; return*this; } intCComplex: : operator==(CComplex&com)//重载等于 { if(Real==com.Real&&Image==com.Image) return1; else return0; } voidTest(void)//测试函数 { user.nTest++; cout<<"共10道题,做100以内的加减运算,满分100分: \n"; doublereal1,real2,image1,image2,real3,real4,image3,image4; CComplexanswer,temp; intscore=0; charop; for(inti=0;i<=9;i++) { /////为复数产生随机值 real1=rand()%200-100; image1=rand()%200-100; real2=rand()%200-100; image2=rand()%200-100; CComplexa(real1,image1),b(real2,image2); real3=rand()%20-10; image3=rand()%20-10; real4=rand()%20-10; image4=rand()%20-10; CComplexc(real3,image3),d(real4,image4); op=rand()%3;//产生随机加减乘法运算的三个值 switch(op) { case0: answer=a+b;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 C+ 小型 复数 计算器 汇总