2栈的应用上机实验要求
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
⏹设计要求
首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。
主控菜单设计要求:程序运行后,显示一个标题“判断表达式括号匹配”,标题下方给出4个菜单项的内容和输入提示:
1.输入表达式
2.输出表达式
3.判断表达式的括号是否匹配并计算表达式的值
4.退出
请选择1—4:
⏹功能要求
完成各菜单的功能,能正确判断表达式的括号匹配(括号限圆括弧和方括弧两种),
若匹配,利用算符优先法计算表达式的值。
计算表达式值的3个相关函数(后面已给出,可以直接粘贴到程序中使用):
I n(c)---- //判断c是否为运算符
Precede(θ1, θ2) ----//判断两运算符θ1, θ2的优先关系
Operate(a, θ, b)---- //做四则运算a theta b,返回运算结果
⏹实现要求
1)可用VC++的引用或c语言用指针实现各功能的调用
2)必须用栈实现括号匹配和表达式计算
⏹实验提交要求
1)画流程图
2)实现功能的全部程序
3)说明程序设计过程中的难点、解决办法及编程小结或体会。
4)实验及报告必须于2015.4.29提交
Status In(SElemType c) //判断c是否为运算符
{
switch(c)
{
case'+':
case'-':
case'*':
case'/':
case'(':
case')':
case'#':
return TRUE;
default:
return FALSE;
}
}
char Precede(SElemType t1, SElemType t2) //判断两符号的优先关系{
SElemType f;
switch(t2)
{
case'+':
case'-':
if(t1=='('||t1=='#')
f='<';
else
f='>';
break;
case'*':
case'/':
if(t1=='*'||t1=='/'||t1==')')
f='>';
else
f='<';
break;
case'(':
if(t1==')')
{ printf("括号不匹配\n");
exit(OVERFLOW);
}
else
f='<';
break;
case')':
switch(t1)
{
case'(':
f='=';
break;
case'#':
printf("缺乏左括号\n");
exit(OVERFLOW);
default:
f='>';
}
break;
case'#':
switch(t1)
{
case'#':
f='=';
break;
case'(':
printf("缺乏右括号\n");
exit(OVERFLOW);
default:
f='>';
}
}
return f;
}
SElemType Operate(SElemType a,SElemType theta,SElemType b) //做四则运算a theta b,返回运算结果{
SElemType c;
switch(theta)
{
case'+':
return a+b;
case'-':
return a-b;
case'*':
return a*b;
}
return a/b;
}
教师:曹妍2015.4.10