C++程序设计-复数计算器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《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 20
using 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;
else
cout<<SUM_1<<"+"<<SUM_2<<"i"<<endl;
}
//主函数
int main()
{
cout<<"这是一个简单的复数计算器,具有对复数进行'+,-,*,/' 运算的能力。
"<<endl;
cout<<endl;
cout<<"首先输入a+bi形式的复数。
再换行,输入运算符。
再换行,输入另一个复数。
"<<endl;
cout<<"换行可得运算结果。
"<<endl;
cout<<"可以进行连续运算。
"<<endl;
cout<<endl;
cout<<"输入形式错误则弹出提示,清零重新开始。
"<<endl;
char a[M];
int f=1,m=1;
while(m==1)
{
cin>>a;
if(a[0]=='c'||a[0]=='C')
{cout<<"清零,现在重新开始"<<endl;continue;}
else if(a[0]=='Q'||a[0]=='q'){m=0;break;}
else if(a[0]=='-'||a[0]>='0'&&a[0]<='9')
{
f=1;
cal cal1(a);
while(f==1)
{
cal1.esc();
cal1.pass();
while(a[0]!='q'&&a[0]!='Q')
{
cin>>a;
if(a[0]=='+')
{
cin>>a;
if(a[0]=='Q'||a[0]=='q')break;
else if(a[0]=='c'||a[0]=='C')
{cout<<"清零,现在重新开始"<<endl;f=0;continue;}
else if(a[0]=='-'||a[0]>='0'&&a[0]<='9')
{
cal1.esc();
cal1.add();
cal1.out();
continue;
}
else{cout<<"输入有误,现在重新运行计算器1!"<<endl;f=0;break;}
}
else if(a[0]=='-')
{
cin>>a;
if(a[0]=='Q'||a[0]=='q'){m=0;f=0;break;}
else if(a[0]=='c'||a[0]=='C')
{cout<<"清零,现在重新开始"<<endl;f=0;break;}
else if(a[0]=='-'||a[0]>='0'&&a[0]<='9')
{
cal1.esc();
cal1.sub();
cal1.out();
continue;
}
else{cout<<"输入有误,现在重新运行计算器2!"<<endl;f=0;break;}
}
else if(a[0]=='*')
{
cin>>a;
if(a[0]=='Q'||a[0]=='q'){m=0;f=0;break;}
else if(a[0]=='c'||a[0]=='C')
{cout<<"清零,现在重新开始"<<endl;f=0;break;}
else if(a[0]=='-'||a[0]>='0'&&a[0]<='9')
{
cal1.esc();
cal1.mul();
cal1.out();
continue;
}
else{cout<<"输入有误,现在重新运行计算器3!"<<endl;f=0;break;}
}
else if(a[0]=='/')
{
cin>>a;
if(a[0]=='Q'||a[0]=='q'){m=0;f=0;break;}
else if(a[0]=='c'||a[0]=='C')
{cout<<"清零,现在重新开始"<<endl;f=0;break;}
else if(a[0]=='-'||a[0]>='0'&&a[0]<='9')
{
cal1.esc();
cal1.div();
cal1.out();
continue;
}
else{cout<<"输入有误,现在重新运行计算器4!"<<endl;f=0;break;}
}
else if(a[0]=='q'||a[0]=='Q'){f=0;m=0;}
else if(a[0]=='c'||a[0]=='C')
{cout<<"清零,现在重新开始"<<endl;f=0;break;}
else{cout<<"输入有误,现在重新运行计算器5!"<<endl;f=0;break;}
}
}
}
else{cout<<"输入有误,现在重新运行计算器6!"<<endl;f=0;continue;}
}
}
五、运行结果显示
1、未输入任何命令
2、复数加法运算
3、复数减法运算
4、复数乘法运算
5、复数除法运算
6、输入错误,弹出提示
六、本次课程设计的总结
通过这次c++的课程设计,使我更加熟练的使用c++的编程技巧,在实际编程过程中,遇到了很多问题,通过仔细看书,和查找相关资料,使我对这门课程有了更加深刻的了解。
这次实践报告,让我从理论走到了实际,品尝到了胜利的喜悦。
七、参考文献
1、陈维兴林小茶C++面向对象程序设计教程清华大学出版社2009
2、谭浩强著. C++程序设计题解与上机指导(第三版)北京:清华大学出版社,
2009
3、谭浩强著. C++面向对象程序设计.北京:清华大学出版社,2009。