表达式求值.docx

上传人:b****5 文档编号:3572654 上传时间:2022-11-24 格式:DOCX 页数:15 大小:100.60KB
下载 相关 举报
表达式求值.docx_第1页
第1页 / 共15页
表达式求值.docx_第2页
第2页 / 共15页
表达式求值.docx_第3页
第3页 / 共15页
表达式求值.docx_第4页
第4页 / 共15页
表达式求值.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

表达式求值.docx

《表达式求值.docx》由会员分享,可在线阅读,更多相关《表达式求值.docx(15页珍藏版)》请在冰豆网上搜索。

表达式求值.docx

表达式求值

课程设计报告

课程名称数据结构

课题名称表达式求值

专业计算机科学与技术

班级0901

学号200903010102

姓名覃宇星

指导教师李珍辉邓作杰郭芳

2011年7月7日

湖南工程学院

课程设计任务书

 

课程名称C语言程序设计

课题表达式求值

 

专业班级计算机0901

学生姓名

学号

指导老师周铁山

审批

 

任务书下达日期2011年6月23日

任务完成日期2011年7月7日

《数据结构课程设计》

一、课程设计的性质和目的

数据结构课程设计是计算机专业的专业课程,通过课程设计使学生进一步巩固课堂所学知识,全面熟悉、掌握数据结构的基本设计方法和技巧,进一步提高分析问题、解决问题及上机操作能力,为将来从事计算机工作打下一定的专业基础。

二、设计课题

课题一:

迷宫问题

详细内容见后

课题二:

马踏遍棋盘问题

详细内容见后

课题三:

表达式求值问题

详细内容见后

课题四:

B+树的实现

详细内容见后

三、课程设计报告要求

课程设计报告每人一份,必须包含如下几个方面的内容:

1.基本设计思想;2.主要数据结构;3.主要实施流程;4.所有源代码;

5.课程设计总结与体会。

四、分组及选题办法

1、一人一组。

2、若选择课题四,则只需完成一题即可;否则,必须至少完成前三个课题中的任意两个。

3、成绩考核按个人课题完成情况、设计报告质量及对课程设计的态度等综合评定。

五、设计进度安排

1、讲课及上机调试时间安排:

各班具体时间另行安排

2、其余时间:

查阅资料,确定方案,设计课题相关程序。

3、分组答辩,交课程设计报告。

设计课题三:

表达式求值问题

一、问题提出

在高级语言程序中出现的数学表达式要进行求值运算,本课程设计要求模拟编译程序的求值过程,利用栈这种数据结构,对包含四则算术运算及多重括号及常量的表达式进行求值运算。

二、设计要求

1.一次性输入一个表达式,包含数值常量、四则算术运算符、括号等。

2.能输出表达式的正确结果。

1.输入输出界面清晰明了。

三、设计提示

1.可用两个栈(操作数栈和运算符栈)来存储运算过程中的原始数据及中间结果。

2.运算过程中要将输入的数字型字符转化为数值。

3.可以利用一个函数返回运算符之间的优先关系;也可将一个运算符放入一个一维数组,并根据运算符在该数组中的位置建立一个二维数组,存放运算符之间的优先关系。

 

目录

一.流程图……………………………………………………………vi

二.基本设计思想……………………………………………………vii

三.主要数据结构……………………………………………………vii

四.主要实施流程……………………………………………………vii

五.运行结果举例……………………………………………………vii

六.源代码………………………………………………………………ix

七.课程设计总结与体会………………………………………………xvi

八.评分表………………………………………………………………xvii

 

一.流程图

 

 

二.基本设计思想:

1.可用两个栈(操作数栈和运算符栈)来存储运算过程中的原始数据及中间结果。

2.运算过程中要将输入的数字型字符转化为数值。

3.可以利用一个函数返回运算符之间的优先关系;也可将一个运算符放入一个一维数组,并根据运算符在该数组中的位置建立一个二维数组,存放运算符之间的优先关系。

三.主要数据结构:

Shuzizifu两个栈;

四.主要实施流程:

一次性输入一个表达式,包含数值常量、四则算术运算符、括号,中括号大括号等。

通过push(分别把数字和字符入站)gettop(分别取数字和字符两个栈顶元素)top(分别读数字和字符两个栈顶元素)in(判断是否为数字还是字符)compare(比较运算符的优先级)jisuan(四则运算)ExpEvaluation(对表达式进行总体运算)等函数进行计算并得出结果

五.运行结果举例

进入主菜单,选1

输入表达式,并计算结果显示出来(带中括号)

输入表达式,并计算结果显示出来(带大括号)

输入2程序结束

六.源代码:

/*头文件haha.h*/

#include"stdio.h"

#defineM100

typedefstruct

{intt1[M];

inttop;

}shuzi;

intPush1(shuzi*p,intx)

{if(p->top==M-1)

return(0);

p->top++;

p->t1[p->top]=x;

return

(1);}

intgettop1(shuzi*p,int*x)

{if(p->top==-1)/*将栈S的栈顶元素弹出,放到x所指的存储空间中*/

return(0);

else

{*x=p->t1[p->top];

p->top--;/*修改栈顶指针*/

return

(1);}

}

intTop1(shuzi*p,int*x)//将栈S的栈顶元素弹出,放到x所指的存储空间中,但栈顶指针保持不变

{if(p->top==-1)/*栈为空*/

return(0);

else

{*x=p->t1[p->top];

return

(1);}

}

typedefstruct

{chart2[M];

inttop;

}zifu;

charPush2(zifu*s,charx)

{if(s->top==M-1)

return(0);

s->top++;

s->t2[s->top]=x;

return

(1);}

chargettop2(zifu*s,char*x)/*将栈S的栈顶元素弹出,放到x所指的存储空间中*/

{if(s->top==-1)

return(0);

else

{*x=s->t2[s->top];

s->top--;

return

(1);}

}

intTop2(zifu*s,char*x)//将栈S的栈顶元素弹出,放到x所指的存储空间中,但栈顶指针保持不变

{if(s->top==-1)

return(0);

else

{*x=s->t2[s->top];

return

(1);}

}

intIn(charch)

{if(ch=='+')

return1;

elseif(ch=='-')

return1;

elseif(ch=='*')

return1;

elseif(ch=='/')

return1;

elseif(ch=='(')

return1;

elseif(ch==')')

return1;

elseif(ch=='[')

return1;

elseif(ch==']')

return1;

elseif(ch=='{')

return1;

elseif(ch=='}')

return1;

elseif(ch=='#')

return1;

elsereturn0;}

charCompare(charx,charch)

{switch(x)

{

case'+':

if(ch=='+'||ch=='-'||ch==')'||ch==']'||ch=='}'||ch=='#')

return'>';

elseif(ch=='*'||ch=='/'||ch=='('||ch=='{'||ch=='[')

return'<';

break;

case'-':

if(ch=='+'||ch=='-'||ch==')'||ch=='#'||ch==']'||ch=='}')

return'>';

elseif(ch=='*'||ch=='/'||ch=='('||ch=='['||ch=='{')

return'<';

break;

case'*':

if(ch=='('||ch=='['||ch=='{')

return'<';

else

return'>';

break;

case'/':

if(ch=='('||ch=='['||ch=='{')

return'<';

else

return'>';

break;

case'(':

if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(')

return'<';

elseif(ch==')')

return'=';

elseif(ch=='#'||ch=='['||ch==']'||ch=='{'||ch=='}')

return'0';

break;

case')':

if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch==')'||ch=='#'||ch==']'||ch=='}')

return'>';

elseif(ch=='('||ch=='['||ch=='{')

return'0';

break;

case'[':

if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(')

return'<';

elseif(ch=']')

return'=';

elseif(ch=='#'||ch=='{'||ch=='}'||ch=='['||ch==')')

return'0';

case']':

if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='#'||ch=='}')

return'>';

elseif(ch=='('||ch=='['||ch=='{'||ch==')'||ch==']')

return'0';

break;

case'{':

if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch=='[')

return'<';

elseif(ch='}')

return'=';

elseif(ch=='#'||ch==')'||ch==']'||ch=='{')

return'0';

case'}':

if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='#')

return'>';

elseif(ch=='('||ch=='['||ch=='{'||ch==')'||ch==']'||ch=='}')

return'0';

break;

case'#':

if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch=='['||ch=='{')

return'<';

elseif(ch=='#')

return'=';

elseif(ch==')'||ch==']'||ch=='}')

return'0';

break;

default:

return'0';

break;

}

}

intjisuan(inta,charc,intb)

{

switch(c)

{

case'+':

return(a+b);

break;

case'-':

return(a-b);

break;

case'*':

return(a*b);

break;

case'/':

return(a/b);

break;}

}

/*执行文件*/

#include"stdio.h"

#include"stdlib.h"

#include"conio.h"

#include"haha.h"

intExpEvaluation()/*计算*/

{charch;

charx,y;

charc;

inta,b,v;

shuzi*p;

zifu*s;

p=(shuzi*)malloc(sizeof(shuzi));

s=(zifu*)malloc(sizeof(zifu));

p->top=-1;

s->top=-1;

Push2(s,'#');

Top2(s,&y);

printf("\nPleaseinputanexpression(Endingwith#):

\n");

fflush(stdin);

ch=getchar();

while(ch!

='#'||y!

='#')/*Top()通过函数值返回栈顶元素*/

{

if(!

In(ch))/*不是运算符,是运算数*/

{inttemp;

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'<':

Push2(s,ch);

fflush(stdin);

ch=getchar();

break;

case'=':

gettop2(s,&x);

fflush(stdin);

ch=getchar();

break;

case'>':

gettop2(s,&c);

gettop1(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);

}

voidmain()

{intg=1,h,k;

while(g)

{

printf("---------------------主菜单----------------------------\n\n");

printf("---------------------1表达式输入计算并输出结果------------\n");

printf("---------------------2退出程序------------------------\n");

printf("输入对应的序列号:

\n");

scanf("%d",&h);

switch(h)

{

case1:

system("CLS");

k=ExpEvaluation();

printf("计算结果为:

%d\n\n",k);

break;

case2:

g=0;break;

default:

g=0;}

}

}

七.课程设计总结与体会:

这次的课程设计,遇到的问题颇多,比如走不出循环,没吃掉前面的字符,或者根本没进入循环等等,遇到问题后,就着手解决了,通过不断的努力和坚持,终于解决了以上问题,努力才有收获。

计算机科学与技术系课程设计评分表

课题名称:

表达式求值

项目

评价

设计方案的合理性与创造性

设计与调试结果

设计说明书的质量

答辩陈述与回答问题情况

课程设计周表现情况

综合成绩

教师签名:

日期:

(注:

1.此页附在课程设计报告最后一页;2.综合成绩按优、良、中、及格和不及格五级评定。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1