77范文网 - 专业文章范例文档资料分享平台

(盐城工学院数据结构课程设计)栈的应用表达式求值(5)

来源:网络收集 时间:2019-03-23 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

栈的应用:表达式求值的设计

}

/******返回运算符号的优先级******/ 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空,或者遇到错误*/

19

栈的应用:表达式求值的设计

if (Top(Whereat) == 'A'){ fscanf(Temp,\ fscanf(Temp,\ /*如果是A,则是操作数*/ FPush(looker,Operands); Pop(Whereat); }

else if (Top(Whereat) == 'B'){ fscanf(Temp,\ /*如果是B,则是运算符*/ Op = getc(Temp); switch(Op){ /* 判断是什么运算符*/

case('^'): /*幂运算*/ NumB = FTop(Operands); FPop(Operands); if (FIsEmpty(Operands)){ /*错误处理*/ PrintError = 1; } else{ NumA = FTop(Operands); FPop(Operands);

if ((NumA == 0 && NumB < 0)||((NumA<0) && (NumB - (int)NumB != 0))) { PrintError = 1; } else{ answer = pow(NumA,NumB); FPush(answer,Operands); }

} break;

case '%': /*取模运算*/ NumB = FTop(Operands); FPop(Operands); if (FIsEmpty(Operands)){ /*错误处理*/ PrintError = 1; } else{ NumA = FTop(Operands);

20

栈的应用:表达式求值的设计

FPop(Operands);

if ((NumA - (int)NumA != 0) || (NumB - (int)NumB != 0) || (NumB == 0)) { PrintError = 1; } else{ answer = (int)NumA % (int)NumB; FPush(answer,Operands); }

} break;

case '*': NumB = FTop(Operands); FPop(Operands); if (FIsEmpty(Operands)){ PrintError = 1; } else{ NumA = FTop(Operands); FPop(Operands); answer = NumA * NumB; FPush(answer,Operands); } break;

case '/': NumB = FTop(Operands); FPop(Operands); if (FIsEmpty(Operands)){ PrintError = 1; } else{ NumA = FTop(Operands); FPop(Operands); if (NumB == 0){ PrintError = 1; }

else{

21

/* x mod b*/ /*乘法运算*/ /* x * y*/ /*除法运算*/ /*分母不为0*/

栈的应用:表达式求值的设计

answer = (float)(NumA / NumB); /* x / y*/ FPush(answer,Operands); } } break;

case '+': /*加法运算*/ NumB = FTop(Operands); FPop(Operands); if (FIsEmpty(Operands)){ PrintError = 1; } else{ NumA = FTop(Operands); FPop(Operands); answer = NumA + NumB; FPush(answer,Operands); } break;

case '-': NumB = FTop(Operands); FPop(Operands);

if (FIsEmpty(Operands)){ PrintError = 1; } else{ NumA = FTop(Operands); FPop(Operands);

answer = NumA - NumB;

FPush(answer,Operands);

} break; default: PrintError = 1; break; } Pop(Whereat); }

} 22

/* x + y*/ /*减法运算*/ /* x - y*/

/*判断结束*/ /*循环结束*/

栈的应用:表达式求值的设计

}

if (!PrintError){ answer = FTop(Operands); FPop(Operands); if (FIsEmpty(Operands) != 1){ fprintf(Change,\ /*如果还有操作数*/ PrintError = 0; } else fprintf(Change,\ }

else{ fprintf(Change,\ PrintError = 0; }

FMakeEmpty(Operands); free(Operands);

23

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库(盐城工学院数据结构课程设计)栈的应用表达式求值(5)在线全文阅读。

(盐城工学院数据结构课程设计)栈的应用表达式求值(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/542179.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: