1、复数计算器讲义C+实验报告实验名称:复数计算器学号: 姓名: 一 目的与要求目的;当我们输入两个复数时,选择加减乘除符号,就能将正确结果输出,实现一个简单的复数计算器的功能;要求:要求:运行流畅,易于进行检查,有较高的可阅读性,呢呢狗狗满足绝大多数情况,没有溢出现象,尽量体现C+封装的编程思想,减少c语句的使用。二 工具以及准备工作工具:vs2015,电脑一台。准备工作:关于数组指针,函数申明与调用的知识。三 分析要实现一个复数计算器的功能,并把复数定义成一个类,那我们就需要把虚部与实部分别定义,然后就可以进行运算。但是输入是一个较为困难的事情,我们如何判断这是复数的虚部还是实部呢,于是我采用
2、权重的方法来进行区分,我们设定一个int n,来记录权重,每录入一个实部的数,就加一,来记录权重,那么虚部前面的符号的权重就不为一,此处,虚部与实部的正负号便区分开来,那么后面的数也可以区分开来,那么后面的运算符重载都是对已有知识的运用。类的定义:class complexnumberprivate: double Real;/实数部分的值 double Image;/虚数部分的值public: complexnumber(double real = 0, double image = 0) Real = real; Image = image; friend istream & operat
3、or(istream & is, complexnumber &com);/重载运算符 friend ostream & operator (istream &is,complexnumber &com) char yunsuanshi80;/定义一个char型数组,方便后面的输入 is yunsuanshi;/将is输入到char型 int len = strlen(yunsuanshi); int n = 0, sign = 1;/n设为权重,sign则是符号 com.Image = 0; com.Real = 0;/实部与虚部的值同样初始化为0; for (int k = 0; k le
4、n; k+) if (yunsuanshik9) & yunsuanshik != +&yunsuanshik!=-&yunsuanshik != i)/判断输入是否有误 cout error endl; return is; for (int k = 0; k len;)/顺序识别字符串中各字符 if (n != 0 & (yunsuanshik = - | yunsuanshik = +)/判断是否虚部的符号位, com.Real = sign*n;/输出实部的值 if (yunsuanshik = -) sign = -1; k+; if (yunsuanshik = +) sign =
5、 1; k+; if (yunsuanshik = i) if (k != len - 1)/如果虚部的i不在最后一位的话,输入错误 cout = 0&yunsuanshik = 9) n = n * 10 + yunsuanshik - 0; k+; if (yunsuanshilen - 1 != i&n != 0) com.Real = n*sign; return is;ostream & operator (ostream &os, complexnumber &com) if (fabs(com.Image) =0.0)/如果虚部的值为零 os com.Real; else if
6、(fabs(com.Real) =0.0)/如果实部的值为零 os com.Image 0)/判断输出的虚部前应带正号和负号 os com.Real + fabs(com.Image) i; else os com.Real - fabs(com.Image) i; return os;complexnumber complexnumber:operator +(complexnumber &com) complexnumber s; s.Real = Real + com.Real; s.Image = Image + com.Image; return s;complexnumber co
7、mplexnumber: operator*(complexnumber &com) complexnumber m; m.Real = Real*com.Real-Image*com.Image; m.Image = Real*com.Image + Image*com.Real; return m;complexnumber complexnumber:operator-(complexnumber &com) complexnumber b; b.Real = Real - com.Real; b.Image = Image - com.Image;return b;complexnum
8、ber complexnumber:operator/(complexnumber &com) complexnumber d; if (com.Real*com.Real + com.Image*com.Image) = 0.0) cout NO ROSOLUTION; 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*
9、com.Image); return d;int main() complexnumber a, b, c; cout欢迎 endl; cout 请输入操作数一 a; cout 请输入操作数二 b; cout 请输入选择的运算符: + -*/ d; if(d!=*&d!=+&d!=-&d!=/) cout 选择运算符错误 d; switch (d) case +: c = a + b; cout c; break; case -: c = a - b; cout c; break; case *: c = a * b; cout c; break; case /: c = a / b; cou
10、t c; break; system(pause); return 0;四 实现步骤 1. 看清实验要求,并思考,确定大致思路2. 打开visual studio 20153. 创建新项目4. 确定算法并进行学习尔后添加所需要的必要库文件5. 开始编写代码6. 进行检查7. 运行并调试8. 完善功能五 测试与结论测试结果如下:1.加法2乘法3.减法4.除法六 实验总结在此次实验中,实现的功能十分简单,也没有什么创新性的功能,但我觉得这其中比较巧妙的是,使用权重来进行复数符号位的判定,并且为了便于使用,加入了输入报错功能。就我自身的感触而言,代码行数明显加长,函数数量与质量都有增长,有一种做工程的感觉(因为真的是做好之后一个一个的调用)。正因为如此,函数调用起来也需要经常翻页查看功能,在最后还出现了一个bug,弄了好久才消掉(其实现在回过头来看这个bug真的是一个小细节没有想清楚),想着以后可能会打成千上万行的代码,觉着这还是为自己提了个醒,程序员必须把自己写的程序当亲儿子养才行。总之,在这次实验中,体会到了细心与耐心是程序员两个必备的素质,自己也要向这方面努力啊。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1