C++复数计算器日志附源代码Word格式.docx
- 文档编号:6638408
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:41
- 大小:89.91KB
C++复数计算器日志附源代码Word格式.docx
《C++复数计算器日志附源代码Word格式.docx》由会员分享,可在线阅读,更多相关《C++复数计算器日志附源代码Word格式.docx(41页珍藏版)》请在冰点文库上搜索。
operator<
<
(ostream&
os,Complex&
com);
//重载输出
Complexoperator+(Complex&
//加法重载
Complexoperator-(Complex&
//减法重载
Complexoperator*(Complex&
//乘法重载
Complexoperator+=(Complex&
//加法赋值重载
Complexoperator-=(Complex&
//减法赋值重载
Complexoperator*=(Complex&
//乘法赋值重载
Complexoperator++();
//自加
Complexoperator--();
//自减
doublemod(void);
//求复数的模
intoperator>
(Complex&
intoperator<
intoperator!
=(Complex&
intoperator==(Complex&
};
用户记录(使用结构体)
structUser
charName[20];
intnTime;
intnTest;
doubledlAve;
intnAdd;
intnSub;
intnMul;
doubledlScore[3];
}user
2011.12.6星期二
类代码实现写出个各类的代码实现用文件结构来写即每个类的头文件与类的实现文件提交类的相关代码并且有较详细的注释
类代码实现如下:
#include<
iostream>
cmath>
cstdlib>
cstring>
fstream>
ctime>
//重载运算符“++”,实部与虚部均加1
ComplexComplex:
:
operator++()
Real++;
Image++;
return*this;
//重载运算符“--”,实部与虚部均减1
operator--()
Real--;
Image--;
//求复数的模,返回实部^2+虚部^2
doubleComplex:
mod()
returnReal*Real+Image*Image;
//重载运算符“>
”,比较模的大小
intComplex:
operator>
(Complex&
com)
if(mod()>
com.mod())
return1;
//若大,则返回1
else
return0;
//重载运算符“<
operator<
if(mod()<
//若小,则返回1
//重载运算符“!
=”,分别判断复数的实部与虚部
operator!
=(Complex&
if(*this==com)
else
//重载复数的输入,a+bi的形式
istream&
operator>
(istream&
is,Complex&
com)
cout<
"
输入复数:
"
;
chars[80];
is>
s;
//用字符串的形式接收复数
intlen=strlen(s);
//求出字符串的长度
intn=0,sign=1;
//其中的n值为当前从字符串中提取出的数字,会在下面的while语句中得到确定的值
//sign为状态变量,表示数值的正负符号,以辅助辨认正负值
com.Image=com.Real=0;
//判断接收的字符串是否合法
for(intk=0;
k<
len;
k++)
{
if((s[k]<
'
0'
||s[k]>
9'
)&
&
(s[k]!
='
+'
&
s[k]!
-'
i'
))
{
cout<
error"
<
endl;
returnis;
//错误,输出出错信息并返回
}
}
//顺序识别字符串中各字符
)
if(n!
=0&
(s[k]=='
--'
||s[k]=='
))//当前字符是否为符号位
com.Real=sign*n;
//是符号位,且n!
=0,通过下面的whlie语句赋值,表明当前读取的是虚部的符号
n=0;
//将原n*sign值(带正负号的数值)赋给实部后,将n清零,准备下一次继续接收并判断是否为虚部的值
if(s[k]=='
)//当前字符若为负号
sign=-1;
k++;
//给符号标志变量sign赋值,表示为负数
)//当前字符若为正号
sign=1;
//给符号标志变量sign赋值,表示为正数
if(s[k]=='
)//若当前字符为“i”
if(k!
=len-1)//判断字符'
是否为字符串中最后一个字符
cout<
error\n"
//如果不是,说明复数数据格式错误
else
com.Image=sign*n;
//是最后一个字符,复数对象已接收完,用sign*n为虚部赋值
break;
while(s[k]>
s[k]<
)//当前字符若在0~9之间,则将数字字符转换成数字数值
n=n*10+s[k]-'
k++;
if(s[len-1]!
n!
=0)//如果最后一个字符不是'
,表示复数对象内只有实部,没有虚部,如:
-a
com.Real=n*sign;
returnis;
//重载复数的输出
ostream&
operator<
(ostream&
os,Complex&
if(fabs(com.Image)==0)//如果虚部为0
os<
com.Real;
//只输出实部
elseif(fabs(com.Real)==0)//如果实部为0
com.Image<
i"
//只输出虚部
elseif(com.Image>
0)
com.Real<
+"
//虚部为正
//如实部为3,虚部为-6i,就变为3-6i,而不是3+-6i
returnos;
//加法重载
operator+(Complex&
Complexsum;
sum.Real=Real+com.Real;
//实部相加
sum.Image=Image+com.Image;
//虚部相加
returnsum;
//乘法重载
operator*(Complex&
Complexmulti;
multi.Real=Real*com.Real-Image*com.Image;
//乘积实部
multi.Image=Real*com.Image+Image*com.Real;
//乘积虚部
returnmulti;
//减法重载
operator-(Complex&
Complexsub;
sub.Real=Real-com.Real;
//实部相减
sub.Image=Image-com.Image;
//虚部相减
returnsub;
//加法赋值重载
operator+=(Complex&
Real=Real+com.Real;
//实部
Image=Image+com.Image;
//虚部
//减法赋值重载
operator-=(Complex&
Real=Real-com.Real;
Image=Image-com.Image;
//乘法赋值重载
operator*=(Complex&
doublenReal=Real*com.Real-Image*com.Image;
doublenImage=Real*com.Image-Image*com.Real;
Real=nReal;
Image=nImage;
//重载==运算符,分别比较两个复数对象的实部和虚部
operator==(Complex&
if(Real==com.Real&
Image==com.Image)
//实部与虚部部分相等,则返回1
2011.12.7星期三
类与对象的调试功能函数实现创建对象并对每个类的操作进行调试
功能函数如下
voidAdd()//复数加法
{
user.nAdd++;
Complexnum1,num2,sum,Zero(0,0);
cout<
\t加法计算\n"
\t最少输入两个复数,输入“”结束\n"
\t第个复数:
cin>
num1;
num2;
sum=num1+num2;
for(inti=4;
!
(num1==Zero);
i++)
sum=sum+num1;
\t第"
i<
个复数:
cin>
\t结果是:
sum<
\t"
cout.flush();
cin.get();
}
voidSub()//复数减法
user.nSub++;
Complexnum1,num2,sub,Zero(0,0);
\t减法计算\n"
sub=num1-num2;
cout<
cin>
num1;
for(intk=4;
(num1==Zero);
k++)
sub=sub-num1;
cout<
k<
cin>
sub<
endl;
\t按任意键返回"
voidMul()//复数乘法
user.nMul++;
Complexnum1,num2,mul,Zero(0,0);
\t乘法计算\n"
mul=num1*num2;
for(intj=4;
j++)
mul*=num1;
j<
mul<
\t按任意键继续\n"
voidAddself()//复数自加
Complexnum;
\t复数自加\n"
请输入一个复数:
num;
num++;
自加结果为:
voidSubself()//复数自减
\t复数自减\n"
num--;
voidCompare()//比较复数
Complexnum1,num2;
\t输入两个复数\n"
if(num1==num2)
\t这两个复数相等\n"
elseif(num1>
num2)
\t"
num1<
的模大于"
num2<
的模\n"
elseif(num1<
num1<
else
\t这两个复数的模相等\n"
voidTest()
user.nTime++;
srand(time(NULL));
\t共道题,作以内的加减运算,满分100分:
\n"
doublereal1,real2,image1,image2,real3,real4,image3,image4;
Complexanswer,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;
Complexa(real1,image1),b(real2,image2);
real3=rand()%20-10;
image3=rand()%20-10;
real4=rand()%20-10;
image4=rand()%20-10;
Complexc(real3,image3),d(real4,image4);
op=rand()%3;
//随机产生3种运算符
switch(op)
case0:
answer=a+b;
cout<
a<
\t加上"
b<
等于"
answer<
break;
case1:
answer=a-b;
\t减去"
break;
case2:
answer=c*d;
c<
\t乘以"
d<
temp;
if(temp==answer)
\t恭喜你答对了一题。
------------------------------"
score+=10;
\t此题做错了\n"
\t正确答案为:
answer<
\t你的最后得分是:
score<
if(user.nTest<
=3)//若累计次数没有超过3次
user.dlAve=0;
user.dlScore[user.nTest-1]=score;
//将本次测试成绩添加进记录中
for(inti=0;
user.nTest;
user.dlAve+=user.dlScore[i];
//若以前有记录,将其与本次记录累计相加起来,用以计算平均分
user.dlAve=user.dlAve/user.nTest;
//计算平均分,user.dlAve从累计的分数变成了平均分
else//如果累计测试超过3次
user.dlScore[0]=user.dlScore[1];
//最前面的一次记录将被覆盖
user.dlScore[1]=user.dlScore[2];
user.dlScore[2]=score;
//将本次记录添加进测试记录的尾部
user.dlAve=0;
3;
i++)//计算最新3次的平均分
user.dlAve=user.dlAve/3;
cout.flush();
voiduserprint()
user.Name<
\t\t使用的次数为:
user.nTime<
次"
\t其中:
\t加法次数:
user.nAdd<
次\n"
<
\t\t减法次数:
user.nSub<
\t\t乘法次数:
user.nMul<
\t\t测试次数:
user.nTest<
\t\t平均成绩:
user.dlAve<
voidLogin()
Useruser1;
请输入您的姓名:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 复数 计算器 日志 源代码