复数计算器讲义.docx

上传人:b****7 文档编号:11234596 上传时间:2023-02-26 格式:DOCX 页数:11 大小:95.20KB
下载 相关 举报
复数计算器讲义.docx_第1页
第1页 / 共11页
复数计算器讲义.docx_第2页
第2页 / 共11页
复数计算器讲义.docx_第3页
第3页 / 共11页
复数计算器讲义.docx_第4页
第4页 / 共11页
复数计算器讲义.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

复数计算器讲义.docx

《复数计算器讲义.docx》由会员分享,可在线阅读,更多相关《复数计算器讲义.docx(11页珍藏版)》请在冰豆网上搜索。

复数计算器讲义.docx

复数计算器讲义

 

C++实验报告

实验名称:

复数计算器

学号:

姓名:

 

一.目的与要求

目的;当我们输入两个复数时,选择加减乘除符号,就能将正确结果输出,实现一个简单的复数计算器的功能;

要求:

要求:

运行流畅,易于进行检查,有较高的可阅读性,呢呢狗狗满足绝大多数情况,没有溢出现象,尽量体现C++封装的编程思想,减少c语句的使用。

二.工具以及准备工作

工具:

vs2015,电脑一台。

准备工作:

关于数组指针,函数申明与调用的知识。

三.分析

要实现一个复数计算器的功能,并把复数定义成一个类,那我们就需要把虚部与实部分别定义,然后就可以进行运算。

但是输入是一个较为困难的事情,我们如何判断这是复数的虚部还是实部呢,于是我采用权重的方法来进行区分,我们设定一个intn,来记录权重,每录入一个实部的数,就加一,来记录权重,那么虚部前面的符号的权重就不为一,此处,虚部与实部的正负号便区分开来,那么后面的数也可以区分开来,那么后面的运算符重载都是对已有知识的运用。

类的定义:

classcomplexnumber

{

private:

doubleReal;//实数部分的值

doubleImage;//虚数部分的值

public:

complexnumber(doublereal=0,doubleimage=0)

{

Real=real;

Image=image;

}

friendistream&operator>>(istream&is,complexnumber&com);//重载运算符

friendostream&operator<<(ostream&os,complexnumber&com);

doublemod(void);

complexnumberoperator+(complexnumber&com);

complexnumberoperator-(complexnumber&com);

complexnumberoperator*(complexnumber&com);

complexnumberoperator/(complexnumber&com);

};

代码具体功能分析见核心算法实现代码每一行后的注释

核心代码:

doublecomplexnumber:

:

mod()

{

returnReal*Real+Image*Image;//复数的模值,在后面会用到

}

istream&operator>>(istream&is,complexnumber&com)

{

charyunsuanshi[80];//定义一个char型数组,方便后面的输入

is>>yunsuanshi;//将is输入到char型

intlen=strlen(yunsuanshi);

intn=0,sign=1;//n设为权重,sign则是符号

com.Image=0;

com.Real=0;//实部与虚部的值同样初始化为0;

for(intk=0;k

{

if((yunsuanshi[k]<'0'||yunsuanshi[k]>'9')&&yunsuanshi[k]!

='+'&&yunsuanshi[k]!

='-'&&yunsuanshi[k]!

='i')//判断输入是否有误

{

cout<<"error"<

returnis;

}

}

for(intk=0;k

{

if(n!

=0&&(yunsuanshi[k]=='-'||yunsuanshi[k]=='+'))//判断是否虚部的符号位,

{

com.Real=sign*n;//输出实部的值

}

if(yunsuanshi[k]=='-')

{

sign=-1;

k++;

}

if(yunsuanshi[k]=='+')

{

sign=1;k++;

}

if(yunsuanshi[k]=='i')

{

if(k!

=len-1)//如果虚部的i不在最后一位的话,输入错误

cout<<"error\n";

else

com.Image=sign*n;

break;

}

while(yunsuanshi[k]>='0'&&yunsuanshi[k]<='9')

{

n=n*10+yunsuanshi[k]-'0';

k++;

}

}

if(yunsuanshi[len-1]!

='i'&&n!

=0)

{

com.Real=n*sign;

}

returnis;

}

ostream&operator<<(ostream&os,complexnumber&com)

{

if(fabs(com.Image)==0.0)//如果虚部的值为零

os<

elseif(fabs(com.Real)==0.0)//如果实部的值为零

os<

elseif(com.Image>0)//判断输出的虚部前应带正号和负号

os<

elseos<

returnos;

}

complexnumbercomplexnumber:

:

operator+(complexnumber&com)

{

complexnumbers;

s.Real=Real+com.Real;

s.Image=Image+com.Image;

returns;

}

complexnumbercomplexnumber:

:

operator*(complexnumber&com)

{

complexnumberm;

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

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

returnm;

}

complexnumbercomplexnumber:

:

operator-(complexnumber&com)

{

complexnumberb;

b.Real=Real-com.Real;

b.Image=Image-com.Image;

returnb;

}

complexnumbercomplexnumber:

:

operator/(complexnumber&com)

{

complexnumberd;

if((com.Real*com.Real+com.Image*com.Image)==0.0)

cout<<"NOROSOLUTION";

else

d.Real=(Real*com.Real-Image*com.Image)/(com.Real*com.Real+com.Image*com.Image);

d.Image=Real*com.Image+Image*com.Real/(com.Real*com.Real+com.Image*com.Image);

returnd;

}

intmain()

{

complexnumbera,b,c;

cout<<"·······欢迎·······"<

cout<<"请输入操作数一"<

cin>>a;

cout<<"请输入操作数二"<

cin>>b;

cout<<"请输入选择的运算符:

+-*/"<

chard;

cin>>d;

if(d!

='*'&&d!

='+'&&d!

='-'&&d!

='/')

{

cout<<"选择运算符错误"<

cin>>d;

}

switch(d)

{

case'+':

c=a+b;

cout<

break;

case'-':

c=a-b;

cout<

break;

case'*':

c=a*b;

cout<

break;

case'/':

c=a/b;

cout<

break;

}

system("pause");

return0;

}

四.实现步骤

1.看清实验要求,并思考,确定大致思路

2.打开visualstudio2015

3.创建新项目

4.确定算法并进行学习尔后添加所需要的必要库文件

5.开始编写代码

6.进行检查

7.运行并调试

8.完善功能

五.测试与结论

测试结果如下:

1.加法

2.乘法

3.减法

 

4.除法

六.实验总结

在此次实验中,实现的功能十分简单,也没有什么创新性的功能,但我觉得这其中比较巧妙的是,使用权重来进行复数符号位的判定,并且为了便于使用,加入了输入报错功能。

就我自身的感触而言,代码行数明显加长,函数数量与质量都有增长,有一种做工程的感觉(因为真的是做好之后一个一个的调用)。

正因为如此,函数调用起来也需要经常翻页查看功能,在最后还出现了一个bug,弄了好久才消掉(其实现在回过头来看这个bug真的是一个小细节没有想清楚),想着以后可能会打成千上万行的代码,觉着这还是为自己提了个醒,程序员必须把自己写的程序当亲儿子养才行。

总之,在这次实验中,体会到了细心与耐心是程序员两个必备的素质,自己也要向这方面努力啊。

 

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

当前位置:首页 > 高中教育 > 其它课程

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

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