




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告课程设计名称:数据构造系:计算机科学系学生姓名:李锡会班级:13計算機科學與技術1班学号:18成绩:指引教师:肖錦輝老師开学时间:-年第2学期
一.设计题目算术表达式求值二.重要内容(所选课题需求分析,实现功能等)1、程序能对所输入表达式作简朴判断,如表达式有错。2、能解决单目运算符:+、-。三.课题设计基本思想,原理和算法描述(涉及课题所用数据构造,界面设计、输入/输出设计,功能模块设计,符号阐明等)对于中缀表达式,普通运算规则如下:1、先乘方,再乘除,最后加减。2、同级运算从左算到右。3、先括号内,再括号外。操作符号:+-*/^%().依照实际经验,可以对运算符设立统一优先级,从而以便比较。上面讨论+、-为双目运算符,如单目运算符,编程实现时,可在前面加上0而转化为双目运算符。思路如下:1、将optr栈和opnd栈清空,在optr栈中加入一种‘=’。2、从输入流获取一字符ch,循环执行环节3至环节5直到求出表达式值为止。3、取出optr栈顶optrTop,当optrTop=‘=’且ch=‘=’时,整个表达式求值完毕,这时opnd栈栈顶元素为表达式值。4、若ch不是操作符,则将字符放回输入流(cin.putback),读操作符operand;将operand加入opnd栈,读入下一种字符ch。5、若ch是操作符,按如下方式进行解决:a.若ch为单目运算符,则在ch前面加上操作符0,也就是将0入pond。b.若optrTop与ch不匹配,例如optrTop=‘)’且ch=‘(’,显示错误信息。c.若optrTop=‘(’且ch=‘)’,则从optr栈退出栈顶‘(’,去括号,然后从输入流中读入字符并送入ch;d.若ch=‘(‘或optrTop比ch优化级低,则ch入optr,从输入流中取下一种字符ch;e.若optrTop不不大于或等于ch优先级,则从opnd栈退出left和right,从optr栈退出theta,形成运算符指令(left)theta(right),成果入opnd栈。四.源程序及注释需要用到头文献有:lk_stack.hnode.hutility.hcal.h//cal.h#ifndef__CALCULATOR_H__#define__CALCULATOR_H__#include"lk_stack.h"//链栈类template<classElemType>classCalculator{private: LinkStack<ElemType>opnd; LinkStack<char>optr; //charGetChar(); intOperPrior(charop); voidGet2Operands(ElemType&left,ElemType&right); ElemTypeOperate(ElemTypeleft,charop,ElemTyperight); boolIsOperator(charch);public: Calculator(){}; virtual~Calculator(){}; voidRun();};template<classElemType>intCalculator<ElemType>::OperPrior(charch){if(ch=='=')return1;if(ch=='^')return5;if(ch=='('||ch==')')return2;if(ch=='+'||ch=='-')return3;if(ch=='*'||ch=='/'||ch=='%')return4;return0;}template<classElemType>boolCalculator<ElemType>::IsOperator(charch){if(ch=='='||ch=='('||ch=='*'||ch=='/'||ch=='+'||ch=='-'||ch==')'||ch=='%'||ch=='^')returntrue;elsereturnfalse;};template<classElemType>ElemTypeCalculator<ElemType>::Operate(ElemTypeleft,chartheta,ElemTyperight)//操作成果:执行运算leftopright{ElemTyperesult;if(theta=='+')result=left+right;//加法运算elseif(theta=='-')result=left-right;//减法运算elseif(theta=='*')result=left*right;//乘法运算//elseif(theta=='/'&&right==0)throw"除数为零!";//抛出异常elseif(theta=='/')result=left/right;//除法运算elseif(theta=='^')result=pow(left,right);elseif(theta=='%')result=(int)left%(int)right;returnresult;//返回result}template<classElemType>voidCalculator<ElemType>::Get2Operands(ElemType&left,ElemType&right)//操作成果:从栈opnd中退出两个操作数{opnd.Pop(right);opnd.Pop(left);}template<classElemType>voidCalculator<ElemType>::Run(){ optr.Clear(); opnd.Clear(); optr.Push('='); charch; charpriorChar; charoptrTop; ElemTypeoperand; charop; priorChar='='; ch=GetChar();optr.Top(optrTop); while(optrTop!='='||ch!='=') { if(isdigit(ch)||ch=='.') { cin.putback(ch); cin>>operand; opnd.Push(operand); priorChar='0'; ch=GetChar(); } elseif(!IsOperator(ch)) { cout<<"表达式错误!"<<endl; return; } else { if((priorChar=='='||priorChar=='(')&&(ch=='+'||ch=='-')) { opnd.Push(0); priorChar='0'; }if(optrTop=='('&&ch==')') { optr.Pop(optrTop); ch=GetChar(); priorChar=')'; } elseif(ch=='('||OperPrior(optrTop)<OperPrior(ch)) { optr.Push(ch); priorChar=ch; ch=GetChar(); } else { optr.Pop(op); ElemTypeleft,right; Get2Operands(left,right); opnd.Push(Operate(left,op,right)); } } optr.Top(optrTop); } opnd.Top(operand); cout<<operand<<endl;};#endif//main.cpp#include"utility.h"#include"cal.h"//计算器类intmain(void){try//用try封装也许浮现异常代码{do{cout<<"输入一种表达式:"<<endl;Calculator<double>cal; cal.Run();//表达式求值cout<<"与否继续";}while(UserSaysYes());}catch(Errorerr)//捕获并解决异常{err.Show();//显示异常信息}system("PAUSE");//调用库函数system()return0;//返回值,返回操作系统}五、运营示例及成果分析(截图分析)六、调试和运营程序过程中产生问题及采用办法Throw语句出错,用cout和return代替。七、总结和展望(400字以上)感谢教师给咱们这次课程设计机会,在本次项目中,虽然我面临着许多困难,但是,通过不断地努力与调试后,终于完毕了该次项目。但是,该项目局限性,加上运营环境问题,也许会浮现不稳定,但总体来说,可以顺利实现项目规定。固然,在完毕该次项目过程中,我意识到自己在基本知识上各种局限性,同步,我也为了完毕项目而不断努力地复习并验证知识点。我但愿在后来日子里,可以接受更大挑战,由于那不但可以给自己锻炼,还可以在那个过程中,学到更多项目经验。说夸张一点,那是算是宝贵财富吧。固然,需要在拥有一定知识基本,才干接受一定难度项目,因此,必要先从基本知识开始,固然需要对基本知识加以巩固,然后不断地上机操作,并加以锻炼。说实话,对初次完毕项目,难度比较大,由于要考虑各种
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年微生物学与免疫学考试试题及答案
- Tesmilifene-fumarate-Standard-DPPE-fumarate-Standard-生命科学试剂-MCE
- mCherry-mRNA-N1-Me-Pseudo-UTP-生命科学试剂-MCE
- Halymecin-C-生命科学试剂-MCE
- 2025年青少年心理健康教育师考试试题及答案
- 2025年人工智能应用专业毕业生能力测试试题及答案
- 2025年社会心理学应用与研究方法考试试题及答案
- 2025年经济法学专业考试相关试题及答案
- 2025年建筑设计专业研究生入学考试试卷及答案
- 2025年电子技术基础考试试题及答案
- DBJD25-67-2019甘肃省建筑与装饰工程预算定额地区基价不含税中册
- 餐饮服务员培训全流程解析
- 《成人高血压合并2型糖尿病和血脂异常基层防治中国专家共识(2024年版)》解读
- 工业互联网驱动的军工企业智能化改造路径研究-洞察阐释
- 《小学交通安全教育》课件
- 江西省2025年初中学业水平考试样卷(四)数学模拟试题 (含部分答案)
- 2024北京西城区五年级(下)期末英语试题及答案
- 2025届广东省东莞市东华中学初三联合考试数学试题试卷含解析
- 非人灵长类动物实验的现状、伦理问题及审查要点
- 数字人合同协议
- 小青瓦仿古屋面施工方案
评论
0/150
提交评论