表达式求值Word格式文档下载.docx
《表达式求值Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《表达式求值Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
课题二:
马踏遍棋盘问题
详细内容见后
课题三:
表达式求值问题
课题四:
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
一.流程图
二.基本设计思想:
三.主要数据结构:
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++;
t1[p->
top]=x;
return
(1);
}
intgettop1(shuzi*p,int*x)
{if(p->
top==-1)/*将栈S的栈顶元素弹出,放到x所指的存储空间中*/
else
{*x=p->
top];
p->
top--;
/*修改栈顶指针*/
return
(1);
intTop1(shuzi*p,int*x)//将栈S的栈顶元素弹出,放到x所指的存储空间中,但栈顶指针保持不变
top==-1)/*栈为空*/
{chart2[M];
}zifu;
charPush2(zifu*s,charx)
{if(s->
s->
t2[s->
chargettop2(zifu*s,char*x)/*将栈S的栈顶元素弹出,放到x所指的存储空间中*/
{if(s->
top==-1)
{*x=s->
s->
intTop2(zifu*s,char*x)//将栈S的栈顶元素弹出,放到x所指的存储空间中,但栈顶指针保持不变
intIn(charch)
{if(ch=='
+'
)
return1;
elseif(ch=='
-'
)
*'
/'
('
)'
['
]'
{'
}'
elseif(ch=='
#'
elsereturn0;
charCompare(charx,charch)
{switch(x)
{
case'
:
if(ch=='
||ch=='
return'
>
'
;
elseif(ch=='
return'
<
break;
else
='
0'
elseif(ch='
default:
return'
}
}
intjisuan(inta,charc,intb)
{
switch(c)
return(a+b);
return(a-b);
return(a*b);
return(a/b);
/*执行文件*/
stdlib.h"
conio.h"
haha.h"
intExpEvaluation()/*计算*/
{charch;
charx,y;
charc;
inta,b,v;
shuzi*p;
zifu*s;
p=(shuzi*)malloc(sizeof(shuzi));
s=(zifu*)malloc(sizeof(zifu));
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-'
/*将字符转换为十进制数*/
fflush(stdin);
ch=getchar();
while(!
In(ch))//用ch逐个读入运算数的各位数码,并转化为十进制数temp
{temp=temp*10+ch-'
//将逐个读入运算数的各位转化为十进制数
fflush(stdin);
ch=getchar();
Push1(p,temp);
}
switch(Compare(y,ch))
{
case'
Push2(s,ch);
ch=getchar();
break;
gettop2(s,&
x);
fflush(stdin);
c);
gettop1(p,&
b);
a);
v=jisuan(a,c,b);
/*对a和b进行c运算*/
Push1(p,v);
}
Top2(s,&
Top1(p,&
v);
return(v);
voidmain()
{intg=1,h,k;
while(g)
printf("
---------------------主菜单----------------------------\n\n"
---------------------1表达式输入计算并输出结果------------\n"
---------------------2退出程序------------------------\n"
输入对应的序列号:
scanf("
%d"
&
h);
switch(h)
case1:
system("
CLS"
k=ExpEvaluation();
printf("
计算结果为:
%d\n\n"
k);
break;
case2:
g=0;
break;
default:
}
七.课程设计总结与体会:
这次的课程设计,遇到的问题颇多,比如走不出循环,没吃掉前面的字符,或者根本没进入循环等等,遇到问题后,就着手解决了,通过不断的努力和坚持,终于解决了以上问题,努力才有收获。
计算机科学与技术系课程设计评分表
课题名称:
表达式求值
项目
评价
设计方案的合理性与创造性
设计与调试结果
设计说明书的质量
答辩陈述与回答问题情况
课程设计周表现情况
综合成绩
教师签名:
日期:
(注:
1.此页附在课程设计报告最后一页;
2.综合成绩按优、良、中、及格和不及格五级评定。