资源描述:
《算术表达式的求解数据结构课程设计说明书.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、中北大学数据结构课程设计说明书 学生姓名: 张蓓学号:1021011602 学院:软件学院专业:软件工程 题目:算术表达式的求解指导教师何志英 2011年12月20日161.设计任务概述(包括系统总体框图及功能描述)利用栈结构,求解用户正确输入的算术表达式,并实现保存、读取、清除功能,且对用户输入的错误信息进行提示,重新输入.按下”Q”键表达式错误表达式正确按下”S”键按下”R”键按下”E”键求解算术表达式系统输入算术表达式判断表达式是否正确求解运算,得到结果提示错误,重新输入按下“N”键按下“Y”键退出?(Y/N)退出运算系统读取刚才保存的得数保存得数按下“Q”键
2、161.本设计所采用的数据结构(如:链表、栈、树、图等)本设计采用了栈结构,创建了两个栈,一个压入数字,另一个压入符号。2.功能模块详细设计2.1详细设计思想求解表达式的主要思想是创建两个栈,一个是符号栈,另一个是数字栈。符号栈关键是运算优先顺序,数字栈关键是多位数与小数的计算。本程序设计了四个模块,第一个模块doubleresult(doublenum1,charop,doublenum2),主要目的是进行加减乘除运算的操作方法,num1与num2的关系;第二个模块intcompute(charstr[]),主要目的是对用户输入的算术表达式进行求解,其中对多位数与小数进行了
3、定义与数值计算,以及带括号的表达式运算的优先顺序;第三个模块voidface(),主要目的是设计用户主界面;第四个模块是主函数,主要目的是将上述模块集中运用,进行求解。至此完成利用栈结构求解表达式运算。2.2核心代码调用的库函数:#include#include#include#include#include自己定义的函数:1)doubleresult(doublenum1,charop,doublenum2)进行加减乘除运算2)intcompute(charstr[])对用户输
4、入的算术表达式进行求解3)voidface()用户主界面4)main()主函数核心定义函数设计:intcompute(charstr[]){doublenum=0;16inti=0,j=1,k=1;intFlag=0;numTop=opTop=0;while(str[i]!=' '
5、
6、opTop>0){if(str[i]>='0'&&str[i]<='9')if(Flag==0)num=num*10+str[i]-'0';else{num+=(str[i]-'0')/(j*10.0);j*=10;}elseif(str[i]=='.')Flag=1;elseif(k==1&
7、&str[i]=='-'&&(i==0
8、
9、op(str[i-1])))k=-1;else{if(i>0&&!op(str[i-1])&&str[i]!='('&&str[i-1]!=')'){numStack[numTop++]=num*k;num=0;j=1;Flag=0;k=1;}if(opTop==0
10、
11、str[i]=='(')opStack[opTop++]=str[i];else16if(str[i]==')'){while(opTop>0&&opStack[--opTop]!='('){numStack[numTop-2]=result(numStack[numT
12、op-2],opStack[opTop],numStack[numTop-1]);numTop--;}if(opStack[opTop]!='(')return0;}else{if(str[i]==' '&&numTop==0)return0;while(opTop>0&&op(str[i])<=op(opStack[opTop-1])){numStack[numTop-2]=result(numStack[numTop-2],opStack[--opTop],numStack[numTop-1]);numTop--;}if(str[i]!=' ')opStack[opT
13、op++]=str[i];}}if(str[i]!=' ')i++;}if(numTop!=1
14、
15、opTop!=0)return0;16return1;}1.1程序运行结果(拷屏)1运行程序,打开程序界面2用户正确输入算术表达式的值162如果在输入过程中出现错误,例如,出现两个乘号,按c键清除3清除后162正确输入算术表达式后按e得到正确结果3按s键保存所得到的结果162按r读出被保存的数据3按q退出程序4按Y退出161.课程设计心得、存在问题及解决方法通过本次课程设计,我巩固了栈的建立,入栈,出栈的