1、表达式求值课 程 设 计 报 告课程名称 数据结构 课题名称 表达式求值 专 业 计算机科学与技术 班 级 0901 学 号 200903010102 姓 名 覃宇星 指导教师 李珍辉 邓作杰 郭芳 2011年7月7日湖南工程学院课 程 设 计 任 务 书课程名称 C语言程序设计 课 题 表达式求值 专业班级 计算机0901 学生姓名 学 号 指导老师 周铁山 审 批 任务书下达日期 2011年 6月 23 日任务完成日期 2011年 7月 7日数据结构课程设计一、 课程设计的性质和目的数据结构课程设计是计算机专业的专业课程,通过课程设计使学生进一步巩固课堂所学知识,全面熟悉、掌握数据结构的基
2、本设计方法和技巧,进一步提高分析问题、解决问题及上机操作能力,为将来从事计算机工作打下一定的专业基础。二、 设计课题课题一:迷宫问题详细内容见后课题二:马踏遍棋盘问题 详细内容见后课题三:表达式求值问题详细内容见后课题四:B+树的实现详细内容见后三、 课程设计报告要求课程设计报告每人一份,必须包含如下几个方面的内容:1.基本设计思想;2.主要数据结构;3.主要实施流程;4.所有源代码;5.课程设计总结与体会。四、 分组及选题办法1、 一人一组。2、 若选择课题四,则只需完成一题即可;否则,必须至少完成前三个课题中的任意两个。3、 成绩考核按个人课题完成情况、设计报告质量及对课程设计的态度等综合
3、评定。五、设计进度安排1、 讲课及上机调试时间安排:各班具体时间另行安排2、 其余时间:查阅资料,确定方案,设计课题相关程序。3、 分组答辩,交课程设计报告。 设计课题三:表达式求值问题一、问题提出 在高级语言程序中出现的数学表达式要进行求值运算,本课程设计要求模拟编译程序的求值过程,利用栈这种数据结构,对包含四则算术运算及多重括号及常量的表达式进行求值运算。二、设计要求1一次性输入一个表达式,包含数值常量、四则算术运算符、括号等。2能输出表达式的正确结果。1 输入输出界面清晰明了。三、设计提示1可用两个栈(操作数栈和运算符栈)来存储运算过程中的原始数据及中间结果。2运算过程中要将输入的数字型
4、字符转化为数值。3. 可以利用一个函数返回运算符之间的优先关系;也可将一个运算符放入一个一维数组,并根据运算符在该数组中的位置建立一个二维数组,存放运算符之间的优先关系。目录一. 流程图vi二. 基本设计思想vii三.主要数据结构vii四.主要实施流程vii五.运行结果举例vii六.源代码ix七.课程设计总结与体会xvi八评分表xvii一 . 流程图二.基本设计思想:1可用两个栈(操作数栈和运算符栈)来存储运算过程中的原始数据及中间结果。2运算过程中要将输入的数字型字符转化为数值。3. 可以利用一个函数返回运算符之间的优先关系;也可将一个运算符放入一个一维数组,并根据运算符在该数组中的位置建立
5、一个二维数组,存放运算符之间的优先关系。三.主要数据结构: Shuzi zifu 两个栈;四.主要实施流程: 一次性输入一个表达式,包含数值常量、四则算术运算符、括号,中括号 大括号等。通过push(分别把数字和字符入站) gettop(分别取数字和字符两个栈顶元素) top(分别读数字和字符两个栈顶元素) in(判断是否为数字还是字符) compare(比较运算符的优先级) jisuan(四则运算) ExpEvaluation(对表达式进行总体运算)等函数进行计算并得出结果五.运行结果举例进入主菜单,选1输入表达式,并计算结果显示出来(带中括号)输入表达式,并计算结果显示出来(带大括号)输入
6、2 程序结束六. 源代码:/*头文件 haha.h*/#include stdio.h#define M 100typedef struct int t1M; int top; shuzi;int Push1(shuzi *p, int x)if(p-top=M-1) return(0); p-top+; p-t1p-top=x; return(1);int gettop1(shuzi *p, int *x) if(p-top=-1) /* 将栈S的栈顶元素弹出,放到x所指的存储空间中 */ return(0); else *x=p-t1p-top; p-top-; /* 修改栈顶指针 */
7、return(1);int Top1(shuzi *p, int *x) /将栈S的栈顶元素弹出,放到x所指的存储空间中,但栈顶指针保持不变 if(p-top=-1) /*栈为空*/ return(0); else *x=p-t1p-top; return(1);typedef structchar t2M; int top; zifu;char Push2(zifu *s, char x)if(s-top=M-1) return(0); s-top+; s-t2s-top=x; return(1);char gettop2(zifu *s, char *x) /* 将栈S的栈顶元素弹出,放到
8、x所指的存储空间中 */ if(s-top=-1) return(0); else *x=s-t2s-top; s-top-; return(1);int Top2(zifu *s, char *x) /将栈S的栈顶元素弹出,放到x所指的存储空间中,但栈顶指针保持不变 if(s-top=-1) return(0); else *x=s-t2s-top; return(1);int In(char ch) if(ch=+) return 1; else if(ch=-) return 1; else if(ch=*) return 1; else if(ch=/) return 1; else
9、if(ch=() return 1; else if(ch=) return 1; else if(ch=) return 1; else if(ch=) return 1; else if(ch=) return 1; else if(ch=) return 1; else if(ch=#) return 1; else return 0;char Compare(char x,char ch) switch(x) case +: if(ch=+|ch=-|ch=)|ch=|ch=|ch=#) return ; else if(ch=*|ch=/|ch=(|ch=|ch=) return ;
10、 else if(ch=*|ch=/|ch=(|ch=|ch=) return ; break; case *: if(ch=(|ch=|ch=) return ; break; case /: if(ch=(|ch=|ch=) return ; break; case (: if(ch=+|ch=-|ch=*|ch=/|ch=() return ; else if(ch=(|ch=|ch=) return 0; break; case : if(ch=+|ch=-|ch=*|ch=/|ch=() return ; else if(ch=(|ch=|ch=|ch=)|ch=) return 0
11、; break; case : if(ch=+|ch=-|ch=*|ch=/|ch=(|ch=) return ; else if(ch=(|ch=|ch=|ch=)|ch=|ch=) return 0; break; case #: if(ch=+|ch=-|ch=*|ch=/|ch=(|ch=|ch=) return top=-1; s-top=-1; Push2(s,#); Top2(s,&y); printf(nPlease input an expression (Ending with #) :n); fflush(stdin); ch=getchar(); while(ch!=#
12、|y!=#) /* Top()通过函数值返回栈顶元素*/ if(!In(ch) /*不是运算符,是运算数*/ int temp; temp=ch-0; /*将字符转换为十进制数*/ fflush(stdin); ch=getchar(); while(!In(ch) /用ch逐个读入运算数的各位数码,并转化为十进制数temp temp=temp*10+ch-0; / 将逐个读入运算数的各位转化为十进制数 fflush(stdin); ch=getchar(); Push1(p,temp); else switch(Compare(y,ch) case : gettop2(s,&c); gett
13、op1(p,&b); gettop1(p,&a); v=jisuan(a,c,b); /* 对a和b进行c运算 */ Push1(p,v); break; Top2(s,&y); Top1(p,&v); return (v); void main() int g=1,h,k; while(g) printf(-主菜单-nn); printf(-1 表达式输入计算并输出结果-n); printf(-2 退出程序-n); printf(输入对应的序列号:n); scanf(%d,&h); switch(h) case 1:system(CLS); k=ExpEvaluation(); printf(计算结果为:%dnn,k); break; case 2:g=0;break; default:g=0; 七.课程设计总结与体会:这次的课程设计,遇到的问题颇多,比如走不出循环,没吃掉前面的字符,或者根本没进入循环等等,遇到问题后,就着手解决了,通过不断的努力和坚持,终于解决了以上问题,努力才有收获。计算机科学与技术系课程设计评分表课题名称: 表达式求值 项 目评 价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩 教师签名: 日 期: (注:1此页附在课程设计报告最后一页;2综合成绩按优、良、中、及格和不及格五级评定。)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1