欢迎来到天天文库
浏览记录
ID:6331486
大小:160.00 KB
页数:21页
时间:2018-01-10
《数据结构课程设计-利用栈求表达式的值》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、课程设计报告题目十三、利用栈求表达式的值一、设计任务与目标编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。主要功能描述如下:1、从键盘上输入表达式,以“=”号结束表达式。2、分析该表达式是否合法:(1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。(3)若是其它字符,则返回错误信息。3、若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。附加功能:1.规定表达式的合法
2、性2.小数计算3.计算记录的保存与查看4.(1)规定表达式的合法性,括号配对,不能出现“6++3”、“6+-3”等符号重叠的情况。(2)表达式开头只能是数字或“(”,表达式中只能有一个“=”。程序中应主要包含下面几个功能函数:voidinitstack():初始化堆栈intmake_str():语法检查并计算intpush_num(doublenum):将操作数压入堆栈charprocede(chartop,charcode):处理操作码intchange_opnd(intoperate):将字符型操作
3、码转换成优先级intchange_opnd(charcode):将操作码压入堆栈charpop_opnd(opnd*op):将操作码弹出堆栈intcaculate(intcur_opnd):简单计算+,-,*,/doublepop_num(num*nu):弹出操作数一、方案设计与论证1.定义一个expression全局表达式结构体expr[1000]存放计算过的表达式(expstr[MAXSIZE])和计算结果(result)、一个计量器(i)、一个表达式字符串、一个操作码栈和一个操作数栈;2.把表达式
4、字符串从头到尾逐一扫描,将输入的表达式进行语法检查;3.第一个字符只能是数字或“(”,最重一个字符只能是“=”;4.表达式括号必须配对,中间不能出现“=”;5.在“(”前面只能是“+、-、*、/、(”,在“+、-、*、/、=、)”前面只能是数字或“)”;6.把表达式字符串从头到尾逐一扫描,直到表达式扫描完毕,操作码栈为空;7.把字符根据运算优先级别选择操作;8.把表达式中的数值部分字符串转成数值压入操作数栈;9.是“(”直接压入到操作码栈,级别比操作码栈顶元素高的,把运算符压入操作码栈;10.级别比操作
5、码栈低的,弹出操作码栈的栈顶元素和操作数栈的两个栈顶元素,进行运算后再压入操作数栈;11.是“)”,若操作码栈顶是“(”,把弹出操作码栈顶元素,否则“)”视为级别最低的元素,重复7;12.最后计算出结果并将其存放在expr[i],计量器加1;13.重复计算后,将结果保存在文件里,并统计计算次数;1.查看多次计算结果,以表形式输出;2.查看本次计算记录,以表形式输出;3.清除计算记录,重新计算。二、算法说明(一)程序总共有如下函数:主要函数:voidstart(opnd*op,num*nu)//程序主菜单
6、voidstart2(opnd*op,num*nu)//第二层计算选择,子菜单voidload()//显示所有计算记录voidsave()//保存计算结果voidcheck()//显示本次计算结果voidresult(opnd*op,num*nu)//计算结果doublecaculate(opnd*op,num*nu)//简单计算+,-,*,/表达式处理函数:intmake_str()//语法检查doublechange_num(charstr[])//数字字符串转成double型数字charproce
7、de(chartop,charcode)//处理操作码,判断栈的操作intchange_opnd(charcode)//字符型操作码转换优先级,非表达式字符返回-2栈操作函数:doubleget_num(num*nu)//查看操作数栈栈顶doublepop_num(num*nu)//操作数栈出栈intpush_num(num*nu,doubleda)//压入操作数栈intempty_num(num*nu)//判空voidinitstack(num*nu)charget_opnd(opnd*op)//查看
8、栈顶charpop_opnd(opnd*op)//出栈intpush_opnd(opnd*op,charco)//压栈intempty_opnd(opnd*op)//判空voidinitstack(opnd*op)//初始化栈(一)函数间的调用关系:lmain():主函数→start();↗load()→start();lstart()程序模式函数→清空文件→exit();↘make_str()→result(op,nu)→start2()
此文档下载收益归作者所有