用两种方式实现表达式自动计算Word文件下载.docx

上传人:b****3 文档编号:14658507 上传时间:2022-10-23 格式:DOCX 页数:20 大小:184.10KB
下载 相关 举报
用两种方式实现表达式自动计算Word文件下载.docx_第1页
第1页 / 共20页
用两种方式实现表达式自动计算Word文件下载.docx_第2页
第2页 / 共20页
用两种方式实现表达式自动计算Word文件下载.docx_第3页
第3页 / 共20页
用两种方式实现表达式自动计算Word文件下载.docx_第4页
第4页 / 共20页
用两种方式实现表达式自动计算Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

用两种方式实现表达式自动计算Word文件下载.docx

《用两种方式实现表达式自动计算Word文件下载.docx》由会员分享,可在线阅读,更多相关《用两种方式实现表达式自动计算Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

用两种方式实现表达式自动计算Word文件下载.docx

第二种算法:

先中缀表达式转化为后缀表达式,然后在计算后缀表达式,其流程图为:

图2中缀转后缀算法流程图

图3后缀表达式计算算法流程图

三、源代码

下面给出的是用直接计算算法实现的程序的源代码:

/*Note:

YourchoiceisCIDE*/

/*表达式直接运算*/

#include"

stdio.h"

stdlib.h"

#defineMaxsize100

/////////////////////////////////////////////////////

////定义操作符栈

typedefstruct{/////定义操作符栈

chardata[Maxsize];

inttop;

}Stack;

voidInitStack(Stack*S)/////用于初始化栈

{

S->

top=-1;

}

intpush(Stack*S,charop)//将一个新元素压入栈中

if(S->

top==Maxsize-1)///判断栈是否为空,并进行处理

{

printf("

\nstackisfull"

);

return0;

/////如果栈满则返回0值

}

S->

top++;

data[S->

top]=op;

////把元素压入栈顶

return1;

charpop(Stack*S)/////定义出栈函数

if(S->

top==-1)/////判断栈是否为空

{

printf("

thestackisempty"

return0;

}

returnS->

top--];

/////返回栈顶元素

////////////定义数值栈

typedefstruct{////定义数值栈

doubledata1[Maxsize];

}ODStack;

voidInitStack1(ODStack*S)//////初始化栈

intpush1(ODStack*S,doubleOpNd)//将一个新元素压入栈中

data1[S->

top]=OpNd;

/////把元素压入栈顶

doublepop1(ODStack*S)///////出栈函数

top==-1)//////判断栈是否为空

}

}

/////////定义优先级

intlevel(charoper)

{intlvl;

/////定义记录优先级的变量

switch(oper)

case'

+'

:

lvl=1;

break;

-'

lvl=1;

////定义‘-’‘+’的优先级

*'

lvl=2;

/'

////定义‘*’‘、’的优先级

%'

////定义‘%’的优先级

('

lvl=6;

)'

lvl=0;

////定义‘(’‘)’的优先级

returnlvl;

//////返回操作符的优先级

intprecede(charoper1,charoper2)////进行优先级比较

intresult;

result=level(oper1)-level(oper2);

returnresult;

////返回优先级比较结果

voidmain()

{

doublecalculate(charch[]);

charexpression[Maxsize];

/////声明要使用的函数

Attention!

!

thesideof'

mustbeintgralnumber\n"

pleaseinputtheexpression:

"

gets(expression);

////输入所要计算的算式

thevalueaftercalculatingtheexpressionis:

%.4f\n"

calculate(expression));

//////输出计算结果

////////////////////////////////////////////////////

////////////定义计算表达式

doublecalculate(charch[])

{doublecal(doubletem1,doubletem2,charc);

//////////声明cal()函数

inti=0,k=0;

chartransform[Maxsize],*s_t;

////声明存放数值的字符数组

chartem;

doubled1,d2,od1,od2,result;

StackOptr;

//////声明数值栈

ODStackOpnd;

//////声明操作符栈

InitStack(&

Optr);

///////初始化操作符栈

InitStack1(&

Opnd);

/////初始化数值栈

while(ch[i]!

='

\0'

)/////扫描后缀表达式

if(ch[i]=='

'

)////跳过空格

i++;

if(ch[i]>

0'

&

ch[i]<

9'

||ch[i]=='

.'

)///判断是不是数值

while(ch[i]>

)//将字符转化为浮点型

transform[k]=ch[i];

/////将数值字串的每一个字符赋给trans数组

k++;

transform[k]='

;

///以‘\0’结尾存放数值串

k=0;

s_t=transform;

d1=atof(s_t);

////利用atof()函数将转为浮点型

push1(&

Opnd,d1);

//printf("

thetopofthestackis:

%f\n"

Opnd.data1[Opnd.top]);

else/////对操作符进行操作

{

if(Optr.top==-1)///判断站的状态,空则直接压入

{

push(&

Optr,ch[i]);

/////入栈

}

else

{

if(ch[i]=='

)///判断是不是'

对括号内的表达式进行运算

{

while(Optr.data[Optr.top]!

)////以‘)’为条件处理括号内的操作符

{

tem=pop(&

/////栈顶元素出栈

od2=pop1(&

////将符号右元素出栈

od1=pop1(&

////将符号左元素出栈

d2=cal(od1,od2,tem);

/////调用计算函数

push1(&

Opnd,d2);

////将所得结果压入数值栈

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

当前位置:首页 > PPT模板 > 可爱清新

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

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