网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 设计资源 > 单片机 > 正文
课程设计
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: Admin 发布时间: 09/07/22
p;putc(' ',Temp);    
     putc(Top(OpHolder),Temp);
     Pop(OpHolder);
    }
    Push(holder,OpHolder);
   }
/******
如果当前运算符号的优先级小于或者等于堆栈中的运算符号的优先级,则将其放入temp中,并且将堆栈中的运算符号出栈,放入temp中,直到堆栈为空或者优先级小于堆栈顶元素的优先级
******/
   else if(OperatorValue(Top(OpHolder)) >= OperatorValue(holder)){   
    while((IsEmpty(OpHolder) != 1)
      && (OperatorValue(Top(OpHolder)) >= OperatorValue(holder))
      && (OperatorValue(Top(OpHolder))!=6))
    {
     putc(' ',Temp); 
     putc(Top(OpHolder),Temp);
     Push('B',Whereat);
     Pop(OpHolder);
    }
    Push(holder,OpHolder);
   }
   else if(OperatorValue(Top(OpHolder)) < OperatorValue(holder)){  
/******
如果当前运算符号的优先级大于堆栈中的运算符号的优先级,则将其压入堆栈中
******/
    Push(holder,OpHolder);
   }
  }
  holder=getc(In); 
 }                                  /* While循环结束*/

 while(IsEmpty(OpHolder)!=1){
/******
最后如果堆栈中还有运算符号,则一并放到temp中
******/
  Push('B',Whereat);
  putc(' ',Temp);  
  putc(Top(OpHolder),Temp);
  Pop(OpHolder);
 }
 MakeEmpty(OpHolder);
 free(OpHolder);
}

/******判断类型,1为运算符号,0为操作数,-1为错误******/
int IsOperator(char ToCompare)
{
 if (ToCompare == '(' || ToCompare == ')'|| ToCompare == '+' || ToCompare == '-'
  || ToCompare == '*'|| ToCompare == '/' || ToCompare == '^'|| ToCompare == '%')
 {
  return 1;
 }
 else if (ToCompare == '1' || ToCompare == '2'|| ToCompare == '3'
   || ToCompare == '4' || ToCompare == '5'|| ToCompare == '6'
   || ToCompare == '7'|| ToCompare == '8' || ToCompare == '9'
   || ToCompare == '0'|| ToCompare == '.')
  {
     return 0;
      }
 else{
  return -1;
 }
}

/******返回运算符号的优先级******/
int OperatorValue(char ValueToGive)
{
 if (ValueToGive == '(')
  return 6;
 if (ValueToGive == ')')
  return 5;
 if (ValueToGive == '^') 
  return 3;
    if (ValueToGive == '%') 
  return 2;
 if (ValueToGive == '*')
  return 2;
 if (ValueToGive == '/')
  return 2;
 if (ValueToGive == '+')
  return 1;
 if (ValueToGive == '-')
  return 1;
 return 0;
}

/******计算后缀表达式******/
void Calculate(FILE *Change, Stack Whereat, FILE *Temp)
{
 FStack Operands;
 float looker;
 char Op;
 char spacefinder;
 float answer = 0;
 float NumA;
 float NumB;
 Operands = (Ptr_Fn)malloc(sizeof(struct FNode));
 Operands->Next= NULL;
 
 while ((IsEmpty(Whereat) != 1) && PrintError != 1)
 {                                     /*循环直到Whereat空,或者遇到错误*/
  if (Top(Whereat) == 'A'){
   fscanf(Temp," ",&spacefinder);

  • 上一篇资讯: ep51编程器
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 电话:013574892963 QQ:3710167 邮箱:Educs@163.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 Www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号