课程设计——复数计算器
C++程序设计-复数计算器
《C++面向对象程序设计》课程设计系专:班级:姓名:学号:指导老师:目录一、设计课题目的 (3)二、课程设计任务及要求 (3)三、课程设计总思路 (4)四、程序源代码 (4)五、运行结果显示 (11)六、本次课程设计的总结 (14)七、参考文献 (14)一、设计课题目的通过C++ 课程设计,使学生能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述,掌握面向对象设计语言的方法。
同时,在实践过程中达到对C++ 语言程序设计的深入理解和熟练掌握。
二、课程设计任务及要求1、任务:课程设计选题是“小型复数计算器”,其任务:请用面向对象方法设计并实现一个小型复数计算器,功能包括:(1)实现复数的设置和显示。
(2)实现复数加减乘除功能,并显示运算结果。
2、要求:1、利用C++ 面向对象方法设计该程序,并实现其功能。
2、从键盘以a+bi的形式输入复数。
3、仿照计算器的运算过程,采用计算器方式进行有关分数运算。
三、课程设计总思路根据题中任务的功能,首先要搞清复数的运算法则,并使用c++语言表达。
复数包含实部与虚部,如何将这两部分表达出来也使关键。
主要需要定义一个cal类。
里面定义了复数所需的各种计算符,来实现复数的各种运算。
esc 函数实现提取输入的实部和虚部。
add 函数实现函数的加法运算。
sub 函数实现函数的减法运算。
mul 函数实现函数的乘法运算。
div 函数实现函数的除法运算。
在主函数中调用类中已定义的函数来实现程序。
四、程序源代码:#include<iostream>#define M 20using namespace std;class cal //定义一个类{public:cal(char a[M]){pt=a;}void esc(); //实现提取输入的实部和虚部void add(); //实现加法void sub(); //实现减法void mul(); //实现乘法void div(); //实现除法void out(); //输出结果void pass(); //传递数据private:char *p,*pt;float SUM_1,SUM_2,A,B;};//成员函数的实现void cal::esc(){int m,n,n2,m2;float shi=0,shi2=0,xu=0,xu2=0;if(pt[0]=='-')p=pt+1;else p=pt;for(m=0;m<M;m++){shi=shi*10+float(p[m]-48);if(p[m+1]=='+'||p[m+1]=='-'){m2=m+1;n2=m;break;}if(p[m+1]=='.'){n=m+2;n2=n-1;for(m=n;m<M;m++){if(p[m]=='-'||p[m]=='+'){m2=m;break;}n2++;}for(m=n2;m>=n;m--){shi2=shi2/10+float(p[m]-48);}break;}}shi+=shi2/10;if(pt[0]=='-')shi=0-shi;for(m=n2+2;m<M;m++){xu=xu*10+float(p[m]-48);if(p[m+1]=='i')break;if(p[m+1]=='.'){n=m+2; n2=n-1;for(m=n;m<M;m++){if(p[m]=='i')break;n2++;}for(m=n2;m>=n;m--){xu2=xu2/10+float(p[m]-48);}break;}}xu+=xu2/10;if(p[m2]=='-')xu=0-xu; A=shi;B=xu;}void cal::pass(){SUM_1=A;SUM_2=B;}void cal::add(){SUM_1+=A;SUM_2+=B;}void cal::sub(){SUM_1-=A;SUM_2-=B;}void cal::mul(){float C=SUM_1;SUM_1=SUM_1*A-B*SUM_2;SUM_2=B*C+SUM_2*A;}void cal::div(){float C=SUM_1;float D=(A*A+B*B);SUM_1=(SUM_1*A+B*SUM_2)/D;SUM_2=(B*C-SUM_2*A)/D;}void cal::out(){cout<<"----"<<endl;if(SUM_2<0)cout<<SUM_1<<SUM_2<<"i"<<endl;elsecout<<SUM_1<<"+"<<SUM_2<<"i"<<endl;}//主函数int main(){cout<<"这是一个简单的复数计算器,具有对复数进行'+,-,*,/' 运算的能力。
复数计算器 实验报告
中南大学高级程序设计实践(C++)课程设计报告题目复数计算器学生姓名指导教师陈丽萍学院信息科学与工程学院专业班级通信工程1301班完成时间 2014年7月5日第一章需求分析与程序设计1.1 需求分析1.1.1程序设计的目的与任务1.复习和巩固C++语言的基础知识,进一步加深对C++语言的理解和掌握。
2.为学生提供独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生独立分析问题、解决问题、查阅资料以及自学能力。
3.学习和掌握C++程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基础。
4.在程序实现过程中,需利用面向对象程序设计理论的基础知识,充分体现出C++语言关于类、继承、封装与多态等核心概念,每一个类应包含数据成员和成员函数,以实现预期的功能,解决实际问题。
1.1.2“复数计算器”程序所能实现的功能1.建立实数类、复数类,复数类由实数类公有继承而来。
2.实现实数、复数信息的初始化。
3.通过选择结构和调用相关函数实现实数的相关运算,包括:两个实数间的加、减、乘、除和一个实数的自增、自减、求平方、二次方根等运算。
4.通过选择结构和调用相关函数实现复数的相关运算,包括:两个复数间的加、减、乘、除、求两个复数的夹角和一个复数的取模、求平方、求共轭复数、求单个复数的向量角等运算。
5.通过调用相关函数实现实数、复数信息的输出,显示在显示屏上。
6.通过多次运用选择和循环结构实现对实数、复数运算的选择,在选择了实数或复数运算的前提下,再实现对各种运算的选择,运算结束后还可以选择继续实现其它运算或退出程序。
1.2 程序设计1.2.1概要设计1.系统中的各个实体及它们之间的关系系统中的实体是实数类对象和复数类对象,它们的关系是复数类对象所属的类是由实数类对象所属的类公有派生而来的。
2.系统的类层次程序中建立了两个类,分别是实数类、复数类,复数类是由实数类公有派生而来的。
3.主程序的流程以及各程序模块之间的层次(调用)关系首先从键盘输入数字1或2或0,输入不同数字则进入不同的并列的小程序模块。
C++程序课程设计_复数计算器
合肥工业大学课程设计报告课程名称C++语言课程设计课题名称复数计算器专业信息与计算科学班级09-1班学号20096353姓名王豹指导教师陈老师2011 年6月6 日目录一、目的与要求………………………………………………………………公布、描述课程设计的目的,约束条件,要求达到的目标等内容一致。
二、工具/准备工作………………………………………………………在开放做课程设计项目前,应回顾或复习的相关内容:需要的硬件设施与需要的安装哪些c++集成开发软件。
三、分析………………………………………………………………………分析课程设计项目的实现方法,并写出类申明的核心算法和实现代码。
四、实现步骤…………………………………………………………………详细介绍项目的操作步骤五、测试与结果………………………………………………………………课程设计程序的屏幕显示,并加以简单的文字说明,注意程序运行要覆盖算法的各种情况,最后说明课程设计是否满足课程设计的要求六、课程设计总结…………………………………………………………主要说明程序设计的特点,进行了哪些功能的拓展,特别是独创或创新的部分,相关课程设计项目最有价值的内容,在哪些方面需要进一步的了解或得到帮助,以及编程实现课程设计的感悟等内容。
一、目的与要求为复数计算器定义一个类,复数的形式为 : a+bi其中a,b是double类型的数字,i为复数符号,将成员变量命名为realPart (实部)和imagePart(虚部),将类命名为Complex重载输入和输出运算符>>和<<。
复数以1+2i,5-32i,3,2i等这样的形式输出,重载以下所有运算符,使他们能正确输出Complex类型:+-*/二、工具/准备工作实验开始前,先回顾和复习相关内容在自己的电脑上安装Visual C++,Dev-C++等集成开发软件三、分析#include "stdafx.h"#include<iostream>#include<cmath>//#include<stdio.h>#include<conio.h>#include<cstdlib>#include<iomanip>#include<string>using namespace std;定义一个Complex类class Complex{private:double Real;double Image;public:Complex(double real=0,double image=0) //构造函数{Real=real;Image=image;}friend istream & operator>>(istream &is,Complex &com); //重载输入friend ostream & operator<<(ostream &os,Complex &com); //重载输出double mod(void); //求复数的模Complex operator+(Complex &com); //加法重载Complex operator-(Complex &com); //减法重载Complex operator*(Complex &com); //乘法重载Complex operator/(Complex &com); //除法重载};四、实现步骤double Complex::mod() //求复数的模的平方,返回实部^2+虚部^2{return Real*Real+Image*Image;}istream & operator>>(istream &is,Complex &com) //重载输入,可以输入a+bi的形式{char s[80];is>>s; //用字符串的形式接受复数int len=strlen(s); //求出字符串的长度int n=0,sign=1;//n为当前从字符串中提取出来的数字,初始化为1;sign是符号,初始化为正com.Image=0;com.Real=0;for(int k=0;k<len;k++) //判断接受的字符串是否合法{if((s[k]<'0' || s[k]> '9') && s[k]!='+' && s[k]!='-' && s[k]!='i'){cout<<"error"<<endl;return is; //错误,输出出错信息并返回}}for(int k=0;k<len;) //顺序识别字符串中各字符{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"; //如果不是,说明复数数据格式错误elsecom.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;}return is;}ostream & operator<<(ostream &os,Complex &com) //重载输{if(fabs(com.Image)<EPS) // 如果虚部为0os<<com.Real; //只输出实部elseif((fabs(com.Real)<EPS)) //如果实部为0os<<com.Image<<"i"; //只输出虚部elseif(com.Image>0)os<<com.Real<<"+"<<com.Image<<"i";elseos<<com.Real<<com.Image<<"i"; //虚部为正return os;}Complex Complex::operator+(Complex &com) //加法重载{Complex sum;sum.Real=Real+com.Real; //实部相加sum.Image=Image+com.Image; //虚部相加return sum;}Complex Complex::operator*(Complex &com) //乘法重载{Complex multi;multi.Real=Real*com.Real-Image*com.Image; //乘积实部multi.Image=Real*com.Image+Image*com.Real; //乘积虚部return multi;}Complex Complex::operator-(Complex &com) //减法重载{Complex sub;sub.Real=Real-com.Real;sub.Image=Image-com.Image;return sub;}Complex Complex::operator/(Complex &com) //除法重载{Complex dev;if((com.Real*com.Real+com.Image*com.Image)==0.0)cout<<"无解";elsedev.Real=(Real*com.Real-Image*com.Image)/(com.Real*com.Real+com.Image*com.Image);dev.Image=Real*com.Image+Image*com.Real/(com.Real*com.Real+com.Image*com.Image);return dev;}int main(){Complex a,b,c;//cin>>a;//cout<<a;for(int i=0;;){cout<<"………………欢迎使用复数计算器………………"<<endl;cout<<"………………………………………………………"<<endl;cout<<"请输入第一个复数操作数:"<<endl;cin>>a;cout<<"请输入第二个复数操作数:"<<endl; cin>>b;cout<<"请输入选择的运算符:+-*/"<<endl; char d;cin>>d;for(;d!='+'&&d!='*'&&d!='-'&&d!='/';) {cout<<"选择运算符错误!"<<endl;cin>>d;}switch(d){case '+':c=a+b ;cout<<"运算结果如下:"<<endl;cout<<c;break;case '-':c=a-b;cout<<"运算结果如下:"<<endl;cout<<c;break;case '*': c=a*b;cout<<"运算结果如下:"<<endl;cout<<c;break;case '/':c=a/b;cout<<"运算结果如下:"<<endl;cout<<c;break;}getch();return 0;}}int _tmain(int argc, _TCHAR* argv[]){Complex a,b,c;//cin>>a;//cout<<a;for(int i=0;;){cout<<"………………欢迎使用复数计算器………………"<<endl; cout<<"………………………………………………………"<<endl;cout<<"请输入第一个复数操作数:"<<endl;cin>>a;cout<<"请输入第二个复数操作数:"<<endl;cin>>b;cout<<"请输入选择的运算符:+-*/"<<endl;char d;cin>>d;for(;d!='+'&&d!='*'&&d!='-'&&d!='/';){cout<<"选择运算符错误!"<<endl;cin>>d;}switch(d){case '+':c=a+b ;cout<<"运算结果如下:"<<endl;cout<<c;break;case '-':c=a-b;cout<<"运算结果如下:"<<endl;cout<<c;break;case '*': c=a*b;cout<<"运算结果如下:"<<endl;cout<<c;break;case '/':c=a/b;cout<<"运算结果如下:"<<endl;cout<<c;break;}getch();return 0;}}五、测试与结果数据处理测试,如图所示1 加法2减法3乘法4除法六、课程设计总结拓展功能:无感悟:已经是第二次接触 C++了,感觉还是有些朦胧,但通过老师的悉心教导和跟同学们之间的沟通与交流后,学会了很多东西。
复数计算器课程设计
复数计算器课程设计-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN目录1 题目内容及设计要求 .......................... 错误!未定义书签。
2 总体设计.............................................. 错误!未定义书签。
总体功能框图.................................. 错误!未定义书签。
类的设计说明 ................................. 错误!未定义书签。
主要算法流程图 ............................. 错误!未定义书签。
3 程序清单及注释................................. 错误!未定义书签。
4 运行结果与分析................................. 错误!未定义书签。
5 总结 .................................................... 错误!未定义书签。
6 参考文献 ............................................ 错误!未定义书签。
1 题目内容及设计要求题目17 复数计算器内容及要求:(1)所设计的复数计算器可以进行+ - * += -= *= ++ -- >= <= == !=运算符,其中>= <=是针对复数的模进行运算。
(2)设计输入重载函数,要求能接收从键盘输入a+bi形式的复数,在程序中可以识别出实部虚部并正确赋值。
(3) 设计计算器测试程序,对加减法进行测试,要求在两位数以内进行,对乘法进行测试,乘法要求为一位数的运算。
(4) 设计记录功能,可以记录下不同用户使用计算器的情况,记录以文件的形式保存在计算机内,开机时要求用户输入用户名,显示该名户以前的记录。
C++课程设计报告复数计算器
目录第一章需求分析 (1)第二章概要设计 (2)第三章详细设计 (4)第四章调试分析 (21)第五章测试结果 (25)第六章课程设计总结 (36)第七章参考文献 (37)第八章附录 (37)第一章需求分析1.1程序设计的任务1.1.1编程目的1.本次程序设计的目的运用面向对象程序设计知识,利用C++语言设计和实现一个复数计算器,要求具备如下主要功能:(1)建立实数类、复数类(2)实现实数、复数信息的初始化(3)实现实数的加、减、乘、除、自增、自减、求平方、二次方根等操作(4)实现复数的加、减、乘、除、取模、求平方、求共轭复数、求单个复数的向量角、求两个复数的夹角等运算(5)实现实数、复数信息的输出1.1.2编程要求在实现过程中,需利用面向对象程序设计理论的基础知识,充分体现出C++语言关于类、继承、封装与多态等核心概念,每一个类应包含数据成员和成员函数。
1.1.3数据范围数据输入的形式为float型,输出形式亦是float型,数据(实数、复数的实部、虚部)范围是-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38。
1.2本程序能实现的功能1.2.1实数类(Complex)所实现的功能:实数的加法运算、减法运算、乘法运算、除法运算、前置自增运算、后置自增运算、前置自减运算、后置自减运算、求平方运算、求平方根运算;1.2.2复数类(Complex1)所实现的功能:复数的加法运算、减法运算、乘法运算、除法运算、模长运算、求平方运算、共轭复数运算、求单个复数的向量角运算、求两个复数的夹角运算。
1.2.3主函数所能实现的功能1.提供给操作者操作数据的类型(实数还是复数)的标识;2.操作者选择数据类型后,提供运算类型操作的标识;3.运用指针调用两个类的各成员函数分别完成各项计;第二章概要设计2.1构成部分2.1.1系统由三部分构成:实数类(Complex)、复数类(Complex1)、主函数main。
复数计算器讲义范文
复数计算器讲义范文一、引言复数是数学中的一个重要概念,它是由实数和虚数构成的数。
复数计算器是一种能够进行复数运算的电子设备,能够计算两个复数的加减乘除,以及求模、求幅角等操作。
本讲义将介绍复数计算器的基本原理、使用方法以及一些实际应用。
二、复数的表示和运算1.复数的表示复数可以表示为 a + bi 的形式,其中 a 是实数部分,bi 是虚数部分,并且 i 是虚数单位,满足 i^2 = -1、在复数计算器中,可以使用直角坐标系或极坐标系表示复数。
2.复数的加减运算复数的加减运算通过对实部和虚部分别进行相应的加减操作来完成。
例如,(a + bi) + (c + di) = (a + c) + (b + d)i。
3.复数的乘法运算复数的乘法运算可以通过将两个复数的实部和虚部进行相应的乘法操作,并根据 i^2 = -1 的性质进行化简。
例如,(a + bi) * (c + di) = (ac - bd) + (ad + bc)i。
4.复数的除法运算复数的除法运算可以通过先将被除数和除数的实部和虚部相应地分别相乘,然后根据分数的除法性质进行运算。
例如,(a + bi) / (c + di)= ((ac + bd) / (c^2 + d^2)) + ((bc - ad) / (c^2 + d^2))i。
5.复数的模和幅角复数的模表示复数离原点的距离,可以通过求实部和虚部的平方和的平方根来计算。
例如,模为,a + bi,= √(a^2 + b^2)。
复数的幅角表示复数与正实轴的夹角,可以通过反正切函数来计算。
例如,幅角为 arg(a + bi) = atan(b / a)。
三、复数计算器的使用方法1.输入复数在复数计算器中,可以通过按键输入实部和虚部来表示一个复数。
一般来说,实部可以使用数字键输入,虚部使用i键输入。
例如,要输入复数3+4i,可以按下数字键3,然后按下+键,最后按下数字键4和i键。
2.进行计算一般来说,复数计算器有加减乘除等运算符键,可以通过按下对应的运算符键来进行复数的加减乘除运算。
C++复数计算器管理系统
C++程序设计课程设计复数计算器管理系统指导教师:陈淑鑫设计时间:2007年9月23日至2007年9月28日复数计算器管理系统一、需求分析随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
计算器软件系统应该能够为用户提供丰富的手段。
作为计算机应用的一部分,使用计算机进行数学运算,具有着其他方式所无法比拟的优点.例如:图文并茂、查找方便、价格便宜、可保存信息、保密性好等。
这些优点能够极大地提高的效率,也是国家的科学化、信息化管理,与世界接轨的重要条件。
因此,开发这样一套计算器软件成为很有必要的事情,在下面的各章中我们将以开发一套计算器软件系统为例,谈谈其开发过程和所涉及到的问题及解决方法。
要想进行复数计算器管理就必须有辅助管理可供选择的菜单和可返回的菜单界面,因此在程序中编写函数void select(),void menu()来完成上述功能。
在选择菜单中(void select())中提供了6项服务内容:0.退出系统;1.多复数加法;2.多复数减法;3多复数乘法;4.测试100以内的复数加减乘法运算,1次测试10道题;5.多复数比较;并分别编写函数void exit()、void input()、void search( )、void change()、void omit()、voit output()来实现其功能。
定义了类,调用时就需用到C++I/O流,为了方便起见,在主程序定义了读函数 void read()和写函数 void write()。
程序中还对登记号的自动排序和自动统计做了相应的处理。
二、系统的软硬件环境1、硬件环境:主机 Pentium4、2.4Hz 内存 256MB光驱 24倍速以上硬盘空间 80G2、软件环境:Windows 2000/XP Visual C++ 6.0编译器3系统模块功能2.模块功能及程序操作步骤1).设计思路(1)在该实验设计中首先类是创建对象的模板,它包含着所创建的的状态描述和方法的定义。
C++复数计算器日志附源代码
日期: 2011.12.5 星期一今天任务:根据题意分析与设计分析题目要求,进行类的结构与关系设计包括设计好类的数据成员与函数成员明确好类与类之间的关系类设计文档(uml类结构图,对图像及相关说明)。
实验题目:C++复数计算器设计分析:题目要求1.复数计算器可以进行+ - * += -= *= ++ -- >= <= == !=运算符,其中>= <=是针对复数的模进行运算。
2.要求能接收从键盘输入a+bi形式的复数。
3.加减法进行测试,要求在两位数以内进行,对乘法进行测试,乘法要求为一位数的运算。
4.记录下不同用户使用计算器的情况,记录以文件的形式保存在计算机内,开机时要求用户输入用户名,显示该名户以前的记录。
分析根据题中任务的功能,首先要搞清复数的运算法则,并使用c++语言表达。
复数包含实部与虚部,如何将这两部分表达出来也使关键定义一个复数类complex。
声明所需成员函数和友元函数对各运算符进行重载。
定义各成员函数。
定义主函数,实现对整个程序的控制。
编译、运行并调试流程图构架开始声明一个complex类,并定义 real,image;声明类的函数,构造函数,加减乘除和取模运算c.real=real+c2.real;c.imag=imag+c2.imag;c.real=real-c2.real;c.imag=imag-c2.imag;c.real=real*c2.real-imag*c2.imag;c.imag=real*c2.imag+imag*c2.real;Sqrt(real*real=imag*imag);输出c1,c2,c1+c2,c1-c2,c1*c2,c1/c2, ∣c1∣的值终止UML类结构图Complexf-Real:double-Image:double+friend istream & operator>>(istream &is,CComplex &com ) +friend ostream & operator<<(ostream &os,CComplex &com +CComplex operator+(CComplex &com)+CComplex operator-(CComplex &com)+CComplex operator*(CComplex &com)+CComplex operator+=(CComplex &com)+CComplex operator-=(CComplex &com)+CComplex operator*=(CComplex &com)+CComplex operator++();+CComplex operator--();+double mod (void);+int operator>(CComplex &com);+int operator<(CComplex &com);+int operator!=(CComplex &com);+int operator==(CComplex &com);复数类设计class Complex{private:double Real,Image;public:Complex(double real=0,double image =0) //构造函数{Real=real;Image=image;}friend istream & operator>>(istream &is,Complex &com ); //重载输入friend ostream & operator<<(ostream &os,Complex &com); //重载输出Complex operator+(Complex &com); //加法重载Complex operator-(Complex &com); //减法重载Complex operator*(Complex &com); //乘法重载Complex operator+=(Complex &com); //加法赋值重载Complex operator-=(Complex &com); //减法赋值重载Complex operator*=(Complex &com); //乘法赋值重载Complex operator++(); //自加Complex operator--(); //自减double mod (void); //求复数的模int operator>(Complex &com);int operator<(Complex &com);int operator!=(Complex &com);int operator==(Complex &com);};用户记录(使用结构体)struct User{char Name[20];int nTime;int nTest;double dlAve;int nAdd;int nSub;int nMul;double dlScore[3];} user日期: 2011.12.6 星期二今天任务:类代码实现写出个各类的代码实现用文件结构来写即每个类的头文件与类的实现文件提交类的相关代码并且有较详细的注释类代码实现如下:#include <iostream>#include <cmath>#include <cstdlib>#include <cstring>#include <fstream>#include <ctime>// 重载运算符“++”,实部与虚部均加 1 Complex Complex::operator ++ (){Real++;Image++;return *this;}// 重载运算符“--”,实部与虚部均减 1 Complex Complex::operator -- (){Real--;Image--;return *this;}// 求复数的模,返回实部^2 + 虚部^2 double Complex::mod(){return Real * Real + Image * Image;}// 重载运算符“>”,比较模的大小int Complex::operator > (Complex & com) {if ( mod() > com.mod() )return 1; // 若大,则返回 1elsereturn 0;}// 重载运算符“<”,比较模的大小int Complex::operator < (Complex & com)if ( mod() < com.mod() )return 1; // 若小,则返回 1elsereturn 0;}// 重载运算符“!=”,分别判断复数的实部与虚部int Complex::operator != (Complex & com){if ( *this==com )return 0;elsereturn 1;}// 重载复数的输入, a+bi 的形式istream & operator >> (istream & is, Complex & com){cout << "输入复数:";char s[80];is >> s; // 用字符串的形式接收复数int len = strlen(s); // 求出字符串的长度int n = 0, sign = 1; // 其中的n 值为当前从字符串中提取出的数字,会在下面的 while 语句中得到确定的值// sign 为状态变量,表示数值的正负符号,以辅助辨认正负值com.Image = com.Real = 0;// 判断接收的字符串是否合法for(int k=0; k<len; k++){if ( (s[k]<'0' || s[k]>'9') && (s[k]!='+' && s[k]!='-' && s[k]!='i') ){cout << "error" << endl;return is; // 错误,输出出错信息并返回}// 顺序识别字符串中各字符for(int k=0; k<len;){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 赋值,表示为负数}if ( s[k] == '+') // 当前字符若为正号{sign = 1; k++; // 给符号标志变量sign 赋值,表示为正数}if ( s[k]=='i' ) // 若当前字符为“i”{if ( k!=len-1 ) // 判断字符'i' 是否为字符串中最后一个字符cout << "error\n"; // 如果不是,说明复数数据格式错误 elsecom.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',表示复数对象内只有实部,没有虚部,如:-acom.Real = n * sign;return is;}// 重载复数的输出ostream & operator << (ostream & os, Complex & com){if ( fabs(com.Image)==0 ) // 如果虚部为 0os << com.Real; // 只输出实部else if ( fabs(com.Real)==0 ) // 如果实部为 0os << com.Image << "i"; // 只输出虚部else if ( com.Image>0 )os << com.Real << "+" << com.Image << "i"; // 虚部为正elseos << com.Real << com.Image << "i"; // 如实部为 3,虚部为-6i,就变为 3 - 6i,而不是 3 + -6ireturn os;}// 加法重载Complex Complex::operator + (Complex & com){Complex sum;sum.Real = Real + com.Real; // 实部相加sum.Image = Image + com.Image; // 虚部相加return sum;}// 乘法重载Complex Complex::operator * (Complex & com){Complex multi;multi.Real = Real * com.Real - Image * com.Image; // 乘积实部 multi.Image = Real * com.Image + Image * com.Real; // 乘积虚部 return multi;}// 减法重载Complex Complex::operator - (Complex & com){Complex sub;sub.Real = Real - com.Real; // 实部相减sub.Image = Image - com.Image; // 虚部相减return sub;}// 加法赋值重载Complex Complex::operator += (Complex & com){Real = Real + com.Real; // 实部Image = Image + com.Image; // 虚部return *this;}// 减法赋值重载Complex Complex::operator -= (Complex & com){Real = Real - com.Real; // 实部Image = Image - com.Image; // 虚部return *this;}// 乘法赋值重载Complex Complex::operator *= (Complex & com){double nReal = Real * com.Real - Image * com.Image; // 乘积实部 double nImage = Real * com.Image - Image * com.Real; // 乘积虚部 Real = nReal;Image = nImage;return *this;}// 重载 == 运算符,分别比较两个复数对象的实部和虚部int Complex::operator == (Complex & com){if ( Real==com.Real && Image==com.Image )return 1; // 实部与虚部部分相等,则返回 1elsereturn 0;}日期: 2011.12.7 星期三今天任务:类与对象的调试功能函数实现创建对象并对每个类的操作进行调试功能函数如下void Add() //复数加法{user.nAdd++;Complex num1, num2, sum, Zero(0, 0);cout << "\t加法计算\n" << "\t最少输入两个复数,输入“”结束\n";cout << "\t第个复数:";cin >> num1;cout << "\t第个复数:";cin >> num2;sum = num1 + num2;cout << "\t第个复数:";cin >> num1;for ( int i=4;!(num1==Zero) ;i++){sum = sum + num1;cout << "\t第" << i << "个复数:";cin >> num1;}cout << "\t结果是:" << sum << endl;cout << "\t";cout.flush();cin.get();cin.get();}void Sub() //复数减法{user.nSub++;Complex num1, num2, sub, Zero(0, 0);cout << "\t减法计算\n" << "\t最少输入两个复数,输入“”结束\n";cout << "\t第个复数:";cin >> num1;cout << "\t第个复数:";cin >> num2;sub=num1-num2;cout<<"\t第个复数:";cin>>num1;for(int k=4;!(num1==Zero);k++){sub=sub-num1;cout<<"\t第"<<k<<"个复数:";cin>>num1;}cout<<"\t结果是:"<<sub<<endl;cout<<"\t按任意键返回";cin.get();cin.get();}void Mul() //复数乘法{user.nMul++;Complex num1, num2, mul, Zero(0, 0);cout << "\t乘法计算\n" << "\t最少输入两个复数,输入“”结束\n";cout << "\t第个复数:";cin >> num1;cout << "\t第个复数:";cin >> num2;mul = num1 * num2;cout << "\t第个复数:";cin >> num1;for (int j=4;!(num1==Zero);j++ ){mul *= num1;cout << "\t第" << j << "个复数:";cin >> num1;}cout << "\t结果是:" << mul << endl;cout << "\t按任意键继续\n";cin.get();cin.get();}void Addself() //复数自加{Complex num;cout<<"\t复数自加\n"<<"请输入一个复数:";cin>>num;num++;cout<<"自加结果为:"<<num;cin.get();cin.get();}void Subself() //复数自减{Complex num;cout<<"\t复数自减\n"<<"请输入一个复数:";cin>>num;num--;cout<<"自加结果为:"<<num;cin.get();cin.get();}void Compare() //比较复数{Complex num1, num2;cout << "\t输入两个复数\n";cout << "\t第个复数:";cin >> num1;cout << "\t第个复数:";cin >> num2;if ( num1==num2 )cout << " \t这两个复数相等\n";else if ( num1>num2 )cout <<"\t "<<num1 << " 的模大于" << num2 <<"的模\n";else if ( num1<num2 )cout <<"\t " << num2 << " 的模大于" << num1 << "的模\n";elsecout << "\t这两个复数的模相等\n";cout << "\t按任意键继续\n";cin.get();cin.get();}void Test(){user.nTime++;srand( time(NULL) );cout << "\t共道题,作以内的加减运算,满分100分:\n";double real1, real2, image1, image2, real3, real4, image3, image4;Complex answer,temp;int score = 0;char op;for(int i=0; i<=9; i++){real1 = rand()%200 - 100;image1 = rand()%200 - 100;real2 = rand()%200 - 100;image2 = rand()%200 - 100;Complex a(real1, image1), b(real2, image2);real3 = rand()%20 - 10;image3 = rand()%20 - 10;real4 = rand()%20 - 10;image4 = rand()%20 - 10;Complex c(real3, image3), d(real4, image4);op = rand()%3; // 随机产生3 种运算符switch(op){case 0:answer = a + b;cout <<"\t"<< a << "\t加上" << b << "等于" <<answer<<endl;break;case 1:answer = a - b;cout <<"\t"<< a << "\t减去" << b << "等于" <<answer<<endl;break;case 2:answer = c * d;cout <<"\t"<< c << "\t乘以" << d << "等于" <<answer<<endl;break;}cout<<"\t";cin>>temp;if ( temp==answer){cout<<"\t恭喜你答对了一题。
复数计算器讲义
C++实验报告实验名称:复数计算器学号:姓名:一.目的与要求目的;当我们输入两个复数时,选择加减乘除符号,就能将正确结果输出,实现一个简单的复数计算器的功能;要求:要求:运行流畅,易于进行检查,有较高的可阅读性,呢呢狗狗满足绝大多数情况,没有溢出现象,尽量体现C++封装的编程思想,减少c语句的使用。
二.工具以及准备工作工具:vs2015,电脑一台。
准备工作:关于数组指针,函数申明与调用的知识。
三.分析要实现一个复数计算器的功能,并把复数定义成一个类,那我们就需要把虚部与实部分别定义,然后就可以进行运算。
但是输入是一个较为困难的事情,我们如何判断这是复数的虚部还是实部呢,于是我采用权重的方法来进行区分,我们设定一个int n,来记录权重,每录入一个实部的数,就加一,来记录权重,那么虚部前面的符号的权重就不为一,此处,虚部与实部的正负号便区分开来,那么后面的数也可以区分开来,那么后面的运算符重载都是对已有知识的运用。
类的定义:class complexnumber{private:double Real;//实数部分的值double Image;//虚数部分的值public:complexnumber(double real = 0, double image = 0){Real = real;Image = image;}friend istream & operator>>(istream & is, complexnumber &com);//重载运算符friend ostream & operator <<(ostream &os, complexnumber &com);double mod(void);complexnumber operator+(complexnumber &com);complexnumber operator-(complexnumber &com);complexnumber operator*(complexnumber &com);complexnumber operator/(complexnumber &com);};代码具体功能分析见核心算法实现代码每一行后的注释核心代码:double complexnumber::mod(){return Real*Real + Image*Image;//复数的模值,在后面会用到}istream &operator >>(istream &is,complexnumber &com){char yunsuanshi[80];//定义一个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 < len; k++){if ((yunsuanshi[k]<'0' || yunsuanshi[k]>'9') &&yunsuanshi[k] != '+'&&yunsuanshi[k]!='-'&&yunsuanshi[k] != 'i')//判断输入是否有误{cout <<"error"<< endl;return is;}}for (int k = 0; k < len;)//顺序识别字符串中各字符{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";elsecom.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;}return is;}ostream & operator <<(ostream &os, complexnumber &com){if (fabs(com.Image) ==0.0)//如果虚部的值为零os<<com.Real;else if (fabs(com.Real) ==0.0)//如果实部的值为零os<<com.Image <<'i';else if (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 complexnumber:: 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;}complexnumber complexnumber::operator/(complexnumber &com){complexnumber d;if ((com.Real*com.Real + com.Image*com.Image) == 0.0) cout <<"NO ROSOLUTION";elsed.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);return d;}int main(){complexnumber a, b, c;cout<<"·······欢迎·······"<< endl;cout <<"请输入操作数一"<< endl;cin >> a;cout <<"请输入操作数二"<< endl;cin >> b;cout <<"请输入选择的运算符: + -*/ "<< endl;char d;cin >> d;if(d!='*'&&d!='+'&&d!='-'&&d!='/'){cout <<"选择运算符错误"<< endl;cin >> 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;cout << c;break;}system("pause");return 0;}四.实现步骤1. 看清实验要求,并思考,确定大致思路2. 打开visual studio 20153. 创建新项目4. 确定算法并进行学习尔后添加所需要的必要库文件5. 开始编写代码6. 进行检查7. 运行并调试8. 完善功能五.测试与结论测试结果如下:1.加法2.乘法3.减法4.除法六.实验总结在此次实验中,实现的功能十分简单,也没有什么创新性的功能,但我觉得这其中比较巧妙的是,使用权重来进行复数符号位的判定,并且为了便于使用,加入了输入报错功能。
复数计算器讲义范文
复数计算器讲义范文一、引言复数是数学中的一个重要概念,它可以表示实数范围之外的数,广泛应用于物理学、工程学等各个领域。
为了方便计算和解析复数,我们设计了这款复数计算器,并编写了相应的讲义,以帮助大家更好地理解和使用复数。
二、概述复数由实部和虚部组成,通常用a+bi的形式表示,其中a为实部,b为虚部,i为虚数单位,满足i^2=-1、复数的运算包括四则运算(加、减、乘、除)和求模,本讲义将详细介绍这些运算的实现方法。
三、加法和减法1. 加法:将两个复数的实部和虚部分别相加即可。
例如,对于复数a+bi和c+di的加法计算,结果为(a+c)+(b+d)i。
2. 减法:将两个复数的实部和虚部分别相减即可。
例如,对于复数a+bi和c+di的减法计算,结果为(a-c)+(b-d)i。
四、乘法和除法1. 乘法:将两个复数的实部和虚部按照乘法规则相乘即可。
例如,对于复数a+bi和c+di的乘法计算,结果为(ac-bd)+(ad+bc)i。
2. 除法:将两个复数按照除法规则进行计算,首先将除数的复共轭乘以被除数,然后将结果的实部和虚部除以除数的模长的平方。
例如,对于复数a+bi除以c+di的计算,结果为((ac+bd)/(c^2+d^2))+((bc-ad)/(c^2+d^2))i。
五、求模求复数的模是计算复数到原点的距离,即复数的绝对值。
计算方法是将复数的实部和虚部的平方和开方求和。
例如,复数a+bi的模为√(a^2+b^2)。
六、程序设计思路为了实现以上的复数运算,我们可以设计一个复数类,并在其中定义相应的成员函数。
具体的程序设计思路如下:1.创建复数类,包括私有成员变量a和b,分别表示实部和虚部。
2.创建构造函数,用于初始化复数实例。
3.创建成员函数,用于实现四则运算和求模运算。
七、程序实现以下是一个简单的复数计算器的程序实现示例:```pythondef __init__(self, a, b):self.a = aself.b = bdef modulus(self):return (self.a**2 + self.b**2)**0.5#创建两个复数对象#复数加法result_add = c1.add(c2)print(f'复数加法:{result_add.a}+{result_add.b}i')#复数减法result_sub = c1.sub(c2)print(f'复数减法:{result_sub.a}+{result_sub.b}i')#复数乘法result_mul = c1.mul(c2)print(f'复数乘法:{result_mul.a}+{result_mul.b}i')#复数除法result_div = c1.div(c2)print(f'复数除法:{result_div.a}+{result_div.b}i')#复数模长result_modulus = c1.modulusprint(f'复数模长:{result_modulus}')```八、总结复数计算器可以帮助我们方便地进行复数的四则运算和求模运算。
c++复数计算器
中南大学高级程序设计实践(C++)课程设计报告题目复数计算器学生姓名指导教师学院信息科学与工程学院专业班级完成时间 2014.7.5目录第一章需求分析 (3)第二章概要设计 (3)第三章详细设计 (3)第四章调试分析 (6)第五章测试结果 (6)第六章课程设计总结 (11)第七章参考文献 (11)第八章附录 (11)第一章需求分析程序设计任务:运用面向对象程序设计知识,利用C++语言设计和实现一个复数计算器。
主要功能:(1)建立实数类、复数类(2)实现实数、复数信息的初始化(3)实现实数的加、减、乘、除、自增、自减、求平方、二次方根等操作(4)实现复数的加、减、乘、除、取模、求平方、求共轭复数、求单个复数的向量角、求两个复数的夹角等运算(5)实现实数、复数信息的输出第二章概要设计含有两个类,实数Real类和复数Complex类,用于实数和复数的计算,两个类并列关系,定义两个菜单函数,用于输出欢迎界面和功能列表,主函数可分别调用两个类中的函数和菜单函数。
对于Complex 类中应用运算符重载,是它可以对复数进行计算。
第三章详细设计plex类用于复数的加法,减法,乘法,除法,取模,求共轭复数,求向量角,和两个复数夹角的计算。
成员函数:(1).构造函数和析构函数。
(2). int add(); 用于计算复数加法的函数。
int subtraction();用于计算复数减法的函数。
int qumo();用于复数取模的函数。
int multiplication();用于计算复数乘法的函数。
int division();用于计算复数除法的函数。
int square();用于计算复数平方的函数。
int qiugonge();用于计算复数求共轭复数的函数。
void xiangliangjiao();用于计算单个复数向量角的函数。
void shuangxiangliangjiao();用于计算两个复数的向量角的函数。
复数计算器课程设计
复数计算器课程设计一、课程目标知识目标:1. 理解复数的定义,掌握复数的表示方法及其运算规则;2. 学会使用复数计算器进行加减乘除等基本运算;3. 能够将复数运算应用于解决实际问题,如电路分析、流体力学等领域。
技能目标:1. 熟练操作复数计算器,提高计算速度和准确性;2. 能够运用复数知识解决实际问题,培养解决问题的能力;3. 通过小组合作,提高沟通协作能力。
情感态度价值观目标:1. 培养学生对复数知识的兴趣,激发学习热情;2. 培养学生的耐心和细致,提高面对复杂问题的勇气和信心;3. 培养学生的团队意识,增强合作精神。
课程性质:本课程为数学学科的一节实践应用课,旨在帮助学生掌握复数计算器的使用,将理论知识应用于实际问题。
学生特点:学生处于初中阶段,具有一定的数学基础,好奇心强,喜欢探索新知识,但可能对复数概念的理解尚不深入。
教学要求:结合学生特点,注重启发式教学,引导学生自主探究,培养实际应用能力。
在教学过程中,关注学生的个体差异,因材施教,确保每位学生都能达到课程目标。
通过课程学习,使学生能够将复数知识应用于实际问题,提高数学素养。
二、教学内容1. 复数基础知识回顾:复数的定义、实部和虚部、复数的表示方法(代数表示、极坐标表示)。
教材章节:第三章 复数概念与表示方法2. 复数计算器操作方法:介绍复数计算器的基本功能,如复数输入、存储、提取以及加减乘除等运算操作。
教材章节:第四章 复数的计算与计算器应用3. 复数运算规则:总结复数加减乘除运算的法则,以及复数乘方和开方的计算方法。
教材章节:第四章 复数的计算与计算器应用4. 实际问题中的应用:结合教材案例,引导学生将复数知识应用于解决实际问题,如交流电路中的复数阻抗计算。
教材章节:第五章 复数在实际问题中的应用5. 小组合作与讨论:组织学生进行小组合作,探讨复数计算器在生活中的应用,分享学习心得。
教材章节:第六章 复数知识在实际生活中的应用教学进度安排:第一课时:复数基础知识回顾,复数计算器操作方法介绍第二课时:复数运算规则,实际应用案例学习第三课时:小组合作与讨论,总结课程知识,拓展复数在实际生活中的应用三、教学方法1. 讲授法:在复数基础知识回顾环节,采用讲授法对复数的定义、表示方法等基本概念进行梳理和讲解,为学生提供清晰的理论框架。
复数的计算器算法
一、使用方法1.利用计算器进行复数计算必须要用计算器的度,按DRG键,使计算器显示窗中要有“DEG”标致(表示计算器进行所有带角度的运算均以“度”为单位)。
2.让计算器进入复数运算状态,分别按2ndF 和CPLX,显示窗中有“CPLX”标致,表示计算器只能进行复数的运算,而进行其它计算则是无效的。
取消则重复进行即可。
进行复数的加减乘除运算时计算器必须处于复数运算状态。
二、计算说明1.计算器中a、b的分别表示进行复数运算的实部和虑部,进行代数式输入时可以直接按此键。
2.计算器中→rθ、→xy的分别表示进行复数运算的模和角,进行极坐标式输入时必须利用上档键功能进行;同时这两个按键也是代数式和极坐标式转换的功能键。
3.显示结果运算完成后的结果就是代数式且显示的是实部,按b显示虑部,再按a就显示实部,转换成极坐标式后则按a显示模,按b显示角,也可重复显示。
4.在输入带有负号的值时,应先输入数值,再输入负号,输入负号应按+/-键。
三、计算举例1.代数式化成极坐标式例如:3 + j 4 = 5 /53.13o按键步骤:(按键动作用“↓”表示。
)3↓a↓4↓b↓2ndF↓→rθ↓显示模5,b↓显示角53.13o。
2.极坐标式化成代数式例如:15 /-50o = 9.64- j11.49按键步骤:15↓a↓50↓+/-↓b↓2ndF↓→xy↓显示实部9.64,b↓显示虑部-11.49。
3.代数式的加减乘除例如:( 5 - j 4 ) ×( 6 + j 3 ) = 42 - j 9 = 42.953/-12.095o按键步骤:5↓a↓4↓+/-↓b↓×↓6↓a↓3↓b↓=↓显示实部42 b↓显示虑部–9。
如要极坐标式只需继续进行转换即可。
2ndF ↓→rθ↓显示模42.953,b↓显示角-12.095o。
如进行其它运算只需将乘号换成要进行的计算号即可。
这里只给出计算结果请同学自己进行练习对比。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else
return 0;
}
int CComplex::operator==(CComplex &com)//判断相等
{
if(Real==com.Real&&Image==com.Image)
return 1;
else
return 0;
}
void Clear(int &f1)//输入错误是清空输入流
{
sign=1;k++;
}
if(s[k]=='i')
{
if(k!=len-1)
cout<<"复数数据格式错误"<<endl;
else
com.Image=sign*n;
break;
}
while(s[k]>='0'&&s[k]<='9')
{
n=n*10+s[k]-'0';
k++;
}
}
if(s[len-1]!='i'&&n!=0)
Write()文件写入
Read() //文件读取
4、其他函数
Menu() //菜单函数
Clear() //输入数据类型错误时,用以清空输入流
2.3 主要算法流程图
。。。。。。
图2-1算法流程图
3
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
CComplex operator+(CComplex &com);//加法重载
CComplex operator-(CComplex &com);//减法重载
CComplex operator*(CComplex &com);//乘法重载
CComplex operator+=(CComplex &com);//加法赋值重载
return temp;
}
CComplex CComplex::operator*(CComplex &com)//乘法重载
{
CComplex temp(Real*com.Real-Image*com.Image,Real*com.Image+Image*com.Real);
return temp;
Add()//加法计算
Sub()//减法计算
Mul()//乘法计算
Text()//用户测试
Add1()//加法赋值计算
Sub1()//减法赋值计算
Mul1()//乘法赋值计算
selfAdd()//自加计算
selfSub()//自减计算
Mod()//模的计算
Compare()//比较计算
3、文件操作函数
{
CComplex temp(Real+com.Real,Image+com.Image);
return temp;
}
CComplex CComplex::operator-(CComplex &com)//减法重载
{
CComplex temp(Real-com.Real,Image-com.Image);
{
Real-=com.Real;
Image-=com.Image;
return *this;
}
CComplex CComplex::operator*=(CComplex &com)//乘法赋值重载
{
double nReal=Real*com.Real-Image*com.Image;
double nImage=Real*com.Image+Image*com.Real;
#include <windows.h>
#include <string.h>
#include <fstream.h>
#include <time.h>
#define N 10
class CComplex
{
private:
double Real,Image;
public:
CComplex(double real=0,double image =0) //构造函数
int nAdd; //加法次数
int nSub; //减法次数
int nMul; //乘法次数
double dlScore[N];
}user;
istream & operator>>(istream &is,CComplex &com )//重载输入
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN | FOREGROUND_INTENSITY |
return *this;
}
double CComplex::mod()//求复数的模
{
return Real*Real+Image*Image;
}
int CComplex::operator>(CComplex &com)//比大
{
if(mod()>com.mod())
return 1;
else
return 0;
{
Real=real;Image=image;
}
friend istream & operator>>(istream &is,CComplex &com ); //重载输入
friend ostream & operator<<(ostream &os,CComplex &com); //重载输出
CComplex operator+(CComplex &com); //加法重载
内容及要求:
(1)所设计的复数计算器可以进行+ - * += -= *= ++ -- >= <= == !=运算符,其中>=
<=是针对复数的模进行运算。
(2)设计输入重载函数,要求能接收从键盘输入a+bi形式的复数,在程序中可以识出
实部虚部并正确赋值。
(3)设计计算器测试程序,对加减法进行测试,要求在两位数以内进行,对乘法进行
int i,score=0,x,e=1,f;
double real1,image1,real2,image2,real3,image3,real4,image4;
CComplex key,temp;
while(e)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN | FOREGROUND_RED);
测试,乘法要求为一位数的运算。
(4)设计记录功能,可以记录下不同用户使用计算器的情况,记录以文件的形式保存
在计算机内,开机时要求用户输入用户名,显示该名户以前的记录。用户记录用包括:做
了多少次加减法、乘法、进行测试的次数,后3次的测试平均分等,在退出计算器程序时
用心的用户记录代替原有的记录。
2
2.1
{
while(cin.fail())
{
cout<<"输入有错!请重新输入:";
cin.clear();
cin.ignore(100,'\n');
cin>>f1;
}
}
void Text()//用户测试
{
system("cls");
cout<<"\t\t\t\t欢迎进入测试模式!\n\t\t\t本测试共5道题,每题20分,满分100分。"<<endl;
CComplex operator-(CComplex &com); //减法重载
CComplex operator*(CComplex &com); //乘法重载
CComplex operator+=(CComplex &com); //加法赋值重载
CComplex operator-=(CComplex &com); //减法赋值重载
{
com.Real=n*sign;
}
return is;
}
ostream & operator<<(ostream &os,CComplex &com)//重载输出
{
if(fabs(com.Image)<1e-6)
os<<com.Real;
else if((fabs(com.Real)<1e-6))
int operator<(CComplex &com);
int operator!=(CComplex &com);
int operator==(CComplex &com);
};
class User
{
public:
char Name[20]; //用户名
int nTest; //测试次数
double alAve; //平均成绩
CComplex operator*=(CComplex &com); //乘法赋值重载