




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机科学与信息工程学院数据结构课程设计设计题目:简单计算器 专 业 计算机软件 班 级 计软2班 小组成员 蔡松佐 陈吉院 王希 刘军 符锦柏 曾祖滨 刘一霖 指导教师 张显全 2010 年 12 月 25 日数据结构分工情况组长:蔡松佐组员:曾祖滨、陈吉院、符锦柏、刘军、刘一霖、王希王希:负责设计程序的整体框架(定义数据结构,编写主函数)评分:90分符锦柏:负责编写栈的代码评分:95分蔡松佐:负责编写计算算术表达式的代码评分:95分陈吉院:负责编写比较符号优先级的代码评分:90分曾祖滨:负责将所有代码整合成一个完整的程序评分:88分刘军:负责写实验报告评分:90分刘一霖:负责测试程序,看其
2、是否具有良好的健壮性评分:88分简单计算器一 基本功能描述简单的计算器的功能是对基本的加、减、乘、除、四则运算,可对输入的操作数,包括整数,小数等进行运算。二 设计思路本程序主要是采用栈的理论知识,主要用到两个结构体栈,一个用来转化表达式,一个用来计算表达式。区别就在于一个存储字符,一个存储浮点。首先,用一个字符数组来存储用户输入的中缀表达式。然后用栈来把这个表达式转化为后缀表达式,转化时要进行符号优先级比较,这里将*/的优先级定为2,+-定为1,括号和=定为0。具体思想如下:例如用户输入了1+2*3=,将其存放入一个字符数组中。先在栈的底部存放一个=号符,用作符号优先级比较。首先将1存放到另
3、外一个字符数组s1中,再将+号入栈。入栈的同时与底部的=比较优先级,+的优先级高于=,所以不出栈,之后将2存放入s2中,然后再将*入栈,入栈的同时与+比较符号优先级,*比+高,所以不出栈。再将3存入s2中。之后将栈中不是=的运算符都弹出栈,并依次存入s2中。所以s2中的表达式为123*+。之后进行计算,计算时用到浮点栈。首先将s2中的字符依次入栈,遇到运算符时进行计算。所以将123入栈后,再将*入栈的同时,将前面两个数字进行运算,算出结果为6并存入栈中,之后再将+入栈,再与1进行运算,结果即为7,然后输出结果。三 概要设计1,子函数功能struct Stack用来转化表达式的机构体栈。Stru
4、ct FStack用来计算表达式的结构体栈void InitStack(Stack &s)初始化结构体栈void InitFStack(FStack &s)初始化结构体栈char GetTop(Stack s)获取栈顶数据void IncrementStackSize(Stack &s)为栈扩充ncrementsize个存储空间void IncrementFStackSize(FStack &s)为栈扩充ncrementsize个存储空间void Push(Stack &s,char e)第一个栈入栈操作void PushF(FStack &s,float e)第二个栈入栈操作bool Emp
5、ty(Stack s)判断第一个栈是否为空。bool EmptyF(FStack s)判断第二个栈是否空char Pop(Stack &s)表达式出栈float PopF(FStack &s)计算的数据出栈int Precede(char op)确定优先级的函数void Change(char *s1,char *s2)改变两个字符串的储存位置float Compute(char *s2)实现数据的运算2 函数的调用 主函数栈的建立Stack,FStackChange(str1,str2)计算表达式Compute(str2)InitFStack(S);PushF(S,x)PopF(S)输出ci
6、n.getline(str1,2);3 测试数据及测试结果(1)测试 1+2+3=6(2) 测试2*4=8(3)测试 3/2=1.5(4)测试(1+2)*3=9四 程序代码#include #include #include #include #include #include struct Stack /转换表达式char *elem;int top;int stacksize;int incrementsize;struct FStack /计算float *elem;int top;int stacksize;int incrementsize;void InitStack(Stack
7、&s)s.elem=new char100;s.top=-1;s.stacksize=100;s.incrementsize=10;void InitFStack(FStack &s)s.elem=new float100;s.top=-1;s.stacksize=100;s.incrementsize=10;char GetTop(Stack s)return s.elems.top;void IncrementStackSize(Stack &s)char *a=new chars.stacksize+s.incrementsize;for(int i=0;i=s.top;i+)ai=s.
8、elemi;delete s.elem;s.elem=a;s.stacksize+=s.incrementsize;void IncrementFStackSize(FStack &s)float *a=new floats.stacksize+s.incrementsize;for(int i=0;i Precede(ch) /优先级()函数返回运算符形参的优先级s2j+ = w;Pop(R);w = GetTop(R);Push(R,ch);ch = s1+i;else /此处为数字或小数点字符的处理while (isdigit(ch) | ch = .)s2j+ = ch;ch = s1
9、+i;s2j+ = ; /被转换后的每个数值后放一个空格/-ch = Pop(R);while (ch != =)s2j+ = ch;ch = Pop(R);s2j+ = =; /加入字符串结束符s2j+ = 0;float Compute(char *s2)FStack S; /用S栈存储操作数和中间计算结果InitFStack(S);istrstream ins(s2); /把s2定义为输入字符串流对象inschar ch; /用于输入字符float x; /用于输入浮点数insch;while (ch != =)switch (ch)case +:x = PopF(S) + PopF(S
10、);break;case -:x = PopF(S);x = PopF(S) - x;break;case *:x = PopF(S) * PopF(S);break;case /:x = PopF(S);x = PopF(S) / x;break;default:ins.putback(ch);insx;PushF(S,x);insch;if (!EmptyF(S)x = PopF(S);if (EmptyF(S) /如果栈中只有一个值那一定是结果return x;void main()/主程序FStack s;char a10;float b,c;char str150,str250; /
11、暂时存储表达式char j=y;cout *欢迎使用本计算器*endlendl;haha:while(j=Y|j=y)int i=0,m=0,n=0,k=0,l=0,q=0,p=0;cout 请输入一个以=字符结束的中缀算术表达式:endlendl;cin.getline(str1,sizeof(str1);while(str1i!=0)i+;if(str1i-1!=)cout表达式错误.请重新输入.endlendl;goto haha;i=0;while(str1i!=0)if(str1i=0&str1i-1=/)cout表达式错误.请重新输入.endlendl;goto haha;i+;i
12、=0;while(str1i!=0)if(str1i=()m+;if(str1i=)n+;if(str1i=)k+;if(str1i=)l+;if(str1i=)q+;if(str1i=)p+;i+;if(m!=n | k!=l | q!=p)cout表达式错误.请重新输入.endlendl;goto haha;Change(str1,str2); /处理结果coutn求值结果为: str1Compute(str2)endl;cout是否继续 :(Y/N)j;cin.getline(str1,2);coutendl *感谢使用本计算器*endl;五 课程设计总结1 收获通过这次课程设计,更进一步了解了栈的原理和应用,同时也锻炼了数据结构在实际中的熟练运用。2 心得体会在这次数据结构设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题要不断地更正以前的错误思维。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 骨折术后康复流程
- 2025年安徽工贸职业技术学院单招职业倾向性测试题库及参考答案1套
- 2024年投资项目管理关键试题及答案
- 2025年安徽新闻出版职业技术学院单招职业倾向性考试题库必考题
- 物业安全班长转正述职报告
- 2025年安徽省淮北市单招职业倾向性考试题库审定版
- 2024赛季物流师综合试题及答案
- 核电站运行中的风险沟通与透明度考核试卷
- 2025年安徽国际商务职业学院单招综合素质考试题库一套
- 质量管理的心得体会
- 港口散装液体危险化学品港口经营人的装卸管理人员从业资格考试
- 分子诊断技术在感染性疾病中的应用
- 中国全部城市名及拼音
- 各国安规认证大全带图标讲解
- DB32/T 4478-2023 化工废盐处理过程污染控制技术规范
- 奇门遁甲入门教程(不收费)课件
- 飞机科普知识公开课一等奖市赛课获奖课件
- 施工现场重大危险源辨识及监控措施
- 矿大毕业设计-固定式带式输送机设计
- 卵巢癌诊治指南
- 【超星尔雅学习通】《海洋与人类文明(浙江海洋大学)》章节测试题及答案
评论
0/150
提交评论