数据结构课程设计报告表达式求值(计算器)

上传人:夏** 文档编号:486821611 上传时间:2023-06-02 格式:DOCX 页数:7 大小:87.86KB
返回 下载 相关 举报
数据结构课程设计报告表达式求值(计算器)_第1页
第1页 / 共7页
数据结构课程设计报告表达式求值(计算器)_第2页
第2页 / 共7页
数据结构课程设计报告表达式求值(计算器)_第3页
第3页 / 共7页
数据结构课程设计报告表达式求值(计算器)_第4页
第4页 / 共7页
数据结构课程设计报告表达式求值(计算器)_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《数据结构课程设计报告表达式求值(计算器)》由会员分享,可在线阅读,更多相关《数据结构课程设计报告表达式求值(计算器)(7页珍藏版)》请在金锄头文库上搜索。

1、课程设计报告课程名称:数据结构课程设计设计题目:表达式求值(计算器)学 院:信息科学与工程学院专 业:计算机科学与技术(软件外包)姓 名:指导教师:二零一五年十二月二十九日一、设计容与要求1、问题描述设计一个算术计算器,能运算包括四则运算、括号的表达式的运算。2、设计要求实现()、+、-、*、/、A等运算,实现小数和整数混合运算,优先级的处理,能判 断算术表达式是否正确等。二、算法设计1、输入并建立表达式,运用数组结构体构建将整型数字与操作符结合定义运算符的优先级。typedef struct yxj(char operat;int rank;yxj;2、分别建立一个操作数栈和操作符栈存放数字

2、和操作符,定义操作符栈第一个元素优先级最低。3、自左向右扫描字符串遇到字符串中的数字时一律提取转换成double型存入操作数栈。遇到 操作符时,则将当前运算符的优先级数与运算符栈顶元素的优先级数相比较。若当前运算符的 优先级数大,则进栈;反之,则取出栈顶的运算符,并在数栈中连续取出两个栈顶元素作为运 算对象进行运算,并将运算结果存入数栈,然后继续比较当前运算符与栈顶元素的优先级。直 到当前运算符进栈。4、对比运算符进行+ - * / () a运算。三、程序代码#include#include#include#include#define N 100typedef struct yxj(char

3、 operat;int rank;yxj;typedef struct str(char dataN;zs;void szys(yxj mark)(yxj osN;char ch;double nsN;zs zhan20;int numbN;int Len,p=0,q=1,i,o=1,n=0;char dataN;os0=mark0;printfC请输入算术(+ - * / E表达式(以=结束):n);scanf(%s”,data);Len=strlen(data);numb0=0;for(i=0;i20;i+)zhani.data0=0;for(i=0;iLen;i+)(int t=0;if

4、(datai=A|datai=+|datai=-|datai=*|datai=/|datai= (|datai=)|datai=)(int j,k=0;if(datai=|datai=A|datai=+|datai=-|datai=*|datai = =7)&(datai-1=A|datai-1=+|datai-1=-|datai-1=*|datai-1=/) (printfC 格式错误 n);return;numbq+=i;while(zhan(p+k)/2.data0!=0)(k+;for(j=numbq-2;j=0&dataj=9|dataj=.) zhan(p+k)/2.datat+=

5、dataj;zhan(p+k)/2.datat=0;if(zhan(p+k)/2.data0!=0)nsn+=atof(zhan(p+k)/2.data);p+;for(j=0;joso-1.rank&markj.operat!=()(oso+=markj;break;else(double numb1,numb2,numb;ch=os-o.operat;if(ch=+)(numb1=ns-n;numb2=ns-n;numb=numb1+numb2;nsn+=numb;if(ch=-)(numb1=ns-n;numb2=ns-n;numb=numb2-numb1;nsn+=numb;if(ch

6、=*)(numb1=ns-n;numb2=ns-n;numb=numb2*numb1;nsn+=numb;if(ch=/)(numb1=ns-n;numb2=ns-n;if(numb1=0)(printf(无效操作 n);return;else(numb=numb2/numb1;nsn+=numb;if(ch=A)(numb1=ns-n;numb2=ns-n;numb=pow(numb2,numb1); nsn+=numb;else if(datai=0&datai=9);else if(datai=.);else(printf(格式错误,请重新输入:n);szys(mark);break;p

7、rintf(%lfn”,ns0);int main ()(yxj mark9;mark0.operat=#;mark0.rank=-1;mark1.operat=+;mark1.rank=1;mark2.operat=-;mark2.rank=1;mark3.operat=*;mark3.rank=2;mark4.operat=/;mark4.rank=2;mark5.operat=(;mark5.rank=-1;mark6.operat=);mark6.rank=-1;mark7.operat=;mark7.rank=0;mark8.operat=A;mark8.rank=3;while(1

8、)(char iN;printf(*1、计算器 *n);printf(*0、退出 *n);scanf(%s”,&i);if(strcmp(i,0”)=0) break;else if(strcmp(i,1”)=0) szys(mark);elseprintf(没有该选项n);四、运行测试1.正常四则运算2.乘方运算3.除数为零时4.格式出现错误M M M M K3、j艮出 XJtXJtX请输入算术z - A,匀表达式(W =结束): 祐福误M M M M 、 -jp T= MM MM MM K M K 、j艮出 HHHHH5.小数运算 I , I 3 J.I I 11. i a- -ir ir

9、 ir ir ir IJ I i J. llmi HD , I p 、| | | n n n n n1请输入算术( - * L)表达式(以=结束):2_5+6_2=S-703030M MM MM 、 1 j- zg1 M M M M MMMMMMg . j艮 lP XNXNX五、结论这次课程设计让我们更加了解大一学到的C和这个学期学到的数据结构。课设题目要求不仅 要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力和更加了解编 程思想和编程技巧。这次课程设计也让我们有一个深刻的体会,那就是细节决定成败,编程最需要的是严谨, 如何的严谨都不过分,往往检查了半天发现错误发生在某个

10、括号,分号,引号,或者数据类型 上。程序设计时,也不要怕遇到错误,在实际操作过程中犯的一些错误还会有意外的收获。在 具体操作中这学期所学的数据结构的理论知识得到巩固,达到课程设计的基本目的,也发现自 己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活, 执行效率高等特点。这个程序是我们3个人完成的,我们的工作是一个团队的工作,团队需要个人,个人也离 不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。实习中 只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致 整个工作失败。团结协作是我们成功的一项非常重要的保证。而这次课程设计也正好锻炼我们 这一点,这也是非常宝贵的。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号