C++课程设计复数计算器

合集下载

C++程序设计-复数计算器

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简单计算器课程设计

c简单计算器课程设计

c 简单计算器课程设计一、课程目标知识目标:1. 让学生掌握简单计算器的基本操作,包括开机、关机、清除屏幕、输入数字和运算符号。

2. 使学生理解加、减、乘、除四则运算的基本概念,并能够在简单计算器上进行正确的运算操作。

3. 帮助学生识别计算器上各个按键的功能,了解其对应的数学意义。

技能目标:1. 培养学生运用简单计算器解决实际问题的能力,如购物找零、计算面积等。

2. 提高学生进行四则运算的速度和准确性,提高计算效率。

3. 引导学生掌握计算器使用技巧,如连续计算、顺序计算等。

情感态度价值观目标:1. 培养学生对计算器的正确态度,认识到计算器是学习数学的工具,而非替代品。

2. 激发学生学习数学的兴趣,让学生在轻松愉快的氛围中体验数学计算的乐趣。

3. 培养学生的合作意识,使学生在小组讨论和互助学习中提高沟通能力,培养团队精神。

本课程针对小学三年级学生设计,结合学生年龄特点,注重激发兴趣和培养动手操作能力。

课程内容紧密联系教材,将目标分解为具体的学习成果,便于后续教学设计和评估。

通过本课程的学习,学生将能够熟练运用简单计算器,提高数学计算能力,培养良好的学习习惯和团队协作能力。

二、教学内容1. 计算器的基本结构:引导学生认识计算器的外观、各部分名称及其功能。

- 教材章节:第三章第1节《认识计算器》- 内容列举:计算器按键布局、显示屏、开机与关机、清除键等。

2. 四则运算操作:讲解加、减、乘、除四则运算在计算器上的操作方法。

- 教材章节:第三章第2节《计算器的四则运算》- 内容列举:按键输入、运算顺序、连续运算、计算结果读取等。

3. 计算器使用技巧:教授计算器的高级使用技巧,提高计算效率。

- 教材章节:第三章第3节《计算器使用技巧》- 内容列举:百分比计算、乘方运算、记忆功能等。

4. 实践应用:结合实际生活场景,让学生运用计算器解决实际问题。

- 教材章节:第三章第4节《计算器在实际生活中的应用》- 内容列举:购物找零、计算面积、体积、速度等。

C++课程设计报告(复数计算器)

C++课程设计报告(复数计算器)

南京信息工程大学《面向对象程序设计》课程设计实验报告课程名:面向对象程序设计专业:网络工程班级:2班作者:张煜荻、吴辉煌、张一东日期:2011年5~6月实验内容题目:设计一个复数计算器。

要求:1)所设计的复数计算器可以进行+、-、×运算。

2)设计输入重载函数,要求能接收从键盘输入a+b i形式的复数,在程序中可以识别出实部、虚部并进行赋值。

3)设计算器测试程序,对加减法进行测试,要求在两位数以内,对乘法进行测试,乘法要求为一位数的运算。

小组分工程序源码#include<iostream>#include<cmath>#define EPS 1e-5//定义精度为10^-5using namespace std;namespace NameCalculator //定义空间NameCalculator{class Calculator //定义Calculator类{private:double Real,Image; //私有成员:实部Real、虚部Image public:Calculator(double real=0,double image=0) //构造函数{Real=real;Image=image;}int operator==(Calculator &com); //等于重载Calculator operator+(Calculator &com); //加法重载Calculator operator-(Calculator &com); //减法重载Calculator operator*(Calculator &com); //乘法重载Calculator operator*=(Calculator &com);//乘法赋值重载friend istream & operator>>(istream &is,Calculator &com); //输入重载friend ostream & operator<<(ostream &os,Calculator &com); //输出重载};int Calculator::operator==(Calculator &com) //重载等于{if(Real==com.Real && Image==com.Image)return 1;elsereturn 0;}Calculator Calculator::operator+(Calculator &com) //加法重载{Calculator sum;sum.Real=Real+com.Real;sum.Image=Image+com.Image;return sum;}Calculator Calculator::operator-(Calculator &com) //减法重载{Calculator sub;sub.Real=Real-com.Real;sub.Image=Image-com.Image;return sub;}Calculator Calculator::operator*(Calculator &com) //乘法重载{Calculator multi;multi.Real=Real*com.Real-Image*com.Image;multi.Image=Real*com.Image+Image*com.Real;return multi;}Calculator Calculator::operator*=(Calculator &com) //重载乘法赋值{double nReal=Real*com.Real-Image*com.Image;double nImage=Real*com.Image+Image*com.Real;Real=nReal;Image=nImage;return *this;}istream & operator>>(istream &is,Calculator &com) //重载输入{cout<<"请输入复数:";char s[20];is>>s; //用字符串形式接受输入的复数int len=strlen(s);int n=0,sign=1;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<<"输入错误"<<endl;return is;}}for(k=0;k<len;) //检查输入字符串{if(n!=0 &&(s[k]=='-'||s[k]=='+')) //字符是否是符号{com.Real=sign*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,Calculator &com) //重载输出{if(fabs(com.Image)<EPS) //如果虚部为0os<<com.Real; //只输出实部else if((fabs(com.Real)<EPS)) //如果实部为0os<<com.Image<<"i"; //只输出虚部else if(com.Image>0)os<<com.Real<<"+"<<com.Image<<"i";elseos<<com.Real<<com.Image<<"i"; //虚部为正return os;}void Add() //加法运算函数{Calculator num1,num2,sum,zero(0,0);cout<<"加法计算\n"<<"最少输入两个复数,并且以0结束\n";cout<<"第1个复数:";cin>>num1;cout<<"第2个复数:";cin>>num2;sum=num1+num2;cout<<"第3个复数:";cin>>num1;int i=4;while(!(num1==zero)){sum=sum+num1;cout<<"第"<<i<<"个复数:";cin>>num1;i++;}cout<<"加法结果是:"<<sum<<endl;cout<<"请按回车键继续\n";cout.flush();cin.get();cin.get();}void Sub() //减法运算函数{Calculator num1,num2,sub,zero(0,0);cout<<"最少输入两个复数,并且以0结束\n";cout<<"第1个复数:";cout<<"第2个复数:";cin>>num2;sub=num1-num2;cout<<"第3个复数:";cin>>num1;int i=4;while(!(num1==zero)){sub=sub-num1;cout<<"第"<<i<<"个复数:";cin>>num1;i++;}cout<<"减法结果是:"<<sub<<endl;cout<<"请按回车键继续\n";cout.flush();cin.get();cin.get();}void Mul() //乘法运算函数{Calculator num1,num2,mul,zero(0,0);cout<<"乘法计算\n"<<"最少输入两个复数,并且以零结束\n";cout<<"第1个复数:";cin>>num1;cout<<"第2个复数:";cin>>num2;mul=num1*num2;cout<<"第3个复数:";cin>>num1;int i=4;while(!(num1==zero)){mul*=num1;cout<<"第"<<i<<"个复数:";cin>>num1;i++;}cout<<"乘法结果是:"<<mul<<endl;cout<<"请按回车键继续\n";cout.flush();cin.get();}}using namespace NameCalculator;int main() //主函数{char Choise[20];do{system("cls"); //清屏cout<<"1:复数加法\n";cout<<"2:复数减法\n";cout<<"3:复数乘法\n";cout<<"0:退出程序\n\n";cout<<"请选择:";cin>>Choise;if(strcmp(Choise,"1")==0)Add();else if(strcmp(Choise,"2")==0)Sub();else if(strcmp(Choise,"3")==0)Mul();else if(strcmp(Choise,"0")==0){break;}else{cout<<"\n输入错误,按回车键继续\n";cin.get();cin.get();}}while((strcmp(Choise,"0")));return 0;}测试结果实验总结本实验的难点在于:如何让程序识别输入的“复数字符串”。

简单实现C++复数计算器

简单实现C++复数计算器

简单实现C++复数计算器本⽂实例为⼤家分享了简单实现C++复数计算器的具体代码,供⼤家参考,具体内容如下1.有关计算器的功能A,实现多个复数(包括实数)的加减乘除,⼤⼩⽐较,B.实现⼗进制实数的进制转换,可以转换任意进制2.有关设计的原理A.复数计算的部分,采⽤运算符的重载,进⾏复数的加减乘除以及⼤⼩⽐较对于输⼊输出,(>>和<<),加减乘除运算进⾏重载。

输⼊的重载,实现a+bi形式的复数的输⼊。

输出的重载,实现实数的输出(实现特殊的只输出实部虚部之类的)。

加减乘除的重载,实现有关复数的运算。

B.进制转换的部分,采⽤进制转换的⽅法,实现10进制的任意进制转换。

辗转相除,记录每次的余数,存储在数组中来记录转换得到的数字3.有关设计的特点A.采⽤函数对所实现功能进⾏封装。

B.采⽤运算符的重载,使复数运算更加⽅便C.考虑所有的输⼊输出情况,对选择的操作,输⼊复数的类型等进⾏判断与相应的处理D.程序在完成以后,接受⼤家建议,规范代码格式,⾃⼰在制作过程有所收获也有所学习。

下⾯是有关代码的实现:#include <iostream>#include <algorithm>#include <cmath>#include <cstdlib>#include <cstring>#include <fstream>#include <ctime>#define EPS 1e-5 //定义精度常数using namespace std; //使⽤标准空间命名stdnamespace NameCCom //定义命名空间NameCCom{class CCom //定义⼀个CCom类{public:double Real,Image;//实部和虚部CCom(double real=0,double image=0) //构造函数{Real=real;Image=image;}friend istream & operator>>(istream &is,CCom &com); //重载输⼊friend ostream & operator<<(ostream &os,CCom &com); //重载输出CCom operator+(CCom &com); //加法重载CCom operator-(CCom &com); //减法重载CCom operator*(CCom &com); //乘法重载CCom operator/(CCom &com); //除法重载CCom operator+=(CCom &com); //加法赋值重载CCom operator-=(CCom &com); //减法赋值重载CCom operator*=(CCom &com); //乘法赋值重载CCom operator/=(CCom &com); //除法赋值重载};struct User //定义⽤户结构体类型{char szName[20]; //⽤户名}user; //定义全局变量int CCom::operator>(CCom &com) //重载运算符">",⽐较模的⼤⼩{if(mod()>com.mod())return 1; //若⼤,则返回1elsereturn 0; //否则,则返回0}int CCom::operator<(CCom &com) //重载运算符"<",⽐较模的⼤⼩{if(mod()<com.mod())return 1; //若⼩,则返回1elsereturn 0; //否则,则返回0}int CCom::operator!=(CCom &com) //重载运算符"!=",分别判断复数的实部和虚部{if(*this==com)return 0; //若相等,则返回0elsereturn 1; //否则,则返回1}istream & operator>>(istream &is,CCom &com) //重载输⼊,可以输⼊a+bi的形式{cout<<"请输⼊复数:";char s[80];is>>s; //⽤字符串的形式接受复数int len=strlen(s); //求出字符串的长度int n=0,sign=1; //n为当前从字符串中提取出来的数字,初始化为0;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; //sign是符号位,且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,CCom &com) //重载输⼊{if(fabs(com.Image)<EPS) // 如果虚部为0os<<com.Real; //只输出实部else if((fabs(com.Real)<EPS)) //如果实部为0os<<com.Image<<"i"; //只输出虚部else if(com.Image>0)os<<com.Real<<"+"<<com.Image<<"i";elseos<<com.Real<<com.Image<<"i"; //虚部为正return os;}CCom CCom::operator+(CCom &com) //加法重载{CCom sum;sum.Real=Real+com.Real; //实部相加sum.Image=Image+com.Image; //虚部相加return sum;}CCom CCom::operator-(CCom &com) //减法重载{CCom sub;sub.Real=Real-com.Real; //实部相减sub.Image=Image-com.Image; //虚部相减return sub;}CCom CCom::operator*(CCom &com) //乘法重载{CCom multi;multi.Real=Real*com.Real-Image*com.Image; //实部乘积multi.Image=Real*com.Image+Image*com.Real; //虚部乘积return multi;}CCom CCom::operator/(CCom &com) //除法重载{CCom div;div.Real=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image); //实部除积div.Image=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image*com.Image); //虚部除积return div;}CCom CCom::operator+=(CCom &com) //重载加法赋值{Real=Real+com.Real; //实部相加Image=Image+com.Image; //虚部相加return *this;}CCom CCom::operator-=(CCom &com) //重载减法赋值{Real=Real-com.Real; //实部相减Image=Image-com.Image; //虚部相减return *this;}CCom CCom::operator*=(CCom &com) //重载乘法赋值{double nReal=Real*com.Real-Image*com.Image; //实部乘积double nImage=Real*com.Image+Image*com.Real; //虚部乘积Real=nReal;Image=nImage;return *this;}CCom CCom::operator/=(CCom &com) //重载除法赋值{double nReal=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image); //实部除积 double nImage=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image*com.Image); //虚部除积 Real=nReal;Image=nImage;return *this;}int CCom::operator==(CCom &com) //重载等于{if(Real==com.Real && Image==com.Image)return 1;elsereturn 0;}void Add() //复数加法运算函数{CCom num1,num2,sum,Zero(0,0);cout<<"加法计算\n"<<"最少输⼊两个复数,并且以0结束\n"; cout<<"第⼀个复数:";cin>>num1;cout<<"第⼆个复数:";cin>>num2;sum=num1+num2;cout<<"第三个复数:";cin>>num1;int i=4;while(!(num1==Zero)){sum=sum+num1;cout<<"第"<<i<<"个复数:";cin>>num1;i++;}cout<<"加法结果是:"<<sum<<endl;cout<<"请按任意键继续\n";cin.get();cin.get();}void Sub() //复数减法运算函数{CCom num1,num2,sub,Zero(0,0);cout<<"最少输⼊两个复数,并且以0结束\n";cout<<"第1个复数:";cin>>num1;cout<<"第2个复数:";cin>>num2;sub=num1-num2;cout<<"第3个复数:";cin>>num1;int i=4;while(!(num1==Zero)){sub=sub-num1;cout<<"第"<<i<<"个复数:";cin>>num1;i++;}cout<<"减法结果是:"<<sub<<endl;cout<<"请按任意键继续\n";cin.get();cin.get();}void Mul() //复数乘法运算函数{CCom num1,num2,mul,Zero(0,0);cout<<"乘法计算\n"<<"最少输⼊两个复数,并且以0结束\n"; cout<<"第⼀个复数:";cin>>num1;cout<<"第⼆个复数:";cin>>num2;mul=num1*num2;cout<<"第三个复数:";cin>>num1;int i=4;while(!(num1==Zero)){mul*=num1;cout<<"第"<<i<<"个复数:";cin>>num1;i++;}cout<<"乘法结果是:"<<mul<<endl;cout<<"请按任意键继续\n";cin.get();cin.get();}void Div() //复数除法运算函数{CCom num1,num2,div,Zero(0,0);cout<<"除法计算\n"<<"最少输⼊两个复数,并且以0结束\n";cout<<"第⼀个复数:";cin>>num1;cout<<"第⼆个复数:";cin>>num2;div=num1/num2;cout<<"第三个复数:";cin>>num1;int i=4;while(!(num1==Zero)){div/=num1;cout<<"第"<<i<<"个复数:";cin>>num1;i++;}cout<<"除法结果是:"<<div<<endl;cout<<"请按任意键继续\n";cin.get();cin.get();}void Compare() //两复数⽐较函数{CCom num1,num2;cout<<"请输⼊两个复数\n";cout<<"第⼀个复数:";cin>>num1;cout<<"第⼆个复数\n";cin>>num2;if(num1==num2)cout<<"这两个复数相等\n";else if(num1>num2)cout<<num1<<"的模⼤于"<<num2<<"的模\n";else if(num1<num2)cout<<num2<<"的模⼤于"<<num1<<"的模\n";elsecout<<"这两个复数的模相等\n";cout<<"请按任意键继续\n";cin.get();cin.get();}void Jinzhi() //实现进制转换{long n;int p,c,m=0,s[100];cout<<"输⼊要转换的数字:\n";cin>>n;cout<<"输⼊要转换的进制:\n";cin>>p;cout<<"("<<n<<")10="<<"(";while (n!=0)//数制转换,结果存⼊数组s[m]{c=n%p;n=n/p;m++;s[m]=c; //将余数按顺序存⼊数组s[m]中 }for(int k=m;k>=1;k--)//输出转换后的序列{if(s[k]>=10) //若为⼗六进制等则输出相对应的字母 cout<<(char)(s[k]+55);else //否则直接输出数字cout<<s[k];}cout<<")"<<p<<endl;cout<<"请按任意键继续\n";cin.get();cin.get();}void outpt(){char szName[20];cout<<"请输⼊您的姓名:";cin>>szName;system("cls");do{system("cls");cout<<"\t这是⼀个计算器,可实现以下功能,请按对应的按键(0-6)\n\n\n";cout<<"\t*----------Hpioneer⼩计算器菜单---------*\n";cout<<"\t| 1:多个复数加法,以0结束 |\n";cout<<"\t| 2:多个复数减法,以0结束 |\n";cout<<"\t| 3:多个复数乘法,以0结束 |\n";cout<<"\t| 4:多个复数除法,以0结束 |\n";cout<<"\t| 5:复数⽐较 |\n";cout<<"\t| 6:进制转换 |\n";cout<<"\t| 0:退出程序 |\n";cout<<"\t| 请您选择: |\n";cout<<"\t*---------------------------------------*\n";}}using namespace NameCCom;int main(void) //主函数开始,void可以不写{int h;output();cin>>h;//每步操作if(h==1) //⽤户选1则调⽤Add()函数Add();else if(h==2) //⽤户选2则调⽤Sub()函数Sub();else if(h==3) //⽤户选3则调⽤Mul()函数Mul();else if(h==4) //⽤户选4则调⽤Div()函数Div();else if(h==5) //⽤户选6则调⽤Compare()函数Compare();else if(h==6) //⽤户选7则调⽤函数Jinzhi()函数Jinzhi();else if(h==0)cout<<"⾮常感谢您的使⽤\n";elsebreak;}return 0;}以上就是本⽂的全部内容,希望对⼤家学习C++程序设计有所帮助。

c简易计算器课程设计

c简易计算器课程设计

c 简易计算器课程设计一、课程目标知识目标:1. 学生能理解简易计算器的基本原理,掌握加、减、乘、除四则运算的操作方法。

2. 学生能够运用所学知识,解决生活中简单的数学问题。

3. 学生了解计算器的发展历程,认识到科技对生活的影响。

技能目标:1. 学生能够熟练操作简易计算器,进行基本的四则运算。

2. 学生通过实际操作,培养动手能力和问题解决能力。

3. 学生能够运用计算器辅助学习,提高数学学习效率。

情感态度价值观目标:1. 学生培养对数学学习的兴趣,树立正确的数学观念。

2. 学生在合作交流中,培养团队意识和沟通能力。

3. 学生通过计算器的使用,认识到科技发展的成果,增强民族自豪感。

课程性质:本课程为信息技术与数学学科的整合课程,旨在通过简易计算器的学习,提高学生的数学素养和信息技术能力。

学生特点:四年级学生具备一定的数学基础和信息技术能力,好奇心强,善于合作交流。

教学要求:教师需结合学生的特点,采用启发式教学,引导学生主动探究,注重培养学生的动手能力和问题解决能力。

在教学过程中,关注学生的情感态度,激发学生的学习兴趣,使学生在轻松愉快的氛围中学习。

通过本课程的学习,使学生达到预期的学习成果。

二、教学内容1. 计算器的历史与原理:介绍计算器的发展简史,探讨计算器的工作原理,让学生了解计算器的演变过程,认识到科技对生活的改变。

2. 简易计算器操作方法:详细讲解加、减、乘、除四则运算的操作步骤,让学生熟练掌握计算器的使用方法。

3. 实践应用:结合数学课本中的实际例题,指导学生运用计算器进行计算,解决实际问题,提高计算速度和准确性。

4. 计算器在数学学习中的应用:探讨计算器在辅助数学学习中的作用,如:简化计算过程、提高解题效率等。

教学内容安排和进度:第一课时:计算器的历史与原理,计算器的简单操作。

第二课时:四则运算的操作方法,实践练习。

第三课时:计算器在数学学习中的应用,解决实际问题。

教材章节:《信息技术》第四章:计算器与计算机。

复数计算器课程设计

复数计算器课程设计

复数计算器课程设计(总8页) -本页仅作为预览文档封面,使用时请删除本页-目录1 题目内容及设计要求 .......................... 错误!未定义书签。

2 总体设计.............................................. 错误!未定义书签。

总体功能框图.................................. 错误!未定义书签。

类的设计说明 ................................. 错误!未定义书签。

主要算法流程图 ............................. 错误!未定义书签。

3 程序清单及注释................................. 错误!未定义书签。

4 运行结果与分析................................. 错误!未定义书签。

5 总结 .................................................... 错误!未定义书签。

6 参考文献 ............................................ 错误!未定义书签。

1 题目内容及设计要求题目17 复数计算器内容及要求:(1)所设计的复数计算器可以进行+ - * += -= *= ++ -- >= <= == !=运算符,其中>= <=是针对复数的模进行运算。

(2)设计输入重载函数,要求能接收从键盘输入a+bi形式的复数,在程序中可以识别出实部虚部并正确赋值。

(3) 设计计算器测试程序,对加减法进行测试,要求在两位数以内进行,对乘法进行测试,乘法要求为一位数的运算。

(4) 设计记录功能,可以记录下不同用户使用计算器的情况,记录以文件的形式保存在计算机内,开机时要求用户输入用户名,显示该名户以前的记录。

复数计算器课程设计

复数计算器课程设计

复数计算器课程设计-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN目录1 题目内容及设计要求 .......................... 错误!未定义书签。

2 总体设计.............................................. 错误!未定义书签。

总体功能框图.................................. 错误!未定义书签。

类的设计说明 ................................. 错误!未定义书签。

主要算法流程图 ............................. 错误!未定义书签。

3 程序清单及注释................................. 错误!未定义书签。

4 运行结果与分析................................. 错误!未定义书签。

5 总结 .................................................... 错误!未定义书签。

6 参考文献 ............................................ 错误!未定义书签。

1 题目内容及设计要求题目17 复数计算器内容及要求:(1)所设计的复数计算器可以进行+ - * += -= *= ++ -- >= <= == !=运算符,其中>= <=是针对复数的模进行运算。

(2)设计输入重载函数,要求能接收从键盘输入a+bi形式的复数,在程序中可以识别出实部虚部并正确赋值。

(3) 设计计算器测试程序,对加减法进行测试,要求在两位数以内进行,对乘法进行测试,乘法要求为一位数的运算。

(4) 设计记录功能,可以记录下不同用户使用计算器的情况,记录以文件的形式保存在计算机内,开机时要求用户输入用户名,显示该名户以前的记录。

复数计算器

复数计算器
{
real=r; imag=i;
}
~Complex()
{}
Complex operator+(Complex &c) //加法重载
{
Complex sum;
sum.real=real+c.real; //实部相加
sum.imag=imag+c.imag; //虚部相加
return sum;
}
Complex operator-(Complex &c) //减法重载
{
cout<<"\n\n\t欢迎下次继续使用复数计算器!\n\n";
}
else
{
cout<<"\n\t输入错误,请按任意键继续!\n";
}
}
cout<<"第2个复数的实部和虚部:";
cin>>c>>d;
Complex num1(a,b),num2(c,d),sub;
sub=num1-num2;
if(sub.imag>=0)
cout<<"减法结果是:"<<sub.real<<"+"<<sub.imag<<"i"<<endl;
else
cout<<"减法结果是:"<<sub.real<<sub.imag<<endl;
cout<<"第1个复数的实部和虚部:";
cin>>a>>b;

C++课程设计报告复数计算器

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.进行计算一般来说,复数计算器有加减乘除等运算符键,可以通过按下对应的运算符键来进行复数的加减乘除运算。

vc课程设计计算器

vc课程设计计算器

vc 课程设计计算器一、教学目标本课程旨在让学生掌握计算器的基本使用方法,理解计算器在数学和科学计算中的应用,培养学生的逻辑思维能力和解决问题的能力。

具体目标如下:知识目标:使学生了解计算器的各种功能及其应用场景,掌握计算器的基本操作方法。

技能目标:能够运用计算器进行简单的数学计算、科学计算和数据处理,提高计算准确性和效率。

情感态度价值观目标:培养学生对科学技术的兴趣和好奇心,激发学生探索未知、创新思维的精神。

二、教学内容本课程的教学内容主要包括以下几个部分:1.计算器的基本结构:介绍计算器的各种按键功能及其对应的操作。

2.计算器的使用方法:讲解如何使用计算器进行数学计算、科学计算和数据处理。

3.计算器在实际应用中的案例分析:通过实际案例,使学生了解计算器在日常生活和学习中的重要作用。

4.计算器的维护与保养:教授学生如何正确使用和维护计算器,延长其使用寿命。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式:1.讲授法:教师讲解计算器的基本原理、功能及使用方法。

2.讨论法:分组讨论计算器在实际应用中遇到的问题,培养学生解决问题的能力。

3.案例分析法:分析实际案例,使学生了解计算器在生活和学习中的重要作用。

4.实验法:让学生亲自动手操作计算器,进行实际计算,巩固所学知识。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用内容丰富、适合学生年龄特点的计算器教材。

2.参考书:提供相关的计算器使用手册和资料,供学生课后自学。

3.多媒体资料:制作课件、教学视频等,以生动形象的方式展示计算器的使用方法。

4.实验设备:为学生提供足够的计算器,以便进行实际操作和实验。

五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和兴趣。

2.作业:布置适量的课后作业,检查学生对课堂所学知识的掌握程度。

C++复数计算器日志附源代码

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

c++复数计算器

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++课程设计实验报告姓名学号班级合作者学号班级任课教师时间教师指定题目复数计算器评定难易级别 A级实验报告成绩复数计算器程序功能设计1.程序功能的总体结构复数计算器的程序总体功能可设计成如图1所示,可以看出,复数计算器的各种功能都用菜单选项列出,用户可以根据需要选择相应的菜单项,从而执行不同的子程序以完成相应的功能。

2.课程设计要求(1)一开始运行程序,要有详细的菜单选项界面,用户不选择退出就可以反复运算。

(2)可以进行多个操作数的复数运算,输入0+0*i时为止。

(3)编写可以对输入的复数求模的成员函数。

(4)编写具有测试功能的函数,即计算机能够自动出题,并要求用户计算,同时计算机判断用户计算的对错并打分,要求十题为一个单元,每题一个运算符,运算符包括+,-,*三种,参与加减运算实部虚部为一位数。

(5)重载输入输出运算符,对复数的输入既可采用实部虚部分开提示输入,也可直接输入诸如a+i*b或a+ib这种形式,对复数的输出要考虑实部虚部的正负号,通过判断给出的输出结果。

2.程序设计思想1)类的封装程序中将复数形式的数据定义成一个复数类CComplex,重载了加法及减法等运算符,使函数的加减等运算像一般数据一样方便.每个运算符重载都用一个函数去实现。

参考类的定义如下:class CComplex{private:double Real,Image;public:CComplex(double real=0,double image=0) //构造函数{Real=real;Image=image;}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); //除法重载int operator==(CComplex&com);int operator!=(CComplex&com);int operator>(CComplex&com);int operator<(CComplex&com);float Module(void); //复数求模};(2)设计的任务要求1在实际应用中,输入复数可能为a+bi, a, bi, -a, -bi, +i. –i. I等形式。

重载输入运算符应该能识别这样形式多样的复数。

所以在重载输入函数时要综合考虑上述各种输入形式。

可行的处理方式是:在重载输入函数中,设计用(3)设计的任务要求2在程序中设计一个复数运算的测试函数Test(),其功能是让计算机随机出10道运算题,用户给出答案,同时计算机实时判断对错并可以打分。

这个函数的关键是让计算机随机产生复数对象和运算符,计算机内部有一个随机数发生器,可以产生一个固定顺序的整型随机数序列,调用语句为“int a = rand();”这时,a就是该随机数发生器产生的随机数。

由于产生的随机书数在整数范围内,为测试方便,按程序设计要求,产生的随机复数对象实部和虚部在100以内,运算符只有加减两种。

因此,需要对产生的随机数进行进一步的处理,用随机数模除以除以100,产生出100以内的随机整数;同样,用随机数模除以3,可以产生出0、1、3三个随机数据,定义0为加法,1为减法,2为乘法,这样就可以产生出随机的复数对象的加减乘运算了。

可以参见图2测试子程序Test()结构框图。

在程序中重载了>>运算符,其功能是让用户能够直接输入a+bi,a+b*i两种形式的复数,其结构框图如图3所示。

N YY N3. 程序界面开始界面将字符转变为数值NY‘i ’是否是最后一个字符 当前字符是否是数字输出错误信息,函数返回NN运行结果界面4.程序源代码及详细注解:# include<iostream.h># include<math.h># include<stdlib.h># include<string.h>#define Z 1e-6class CComplex{private:double Real,Image;public:CComplex(double real=0,double image=0) //构造函数{Real=real;Image=image;}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); //除法重载int operator==(CComplex&com);int operator!=(CComplex&com);int operator>(CComplex&com);int operator<(CComplex&com);float Module(void); //复数求模};CComplex CComplex::operator +(CComplex&com) //加法重载{CComplex t; //定义类对象t.Real=Real+com.Real; //实部相加t.Image=Image+com.Image; //虚部相加return t;}CComplex CComplex::operator -(CComplex&com) //减法重载{CComplex t; //定义类对象t.Real=Real-com.Real; //实部相减t.Image=Image-com.Image; //虚部相减return t;}CComplex CComplex::operator*(CComplex&com) //乘法重载{CComplex t; //定义类对象t.Real=Real*com.Real-com.Image*Image; //乘法实部t.Image=Real*com.Image+Image*com.Real; //乘法虚部return t;}CComplex CComplex::operator/(CComplex &com) //除法重载{CComplex t; //定义类对象t.Real=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*c om.Image);//除法实部t.Image=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image* com.Image);//除法虚部return t;}/*int CComplex:: operator!=(CComplex&com) //重载“!=”运算符,分别判断复数的实部与虚部{if(*this==com)return 0;elsereturn 1;}*/int CComplex:: operator>(CComplex&com) //重载“>”运算符,比较复数的模{if(Module()>com.Module())return 1; //大于,则返回1elsereturn 0;}int CComplex:: operator<(CComplex&com) //重载“<”运算符,比较复数的模{if(Module()<com.Module())return 1; //小于,则返回1elsereturn 0;}float CComplex::Module(){float t;t=sqrt(Real*Real+Image*Image);return t;// cin.get();// cin.get();}int CComplex::operator==(CComplex&com) //重载“==”运算符,分别判断两个复数对象的实部与虚部{if(Real==com.Real&&Image==com.Image)return 1; //实部与虚部分别相等返回1else return 0;}void Add(){CComplex a1,a2,sum,f(0,0);cout<<"加法计算"<<endl<<"最少输入两个复数,并以零结束"<<endl; cout<<"第一个复数"<<endl;cin>>a1;cout<<"第二个复数"<<endl;cin>>a2;sum=a1+a2;cout<<"第三个复数"<<endl;cin>>a1;int i=4;while(!(a1==f)){sum=sum+a1;cout<<"第"<<i<<"个复数"<<endl;cin>>a1;i++;}cout<<"结果"<<sum<<endl;cout<<"按任意键继续"<<endl;//cout.flush();cin.get();}void Sub(){CComplex a1,a2,sub,f(0,0);cout<<"减法计算"<<endl<<"最少输入两个复数,并以零结束"<<endl; cout<<"第一个复数"<<endl;cin>>a1;cout<<"第二个复数"<<endl;cin>>a2;sub=a1-a2;cout<<"第三个复数"<<endl;cin>>a1;int i=4;while(!(a1==f)){sub=sub-a1;cout<<"第"<<i<<"个复数"<<endl;cin>>a1;i++;}cout<<"结果:"<<sub<<endl;cout<<"按任意键继续"<<endl;//cout.flush();cin.get();}void Mul(){CComplex a1,a2,mul,f(0,0);cout<<"乘法计算"<<endl<<"最少输入两个复数,并以零结束"<<endl; cout<<"第一个复数"<<endl;cin>>a1;cout<<"第二个复数"<<endl;cin>>a2;mul=a1*a2;cout<<"第三个复数"<<endl;cin>>a1;int i=4;while(!(a1==f)){mul=mul*a1;cout<<"第"<<i<<"个复数"<<endl;cin>>a1;i++;}cout<<"结果:"<<mul<<endl;cout<<"按任意键继续"<<endl;//cout.flush();cin.get();}void Div(){CComplex a1,a2,div,f(0,0);cout<<"除法计算"<<endl<<"最少输入两个复数,并以零结束"<<endl; cout<<"第一个复数"<<endl;cin>>a1;cout<<"第二个复数"<<endl;cin>>a2;div=a1/a2;cout<<"第三个复数"<<endl;cin>>a1;int i=4;while(!(a1==f)){div=div/a1;cout<<"第"<<i<<"个复数"<<endl;cin>>a1;i++;}cout<<"结果:"<<div<<endl;cout<<"按任意键继续"<<endl;//cout.flush();cin.get();}void Compare(void){cout<<" 复数模比较"<<endl;CComplex a1,a2;cout<<"输入两个复数:"<<endl;cout<<"第一个复数:";cin>>a1;cout<<"第二个复数";cin>>a2;if(a1==a2)cout<<"这两个复数相等"<<endl;else if(a1>a2)cout<<a1<<"的模大于"<<a2<<"的模"<<endl;else if(a1<a2)cout<<a1<<"的模小于"<<a2<<"的模"<<endl;cout<<"按任意键继续"<<endl;cin.get();}istream& operator>>(istream&is,CComplex&com){ //重载输入,可以输入a+bi,也可以输入a+b*ichar s[100];is>>s; //字符串s用于接收复数int len=strlen(s);int n=0,sign=1; //n为当前从字符串中提取出来的数字,初始化为0;sign 为n的符号,初始化为正com.Image=com.Real=0;if(len==4){for(int k=0;k<len;k++) //判断字符串是否合法if((s[k]<'0'||s[k]>'9')&&(s[k]!='+'&&s[k]!='-'&&s[k]!='i')){cout<<"Error"<<endl; //若字符串不是1~9的数字或“+”、“-”、“=”则错误,输出Errorreturn is;}}for(k=0;k<len;) //依次识别字符串中和字符{if(n!=0&&(s[k]=='-'||s[k]=='+')) //判断是否为符号位{com.Real=sign*n; //是符号,且n!=0,n已被赋值,当前读取的是虚部的符号n=0; //将sign*n的值赋给实部,然后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;}else{for(int k=0;k<len;k++) //依次识别字符串中和字符{if((s[k]<'0'||s[k]>'9')&&(s[k]!='+'&&s[k]!='-'&&s[k]!='i'&&s[k]!='*')) //若字符串不是1~9的数字或“+”、“-”、“=”、“*”则错误,输出Error{cout<<"Error"<<endl;return is;}}for(k=0;k<len;) //依次识别字符串中和字符{if(n!=0&&(s[k]=='-'||s[k]=='+')) //判断是否为符号位{com.Real=sign*n;n=0;}if(s[k]=='-'){sign=-1;k++; //给符号标志赋值}if(s[k]=='+'){sign=1;k++; //给符号标志赋值}if(s[k]=='*') //若当前字符为*{k++;com.Image=sign*n;}if(s[k]=='i') //若当前字符为i{if(k!=len-1) //判断i是否为最后一个字符cout<<"error\n"; //若不是,则复数输入格式错误//else//com.Image=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,CComplex&com) //重载输出{if(fabs(com.Image)<Z) //如果虚部为零os<<com.Real; //只输出实部;else if((fabs(com.Real)<Z)) //如果实部为零os<<com.Image<<"i"; //只输出虚部else if(com.Image>0)os<<com.Real<<"+"<<com.Image<<"i"; //虚部为正,用“+”连接实部与虚部elseos<<com.Real<<com.Image<<"i"; //虚部为负,虚部的符号连接实部与虚部return os;}void Test(void){double real1,real2,real3,real4,image1,image2,image3,image4;CComplex answer,f5;int score=0;char op;for(int i=1;i<=10;i++){real1=rand()%200-100; //产生随机的两位数,可正可负image1=rand()%200-100;real2=rand()%200-100;image2=rand()%200-100;CComplex f1(real1,image1),f2(real2,image2);//用随机产生的两位数初始化类对象real3=rand()%20-10;//产生随机的一位数image3=rand()%20-10;real4=rand()%20-10;image4=rand()%20-10;CComplex f3(real3,image3),f4(real4,image4);//用随机产生的一位数初始化类对象op=rand()%3; //随即产生3种运算符cout<<"第"<<i<<"题:";switch(op){case 0:answer=f1+f2;cout<<f1<<"加上"<<f2<<"等于";break;case 1:answer=f1-f2;cout<<f1<<"减去"<<f2<<"等于";break;case 2: //乘法用实部、虚部都是一位的对象answer=f1*f2;cout<<f1<<"乘以"<<f2<<"等于";break;}cin>>f5;if(answer==f5){ //判断结果是否正确cout<<"此题做对了"<<'\n';cout<<"加十分:"<<'\n';score+=10;} //正确,加十分else{cout<<"此题做错了"<<'\n';cout<<"不得分:"<<'\n'; //错误,不得分}}cout<<"你的最后得分为:"<<score<<endl;}void main(void) //输出程序主菜单,并接收用户选择{char input;CComplex a,b,c,d,e,f,g;system("cls");cout<<"\t这是一个复数计算器程序,拥有以下功能,请按照菜单选择进入功能。

相关文档
最新文档