《程序设计方法学》实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《程序设计方法学》实验报告

X X X X X大学《程序设计方法学》实验报告实验一:算术表达式求值学院:X X X 专业:计算机科学与技术姓名:X X X 学号:XXXXX 2010年11 月18 日目录1.前言................................................................. . (1)

2.概要设计................................................................. . (1)

数据结构设计................................................................. ..................................................................... .................................. 1 算法设计............................................................... ..................................................................... .......................................... 1 ADT描

述............................................................... ..................................................................... ......................................... 2 功能模块分析............................................................... ..................................................................... ................................. 3 3.详细设计................................................................. . (3)

数据存储结构设计................................................................. ..................................................................... ......................... 3 主要算法流程图................................................................. . (4)

4.测试结果................................................................. . (7)

5.

int stacksize; } Stack2; 主要算法流程图 1. Precede(char a1,char a2) 判断运算符优先权,返回优

先权高的。算符间的优先关系如下:+ - * / ( ) # + > > > > > > > char Precede(char a1,char a2) { static char array[49]={ ‘>‘, ‘>‘, ‘‘, ‘>‘, ‘>‘, ‘>‘, ‘‘, ‘>‘, ‘>‘, ‘>‘, ‘>‘, ‘>‘, ‘‘, ‘>‘, ‘>‘, ‘>‘, ‘>‘, ‘>‘, ‘‘, ‘>‘, ‘’>‘, ‘>‘, ‘>‘, ‘>‘, ‘!’, ‘>‘, ‘>‘, ’/* i 为下面array的横标*/ case ‘+’ : i=0;break; case ‘-’ : i=1;break; case ‘*’ : i=2;break; case ‘/’ : i=3;break; case ‘(‘ : i=4;break; case ‘)’ : i=5;break; case ‘#’ : i=6;break; } switch(a2) { /* j为下面array的纵标*/ case ‘+’ : j=0;break; case ‘-’ : j=1;break; / > > > > = > # > > > > > = case ‘*’ : j=2;break; case ‘/’ : j=3;break; case ‘(‘ : j=4;break; case ‘)’ : j=5;break; case ‘#’ : j=6;break; } return (array[7*i+j]); /* 返回运算符array[7*i+j]为对应的c1,c2优先关系*/ } 2. SElemType EvaluateExpression()主要操作函数。算法概要流程图:利

用该算法对算术表达式3*(7-2)求值操作过程如下:步骤 1 2 3 4 5 6 7 8 9 10 OPTR栈# # #* #*( #*( #*(- #*(- #*( #* # OPND栈 3 3 3 3 7 3 7 3 7 2 3 5 3 5 15 表 2 算法伪代码如下:SElemType EvaluateExpression()//主要操作函数输入字符3*(7-2)# *(7-2)# (7-2)# 7-2)# -2)# 2)# )# )# # # 主要操作Push(OPND,’3’) Push(OPTR,’*’) Push(OPNR,’(’) Push(OPND,’7’) Push(OPNR,’-’) Push(OPND,’2’) Operate(‘7’,’-’,’2’) Pop(OPTR) Operate(‘3’,’*’,5’) Return(GetTop2(OPND)) { //算符表达式的优先算法。设OPTR和OPND分别为运算符栈和运算数栈SqStack OPTR,OPND; char c; char Data[11];//定义此数组为了存放整数或小数SElemType a,b,d,e; InitStack(OPTR);//构造一个运算符栈InitStack(OPND);//构造一个运算数栈Push(OPTR,’#’);//将#压入栈底

相关文档
最新文档