算数表达式的求解课程设计报告(编辑修改稿)内容摘要:

break。 case 39。 =39。 : Pop(amp。 StackR)。 i++。 break。 case 39。 39。 : //栈顶的优先级高则出栈, 并将计算结果压入栈内 r = Pop(amp。 StackR)。 a = Pop(amp。 StackD)39。 039。 //操作数在栈内以 ascii 的形式存储,出站后要将ascii转化为整型,然后进行运算 b = Pop(amp。 StackD)39。 039。 Push(amp。 StackD,Operate(a,r,b))。 break。 } } return (GetTop(amp。 StackD)39。 039。 )。 // 将栈顶元素转化为整型的形式输出 } 对于表达式求解函数,在程序中主要思想是对读入的表达式进栈进行判断。 若读入的是‘ 0’到‘ 9’之间的字符,将这些字符采用 ascii相减的形式转化为整型,再入 opnd栈,若读入的字符为运算符,则将运算符入栈,并比较运算符之间的优先级,看是否运算,若栈顶的运算符小于当前输入的运算符,则不需 运算,只要将当前运算符入栈即可。 否则,运算。 运算时先将 optr栈的栈顶运算符和 opnd栈的栈顶、次栈顶元素出栈,并将 opnd 栈中出栈的元素的 ASCII形式转化为整型再计算,最后讲计算结果再转化为 ASCII码的形式压入 opnd栈中。 使表达式求解函数返回值为 opnd的栈顶元素。 上级调试过程 遇到问题以及解决方案 问题 调试时没有错误,但运行时显示错误。 解决方案:通过它提示的错误和警告,在判断是否为运算符的子函数中出现错误,如果为运算符时返回 1,其次返回 0,在返回 0时没有用 else,这样使得整个 子函数可以返回一个有效值。 问题 调试时程序显示没有错误,可以运行,但在运行时结果却出现错误。 解决方案:把程序从头看了一遍,发现在比较优先级的函数中,优先级的比较比较乱,而且部分出错,后来查了关于运算符优先级的资料,通过在纸上把各种优先级列出,解决这个错误。 算法的时间复杂度 由于在主函数用到嵌套循环,故算法的时间复杂度为 O( n^2)。 测试结果及其分析 ( 1)、 实现基本的加减乘除运算,当想要继续输入表达式时点击 enter键,若要结束,点击 n或 N键即可,而且可实现多位数的运算。 ( 2) 、实现复杂的算术表达式 ( 3) 、错误表达式的处理 用户使用说明 ( 1)本程序执行的文件为“算数表达式的求解问题”。 ( 2)所求表达式中都只是仅包含加、减、乘、除 4种基本运算的,其中也包含括号的应用,所有的运算对象均为简单变量,要求将表达式中的数字字符转化为整型,且输入表达式以“ ”结束。 ( 3)输入表达式时,以‘ ’结束,当点击回车键时即可得到运算结果,当想继续输入表达式时,再次点击回车键即可,当想结束时,点击字母 ‘ n’或‘ N’。 ( 4)当输入错误表达式时,程序会给出相应的提醒。 参考文献 ( 1)王昆仑 、李红主编 , 数据结构与算法,北京:中国铁道出版社, 2020年 5月 ( 2)阮宏一 、鲁静主编 , 数据结构课程设计( C/C++描述) , 北京:电子工业出版社, 2020年 1月 附录(源程序) : include include define MAXSIZE 16 typedef struct { int data[MAXSIZE]。 int top。 int base。 //栈低 }Stack。 // 顺序栈的定义 //以下为函数声明 void InitStack(Stack *)。 //初始化栈 int Empty(Stack *)。 //判空栈 void Push(Stack *, int )。 //进栈 int Pop(Stack *)。 //出栈 int GetTop(Stack *)。 //取栈顶元素 int Operate(int ,char ,int )。 // 计算结果 char Proceed(char ,char )。 // 比较优先级 int In(char )。 //判断输入符 int EvalExpres(void)。 //表达式计算函数 // 定义两个栈分别存放运算符和操作数 Stack StackR,StackD。 int main()//主函数 { int v。 char ch。 while(1) { printf(\t************欢迎使用算术表达式的求解的小程序 ************\n)。 v = EvalExpres()。 printf(\t表达式的计算结果为 :%d,v)。 printf(\n\tInput 39。 n39。 to quit and ENTER run again:)。 do { scanf(%c,amp。 ch)。 if(ch == 39。 n39。 || ch == 39。 N39。 ) exit(0)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。