下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 VC++课程设计___简单计算器的设计

VC++课程设计___简单计算器的设计.doc

VC++课程设计___简单计算器的设计

不知道
2011-12-14 0人阅读 举报 0 0 暂无简介

简介:本文档为《VC++课程设计___简单计算器的设计doc》,可适用于高等教育领域

大连理工大学CC语言程序设计报告简单科学计算器设计课程设计说明书计算器(VC课程设计)学生姓名:指导教师:王新祥专业:计算机科学与技术系部:计算机与信息科学系学号:班级:完成时间:目录一、设计任务选题意义设计目标关于virtualc可行性及需求分析二、程序设计与实现程序结构详细设计程序流程图程序设计具体步骤程序运行界面三、设计难点与解决方法四、设计效果与不足之处程序效果图不足之处五、参考资料六、课程设计总结、设计任务选题意义此题选择意义在于引导学生学会设计简单的科学计算器进一步掌握VisualC应用程序。统地学习面向对象编程思想了解MFC架构逐步熟悉可视化编程环境VisualC并在此环境下设计并实现一个简单计算器系统。该计算器应能实现如下功能:)、数的加、减、乘、除、乘方等简单计算)、科学计算函数包括正弦、余弦、正切、余切、开方、对数、指数等函数运算)、具备历史计算的记忆功能。设计目标使计算器含有以下功能:()、基本运算功能:可以进行加、减、乘、除等基本运算。()、三角函数运算功能:可以一次完成三角函数之间的计算求正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)等函数的值。()、对数、指数运算功能:可以一次求的对数函数(log、ln)、指数函数(exp)等函数的运算。()、删除功能:可以在输入错误时删除已输入的数值。()、归零功能:可以在计算完成后清空编辑框中的已有数值。关于virtualc关于VisualCVisualC是Microsoft公司在年推出的基于WindowsX和WindowsNT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境程序员可以里利用该开发环境轻松地访问C源代码编辑器资源编辑器和使用内部调试器并且可以创建项目文件。VisualC不仅包括编译器而且它还包括许多有用组件通过这些组件的协同工作可以在VisualC集成环境中轻松地完成创建源文件编辑资源以及对程序的编译连接和调试等各项工作。VC是Windows、XP或WindowsNT下的一个应用程序本身对软硬件没有特殊要求。就是说它对环境的要求与Windows、WindowsNT要求是一致的。硬件要求:一般在以上的处理器、MB以上内存、MB以上的硬盘。软件要求:Windows或WindowsNT以上版本。VC系统可以在一张CD盘上也可以在“VisualStudio(VisualC、VisualFoxpro)”等产品的第一张CD盘上。一般都有一个VC的自动安装程序也可以执行VC目录下的setupexe在安装包的提示下进行对初学者可采用“典型安装”方式。在安装好VC系统后有时根据需要添加或删除某些部件可插入CD盘重新执行setupexe安装程序安装程序会检测当前系统安装VC的足件用户单击“添加/删除”按钮后在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。与一般的应用软件一样有以下两种启动方式:()通过“开始”按钮选择“程序”菜单然后打开“MicrosoftVisualstudio中文版”子菜单中的“MicrosoftVisualC中文版”程序。()用户也可以使用命令行启动VC。单击“开始”按钮后选择“运行”命令在“运行”对话框中输入c:ProgramFilesMicrosoftVisualStudioVCVCexe(按默认盘符和路径安装)即可。可行性及需求分析本设计是简单计算器。日常计算机使用中常常涉及到一些有关计算的问题一个小型的计算器软件变得非常有用该校型计算器需要空间资源较少对电脑其他程序的应用影响较小。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果充分降低了数字计算的难度和节约了时间对人们的生活有一定的帮助。本软件主要用于计算机windowsXP以上版本的用户的使用这次课程设计一般是实现简单计算器的功能。要程序能实现:加减乘除开方倒数等运算功能还要实现数据的输入输出计算显示及程序退出等功能。另外还可以实现多种科学计算的功能如:三角函数的计算弧度与角度间的转换对数指数的计算等等。、程序设计与实现程序结构本计算器首先是通过在计算器的界面上按下相应的按钮来进行基本的加减乘除等基本运算计算器还能够进行平方运算求平方根运算乘方运算三角函数运算(包括正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot))对数函数(ln、log)指数函数(exp)幂函数(x~)等运算。详细步骤程序的流程图程序设计具体步骤)总体功能:整个计算器除了基本的加、减、乘、除运算外另外还有7个功能可以实现七大运算:三角函数运算功能、对数函数运算功能、指数函数运算功能、乘方运算功能、平方运算功能、根式运算功能、归零功能。各个运算功能的详细设计说明分别如下:a、基本运算功能主要实现数据的加、减、乘、除运算提供简单的科学计算!b、三角函数运算功能用来执行三角函数的运算包括正弦函数(sin)、余弦函数(cos)和正切函数(tan)c、对数函数运算功能用来执行对数函数的运算包括以e为底ln函数和以为底的lg函数。d、指数函数运算功能用来执行指数函数的运算。e、乘方运算功能用来执行乘方的运算进行数值的成倍计算。f、平方运算功能用来执行平方运算说到底它也属于乘方运算的范畴。g、根式运算功能用来执行根式的运算。h归零、删除功能主要实现数据的清零当用户输入数据出错时使用此功能可以清除已输入的内容并重新输入新的运算内容。具体程序如下:doubleoperate(doubley,charc,doublex)对两个数计算(含是双目运算符:如*,等等){doublerif(c=='')r=xyelseif(c=='')r=xyelseif(c==''y!=)r=xyelseif(c=='*')r=x*yelseif(c=='^'){r=for(inti=i<=yi)r*=x}elseif(c==''){intr=(int)x(int)yr=double(r)}returnr}doubleoperateone(doubleone,charcc)对一个数运算(含单目运算符:如log(L),sin(S)等等){doublerif(cc=='Q')r=sqrt(one)elseif(cc=='C')r=cos(one)elseif(cc=='S')r=sin(one)elseif(cc=='T')r=tan(one)elseif(cc=='c')r=acos(one)elseif(cc=='s')r=asin(one)elseif(cc=='t')r=atan(one)returnr}doubleoperateL(doublea,doubleb,chardian)求对数的值{doubler=log(b)log(a)returnr})运算符的比较等级具体程序如下:typedefstructnode为了处理符号而建立的链表(如:()){chardatanode*next}nodetypedefstructstacknum存储数的栈{double*topdouble*base}stacknumtypedefstructstackchar存储运算符号的栈{char*topchar*base}stackcharstacknumSnum定义stackcharSchar定义charfu={'n',')','','','*','','','^','Q','L','C','S','T','c','s','t','('}intcompare表现出各运算符号的优先级doubleshu存储"数"的数组doubledairesult运算的结果是为了处理M运算(简介函数里有M的定义)intbiao=和diaresult一样为了处理M运算charlineSIZE输入的所要计算的表达式voidinit()初始化{comparefu=用数字的大小表现出符号的优先级comparefu=comparefu=comparefu=comparefu=comparefu=comparefu=comparefu=for(inti=i<=i)comparefui=comparefu=Snumbase=(double*)malloc(sizeof(double)*SIZE)为栈开辟空间Scharbase=(char*)malloc(sizeof(char)*SIZE)同上Snumtop=SnumbaseSchartop=Scharbase}voidpushnum(doublen)数字进栈{*Snumtop=n}voidpushchar(charc)运算符号进栈{*Schartop=c}doublepopnum()数字出栈{doublem=*SnumtopSnumtopreturnm}charpopchar()运算符号出栈{charcc=*SchartopSchartopreturncc}chargettopchar()得到运算符号的栈中最顶端的运算符号{return*Schartop})整个表达式具体运算程序:doublecompute()对整个表达式的计算{charc表示运算符号intp=用于shup,先初始化inti,jinit()进行初始化pushchar('n')linestrlen(line)='n'linestrlen(line)=''if(biao)pushnum(dairesult)把运算的结果先进栈,在这个结果的基础上继续进行运算biao=for(i=linei!='')把表达式中的数字字符串转化成可计算的数字{intflag=intflag=标记是否是运算符号intflag=标记是否出现''doubleh=intge位数intbiaodian=是否是小数的类型while(){flag=for(j=j<=j){if(linei==fuj){flag=break}}if(linei==''){break}if(linei==''){ige=biaodian=}if(linei=='P'){shup=piibreak}if(linei=='E'){shup=eibreak}if(flag){h=h*(linei'')flag=iif(biaodian)ge}elsebreak}if(flag){if(biaodian){intr=for(intk=k<=gek)r*=h=r}shup=h把转化而来的数字存于数组}if(linei=='')shup=elseif(linei=='')shup=elseif(linei=='*')shup=elseif(linei=='')shup=elseif(linei=='')shup=elseif(linei=='^')shup=elseif(linei=='Q')shup=elseif(linei=='L')shup=elseif(linei=='C')shup=elseif(linei=='S')shup=elseif(linei=='T')shup=elseif(linei=='c')shup=elseif(linei=='s')shup=elseif(linei=='t')shup=elseif(linei=='(')shup=elseif(linei==')')shup=elseif(linei=='n')shup=i}i=while(shui!=||gettopchar()!='n'){doublem=shuiif(m>=){pushnum(m)i}else{if(m==)c=''elseif(m==)c=''elseif(m==)c='*'elseif(m==)c=''elseif(m==)c=''elseif(m==)c='^'elseif(m==)c='Q'elseif(m==)c='L'elseif(m==)c='C'elseif(m==)c='S'elseif(m==)c='T'elseif(m==)c='c'elseif(m==)c='s'elseif(m==)c='t'elseif(m==)c='('elseif(m==)c=')'elseif(m==)c='n'charch=gettopchar()得到最顶端运算符号if(comparech<comparec)运算符号级别的比较{pushchar(c)i}elseif(ch=='('c==')'){popchar()i}elseif(comparech>=comparecch!='('ch!='n'){if(ch=='Q'||ch=='C'||ch=='S'||ch=='T'||ch=='c'||ch=='s'||ch=='t'){doubleone=popnum()chardian=popchar()pushnum(operateone(one,dian))}elseif(ch=='L'){doubleoneL=popnum()doubletwoL=popnum()chardian=popchar()pushnum(operateL(twoL,oneL,dian))}else{doublex=popnum()doubley=popnum()chardian=popchar()if(dian==''x==)判断是否除了"零"{cout<<"由于您除了零结果将是错误的"<<endl}pushnum(operate(x,dian,y))把进行一次计算的结果入栈}}else{pushchar(c)i}}}doubleresult=popnum()得到结果returnresult})检查表达式的书写错误:intcheckkuohao()检查表达式括号是否匹配{inti,f=intkuoSIZE,key=memset(kuo,,sizeof(kuo))for(i=linei!=''i){if(linei=='(')kuof=elseif(linei==')'){if(kuof==){kuof=f}else{key=break}}}if(keyf==)returnelsereturn}intcheckchar()检查运算符号是否合法(如:*){inti,gefor(i=linei!=''){ge=while(linei==''||linei==''||linei=='*'||linei==''||linei==''||linei=='^'||linei=='Q'||linei=='L'||linei=='S'||linei=='C'||linei=='T'||linei=='s'||linei=='c'||linei=='t'){gei}i}if(ge>=)returnelsereturn}voidoutput(doubleresult)打出结果{printf("所得结果是:")cout<<result<<endl}voidcheck()检查表达式是否合法{voidintroduce()charcc决定计算器按哪种功能进行计算doubleresult结果voidinput()定义if(checkkuohao()checkchar())看是否合法,合法则计算{result=compute()output(result)cout<<"输入一个字符'M'或'D'或'F',决定是否继续:"<<endlwhile(cin>>cc){if(cc=='M'){system("cls")introduce()printf("您上次所得结果为:")cout<<result<<endlcout<<"在上次计算结果的基础上,请继续输入想计算的表达式"<<endldairesult=resultbiao=input()输入表达式break}elseif(cc=='D'){system("cls")introduce()cout<<"计算器已清零,请输入您所要计算的表达式"<<endlinput()输入表达式break}elseif(cc=='F'){system("cls")cout<<"计算器关闭,谢谢使用!"<<endlbreak}else{cout<<"所输入字符无效,请输入一个字符'M'或'D'或'F'!"<<endlcontinue}}}else不合法分两种不合法{if(checkkuohao()==checkchar()==){cout<<"您所输入的表达式括号不匹配,请重新输入:"<<endlinput()输入表达式}else{cout<<"您所输入的表达式不合法,请重新输入:"<<endlinput()输入表达式}}})负号的处理方式:voidtacklefuhao()处理负号{node*root,*head,*p,*q,*proot=head=newnodehead>next=intifor(i=linei!=''i)建立链表{p=newnodep>data=lineip>next=head>nexthead>next=phead=p}deletepq=(node*)malloc(sizeof(node))head=rootif(root>next>data==''||root>next>data=='')处理第一个字符{p=newnodep>data=''p>next=head>nexthead>next=p}if(root>next!=){for(q=root>nextqq=q>next){if(q>data=='('(q>next>data==''||q>next>data=='')){p=newnodep>data=''p>next=q>nextq>next=p}}}deleteqp=newnodeintqi=for(p=root>nextpp=p>next){lineqi=p>data}lineqi=''}voidinput()输入{cin>>lineif(biao==)tacklefuhao()处理负号check()检查表达式是否合法})程序主界面的设计:voidintroduce()对计算器的符号功能的简要介绍{cout<<"***的计算器简要介绍"<<endl<<endlcout<<"|C(cos)|S(sin)|T(tan)|a(arccos)|c(arcsin)|t(arctan)|"<<endlcout<<"|||||||"<<endlcout<<"|||||on|L(log)|"<<endlcout<<"|||||||"<<endlcout<<"||||*||Q(sqrt)|"<<endlcout<<"|||||||"<<endlcout<<"|||||M(M)|Enter(=)|"<<endlcout<<"|||||||"<<endlcout<<"||||^(乘方)|F(off)||"<<endlcout<<""<<endlcout<<"对于对数输入L表示以为底的对数"<<endlcout<<"M(在前面结果的基础上继续计算如:上次结果为现输入*)"<<endlcout<<"D(清零并继续输入)"<<endlcout<<"F(计算机关闭)"<<endlcout<<"输入P就代表输入圆周率,输入E代表输入自然对数"<<endl<<endl}程序运行界面:、设计难点与解决方法设计难点:遇到一些复杂的函数计算时设计的代码不能很好的反映出该有的功能。解决策略:通过看书、上网查资料和与同学讨论自己再反复修改代码运行程序直到实际效果满意为止。设计难点:在编译程序时出现类型不匹配的错误查找是Cstring和double类型之间没有转换。解决策略:查找到Format()和atof()函数可以进行他们之间的转换、设计效果与不足之处程序运行结果图()计算机主界面:()输入表达式计算结果:()按M继续输入表达式进行简单计算:关闭计算器:程序的不足之处:计算器的计算功能还不是很多设计效果也不是很理想只能进行简单的运算。、参考文献严华峰VisualC课程设计案例精编北京:中国水利水电出版社张宏军党留群赵天巨.VisualC编程案例精解.北京:电子工业出版社郑阿奇丁有和.VisualC教程.北京:机械工业出版社、课程设计总结经过对VC课程设计的编写设计加深了我对《VC程序设计》课程所学知识的进一步理解掌握了各种函数的应用和调用。这次的课程设计让我更加了解VC程序的内部结构和资源使用。总之完成这次课程设计之后使我更加掌握了编程的基本要素学会了用编程思想解决生活中的常见问题用所学知识解决实际问题。C任重而道远。。。。。。。。。对数运算指数运算输入数据输出结果果根式运算平方运算归零功能减法运算乘法运算除法运算正弦运算余弦运算正切运算乘方运算反三角运算输入数据加法运算开始结束三角函数正切运算余弦运算正弦运算

VIP免券下载文档

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/29

VC++课程设计___简单计算器的设计

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利