.
.下载可编辑.
程序实习报告书
起止日期:2014年6月23日至2014年7月4日
学 号: 班 级: 姓 名: 指导教师:
通信与电子工程学院
2014年7月4日
目 录
TOC \o "1-5" \h \z \o "Current Document" 需求分析 2
\o "Current Document" 1.1程序的功能2
\o "Current Document" 1.2输入输出的要求2
\o "Current Document" 1.3测试数据2
\o "Current Document" 概要设计3
\o "Current Document" 详细设计4
3.1模块功能说明4
\o "Current Document" 调试分析 6
\o "Current Document" 核心源程序清单和执行结果6
1.需求分析
1.1程序的功能
本程序是一个计算器小程序,利用算符优先关系,实现对 算术四则混合运算表达式的求值并输出结果。
1.2输入输出的要求
输入的形式:算术表达式,以井号“#”结束。例如2*(3+4)# ;
包含的运算符只能有'+' 、'-'、'*'、7'
'('、')';
输出的形式:运算结果,例如Answer is:14 ;
1.3测试数据
第一组:输入 3*(9-4)#输出 Answer is:15
Anusep is 15
Press any key to continue
第二组: 输入 140/(57+13)# 输出 Answer is:2
Inwsel* is 2anv kw号 to continuef
Inwsel* is 2
anv kw号 to continue
s
■
第三组: 输入 56*(12-10)#输出 Answer is:112
Anuser Is 112
Press any Jwy to cantinue
2.概要设计
Y
N
c是否为操作符
比较SIGNgettop和c的优先级
将c压入到
SIGN 栈
用 c=getchar()
读字符
弹出 SIGNgettop 和c
用 c=getchar()
读字符c
弹出DATE 栈顶元素a
* -
弹出栈顶元 素吧b
* -
弹出 SIGN
栈顶元素d
运算a d b
*
将a d b压入
DATE 栈
* 一
详细设计
主要部分详细流程:
(1)设置两个工作栈,分别存放操作数和运算结果
LypWtfF struct"定义一J卜栈存敢运算数时
<
int
int top:
OP HD;
struct 严定义栈存玻运算符吋
<
ch?r a[MAK]; int tnp;
>
OPTR;
(2)判断字符的优先级
char Precedefchar s,char c)"列断字符的优先;級材
<
suiitch(s)
<
case '*■;
ca^e '-■:
iF(c==*+*I|C==*-■)
return 'J';
else if (€== '*■ I |C==V )
return ;
Else if (i:==T (*)
return '< *;
else if(c--*)*)
return 1>';
else
return ■j1;
>
bredk;
case 1 *':
case :
lf(c== +* | |-*)
return 1>';
else if (c=-b*'||c retdfn 1>':
els? If(c-=1(*) return * <1;
elsp 屮"=丁) return '>-:
els?
return b> F;
>
break:
匚dse j _
< if(c=Tl return
els? return
> br&^k;
CJ5P ?八
{ return )";
>
brtdk;
?K
lf(c—"#") return H =*;
else
return '
br^dki
调试分析
错误提示1:
error C2 01?: unknown ctiaracter ' Oxa3
:error C2Q18: unknown character 1Oxbb1
:error: syntax ^rror : missing b;* l
错误原因:在中文输入法下输入的“;”导致程序不能识别
调试方法:调到英文输入法下输入即可
错误提示2:
earning C4O2Jt: Init OPMD : different typ^s for Fornal and actual parameter 1 er?*or C211&: * Function' : incompatible types
错误原因:
在lnit_OPND,Init