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

上传人:b****1 文档编号:1628524 上传时间:2022-10-23 格式:DOCX 页数:3 大小:17.03KB
下载 相关 举报
《程序设计方法学》实验报告.docx_第1页
第1页 / 共3页
《程序设计方法学》实验报告.docx_第2页
第2页 / 共3页
《程序设计方法学》实验报告.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《《程序设计方法学》实验报告.docx》由会员分享,可在线阅读,更多相关《《程序设计方法学》实验报告.docx(3页珍藏版)》请在冰豆网上搜索。

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

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

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

        XXXXX大学  《程序设计方法学》实验报告    实验一:

算术表达式求值      学院:

XXX  专业:

计算机科学与技术姓名:

XXX学号:

XXXXX        2010年11月18日  目录    1.前  言.................................................................................................................................12.概要设计.................................................................................................................................1  数据结构设计........................................................................................................................................................................1算法设计..............................................................................................................................................................................1ADT描述.............................................................................................................................................................................2功能模块分析.....................................................................................................................................................................3  3.详细设计.................................................................................................................................3  数据存储结构设计...............................................................................................................................................................3主要算法流程图.................................................................................................................................4  4.测试结果.................................................................................................................................75.

      intstacksize;}Stack2;  主要算法流程图  1.Precede(chara1,chara2)判断运算符优先权,返回优先权高的。

算符间的优先关系如下:

  +-*/()#+>>>>>>>  charPrecede(chara1,chara2){  staticchararray[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.SElemTypeEvaluateExpression()主要操作函数。

算法概要流程图:

    利用该算法对算术表达式3*(7-2)求值操作过程如下:

步骤12345678910OPTR栈###*#*(#*(#*(-#*(-#*(#*#OPND栈3333737372353515表2  算法伪代码如下:

  SElemTypeEvaluateExpression()//主要操作函数      输入字符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分别为运算符栈和运算数栈SqStackOPTR,OPND;charc;  charData[11];//定义此数组为了存放整数或小数SElemTypea,b,d,e;  InitStack(OPTR);//构造一个运算符栈InitStack(OPND);//构造一个运算数栈Push(OPTR,’#’);//将#压入栈底c=getchar();GetTop(OPTR,e);  while(c!

=‘#’||e!

=‘#’)//栈顶不是#号且输入不是#号{  if(In(c))//是符号则进栈{  switch(Precede(e,c))  {  case’  case’=‘:

  //脱括号并接受下一字符  Pop(OPTR,e);  c=getchar();  break;  case’>‘:

  //退栈并将运算结果入栈  Pop(OPTR,e);  Pop(OPND,b);  Pop(OPND,a);  Push(OPND,Operate(a,e,b));  break;  }//switch}  elseif(c>=‘0’&&c  while(c>=‘0’&&c      {  Data[i]=c;  i++;  c=getchar();  }  Data[i]=‘\\0’;//数字没有存满,输入字符串结束符  d=atof(Data);//此处是把数组里的数字,实际上是按字符串;转换为double类型,然后把浮点型数字入栈  Push(OPND,d);//atof函数的形参是指针类型,故用数组名}else{  cout  GetTop(OPTR,e);}//while  GetTop(OPND,e);returne;}  4.测试结果  1.运行成功后界面。

    2.输入正确的表达式后。

      5.

      SElemType*top;intstacksize;}SqStack;  voidInitStack(SqStack&S)//构造一个空栈{  =(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));//分配储存空间if(!

)exit(-1);  //空间分配失败=;  =STACK_INIT_SIZE;  //空间初始分配}//InitStack  boolGetTop(SqStackS,SElemType&e)  {  //若栈不空,则用e返回S的栈顶元素,并返回true;否则返回falseif(==)returnfalse;e=*();returntrue;}//GetTop  boolPush(SqStack&S,SElemTypee){  //插入元素为e的新的栈顶元素if(>=){  //栈满,追加存储空间  =(SElemType*)realloc(,(+STACKINCREMENT)*sizeof(SElemType));  if(!

)    exit(-1);//存储空间分配失败  =+;//此处内存有可能重新分配,地址有可能会变,此句不能省  +=STACKINCREMENT;}  *++=e;//top自增returntrue;      }//Push    boolPop(SqStack&S,SElemType&e)//若栈不空,则删除S的栈顶元素,用e返回其值{  if(==)returnfalse;  e=*--;  //删除一个元素,top减一  ?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

returntrue;}//Pop    /////////////////////////////////////////////////////////////////////////////////////////////////      /*以下为判断符号优先级的函数*/    charPrecede(chara1,chara2)//判定运算符的优先级。

{  //根据课本p53页的表charr;switch(a2){  case’+’:

  //此处于加减几乎优先级一样,故放在一起case’-’:

  if(a1==‘(‘||a1==‘#’)  r=‘      r=‘>‘;  break;  case’*’:

  //此处于乘除优先级一样,故放在一起case’/’:

  if(a1==‘*’||a1==‘/’|

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

当前位置:首页 > 经管营销 > 销售营销

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

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