最新C++小型复数计算器汇总Word下载.docx

上传人:b****6 文档编号:20031753 上传时间:2023-01-16 格式:DOCX 页数:18 大小:18.58KB
下载 相关 举报
最新C++小型复数计算器汇总Word下载.docx_第1页
第1页 / 共18页
最新C++小型复数计算器汇总Word下载.docx_第2页
第2页 / 共18页
最新C++小型复数计算器汇总Word下载.docx_第3页
第3页 / 共18页
最新C++小型复数计算器汇总Word下载.docx_第4页
第4页 / 共18页
最新C++小型复数计算器汇总Word下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

最新C++小型复数计算器汇总Word下载.docx

《最新C++小型复数计算器汇总Word下载.docx》由会员分享,可在线阅读,更多相关《最新C++小型复数计算器汇总Word下载.docx(18页珍藏版)》请在冰豆网上搜索。

最新C++小型复数计算器汇总Word下载.docx

CComplexoperator--();

//自减

doublemod(void);

//求复数的模

intoperator>

(CComplex&

intoperator<

intoperator!

=(CComplex&

intoperator==(CComplex&

};

structUser//用户结构体类型定义

charszName[20];

//用户名

intnTime;

//使用次数

intnTest;

//测试次数

doublealAve;

//平均成绩

intnAdd;

//加法次数

intnSub;

//减法次数

intnMul;

//乘法次数

doubledlScore[3];

//3次测试得分

}user;

//定义全局变量

CComplexCComplex:

:

operator++()//重载运算符"

++"

,实部与虚部均加1

Real++;

Image++;

return*this;

operator--()//重载运算符"

--"

,实部与虚部均减1

Real--;

Image--;

doubleCComplex:

mod()//求复数的模的平方,返回实部^2+虚部^2

returnReal*Real+Image*Image;

intCComplex:

operator>

com)//重载运算符"

"

,比较模的大小

if(mod()>

com.mod())

return1;

else

return0;

operator<

com)

if(mod()<

//若大,则返回1

operator!

//重载运算符"

="

,分别判断复数的实部和虚部

if(*this==com)

istream&

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<

len;

k++)//判断接受的字符串是否合法

if((s[k]<

'

0'

||s[k]>

'

9'

)&

&

(s[k]!

='

+'

&

s[k]!

-'

i'

))

error"

endl;

returnis;

//错误,输出出错信息并返回

for(k=0;

)//顺序识别字符串中各字符

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++;

//给符号标志赋值

)//当前字符为正号

sign=1;

)//当前字符为'

I'

if(k!

=len-1)//判断字符'

是否为字符串中作后一个字符

error\n"

//如果不是,说明复数数据格式错误

com.Image=sign*n;

//是最后一个字符,复数对象已接受完,用sign*n为虚部赋值

break;

while(s[k]>

s[k]<

//当前字符在0~9之间,将数字字符转换成数字数值

n=n*10+s[k]-'

if(s[len-1]!

n!

=0)

//如果最后一个字符不是'

,表示复数对象内只有实部,没有虚部

com.Real=n*sign;

ostream&

com)//重载输入

if(fabs(com.Image)<

EPS)//如果虚部为0

os<

com.Real;

//只输出实部

elseif((fabs(com.Real)<

EPS))//如果实部为0

com.Image<

i"

//只输出虚部

elseif(com.Image>

0)

com.Real<

+"

//虚部为正

returnos;

operator+(CComplex&

com)//加法重载

CComplexsum;

sum.Real=Real+com.Real;

//实部相加

sum.Image=Image+com.Image;

//虚部相加

returnsum;

operator*(CComplex&

com)//乘法重载

CComplexmulti;

multi.Real=Real*com.Real-Image*com.Image;

//乘积实部

multi.Image=Real*com.Image+Image*com.Real;

//乘积虚部

returnmulti;

operator-(CComplex&

com)//减法重载

CComplexsub;

sub.Real=Real-com.Real;

sub.Image=Image-com.Image;

returnsub;

operator+=(CComplex&

com)//重载加法赋值

Real=Real+com.Real;

Image=Image+com.Image;

operator-=(CComplex&

com)//重载减法赋值

Real=Real-com.Real;

Image=Image-com.Image;

operator*=(CComplex&

com)//重载乘法赋值

doublenReal=Real*com.Real-Image*com.Image;

doublenImage=Real*com.Image+Image*com.Real;

Real=nReal;

Image=nImage;

operator==(CComplex&

com)//重载等于

if(Real==com.Real&

Image==com.Image)

voidTest(void)//测试函数

user.nTest++;

共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;

a<

加上"

b<

等于"

case1:

answer=a-b;

减去"

case2:

answer=c*d;

c<

乘以"

d<

cin>

temp;

//输入用户计算值

if(answer==temp)//比较用户计算值

score+=10;

此题做错了\n"

正确答案为:

answer<

你的最后得分是:

score<

if(user.nTest<

=3)

user.alAve=0;

user.dlScore[user.nTest-1]=score;

user.nTest;

user.alAve+=user.dlScore[i];

user.alAve=user.alAve/user.nTest;

user.dlScore[0]=user.dlScore[1];

user.dlScore[1]=user.dlScore[2];

user.dlScore[2]=score;

for(i=0,user.alAve=0;

3;

user.alAve=user.alAve/3;

请按任意键继续\n"

cout.flush();

cin.get();

voidAdd()//复数加法运算函数

user.nAdd++;

CComplexnum1,num2,sum,Zero(0,0);

加法计算\n"

最少输入两个复数,并且以0结束\n"

第一个复数:

num1;

第二个复数:

num2;

sum=num1+num2;

第三个复数:

inti=4;

while(!

(num1==Zero))

sum=sum+num1;

第"

个复数:

i++;

加法结果是:

sum<

voidSub()//复数减法预算函数

user.nSub++;

CComplexnum1,num2,sub,Zero(0,0);

最少输入两个复数,并且以0结束\n"

第1个复数:

第2个复数:

sub=num1-num2;

第3个复数:

sub=sub-num1;

减法结果是:

sub<

voidMul()//复数乘积函数

user.nMul++;

CComplexnum1,num2,mul,Zero(0,0);

乘法计算\n"

最少输入两个复数,并且以零结束\n"

mul=num1*num2;

mul*=num1;

乘法结果是:

mul<

voidAdd1()

user.nAdd++;

CComplexnum1;

++num1;

自加的结果为"

num1<

按任意键结束\n"

voidSub1()//复数自加运算函数

--num1;

自减的结果为"

voidcompare()//两复数比较函数

CComplexnum1,num2;

输入两个复数\n"

输入第二个复数\n"

if(num1==num2)

这两个复数相等\n"

elseif(num1>

num2)

的模大于"

num2<

的模\n"

elseif(num1<

这两个复数的模相等\n"

按任意键继续\n"

voiduserprint()//输出用户信息函数

user.szName<

使用的次数为:

user.nTime<

其中:

\t加法的次数:

user.nAdd<

\t减法的次数:

user.nSub<

\t乘法的次数:

user.nMul<

\t测试次数:

user.nTest<

\t平均成绩:

user.alAve<

voidLogin()//当前用户信息函数

请输入您的姓名:

cin.getline(szName,20);

ifstreaminfile;

Useruser1;

infile.open("

user.dat"

ios:

binary|ios:

in);

if(!

infile)

没有原始记录文件,您是第一个用户!

strcpy(user.szName,szName);

return;

infile.read((char*)&

user1,sizeof(User));

infile.eof())

if(strcmp(user1.szName,szName)==0)

user=user1;

user.nTime++;

欢迎您再次使用复数计算器!

userprint();

infile.close();

infile.read((char*)&

voidSaveFile()//用户资料保存函数

fstreamfile;

file.open("

in|ios:

out);

file)

文件打开错误,不能进行更新!

file.seekp(0,ios:

beg);

file.eof())

file.read((char*)&

if(strcmp(user1.szName,user.szName)==0)

file.seekp(-(sizeof(User)),ios:

cur);

file.write((char*)&

user,sizeof(User));

file.close();

fstreamoutfile;

outfile.open("

app);

outfile.write((char*)&

outfile.close();

usingnamespaceNameCComplex;

intmain(void)//主函数开始

srand(time(NULL));

//初始化随机数“种子”语句

Login();

//当前用户信息函数

charstrChoise[20];

//定义字符串名

do

system("

cls"

);

\t这是一个简单的复数计算器程序,可以实现以下功能,请按对应的按键(1-7)\n\n\n"

\t=========================MENU===========================\n"

\t1:

多复数加法,以0结束\n"

\t2:

多复数减法,以0结束\n"

\t3:

测试100以内的复数加减乘法运算,1次测试10道题\n"

\t4:

多复数乘法,以0结束\n"

\t5:

复数自加\n:

\t6:

复数自减\n:

\t7:

复数比较\n:

\t0:

退出程序\n\n:

\t请您选择:

strChoise;

if(strcmp(strChoise,"

1"

)==0)//用户选1则调用Add()函数

Add();

elseif(strcmp(strChoise,"

2"

)==0)//用户选2则调用Sub()函数

Sub();

3"

)==0)//用户选3则调用Test()函数

Test();

4"

)==0)//用户选4则调用Add()函数

Mul();

5"

)==0)//用户选5调用Add1()函数

Add1();

6"

)==0)//用户选6则调用Sub1()函数

Sub1();

7"

)==0)//用户选7则调用Compare()函数

compare();

0"

)==0)//用户选0则结束调用函数

\n\n\t欢迎下次继续使用复数计算器!

\n\n"

\n\t输入错误,请按任意键继续!

while((strcmp(strChoise,"

)));

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1