把中缀表达式转换为后缀表达式的算法我需要用html和javascript实现一个科学计算器的全部功能包括三角函数等常用函数,现在需要有把中缀表达式转换为后缀表达式的方法,希望有具体的解释,
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 06:43:31
![把中缀表达式转换为后缀表达式的算法我需要用html和javascript实现一个科学计算器的全部功能包括三角函数等常用函数,现在需要有把中缀表达式转换为后缀表达式的方法,希望有具体的解释,](/uploads/image/z/310646-38-6.jpg?t=%E6%8A%8A%E4%B8%AD%E7%BC%80%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%90%8E%E7%BC%80%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E7%AE%97%E6%B3%95%E6%88%91%E9%9C%80%E8%A6%81%E7%94%A8html%E5%92%8Cjavascript%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E7%A7%91%E5%AD%A6%E8%AE%A1%E7%AE%97%E5%99%A8%E7%9A%84%E5%85%A8%E9%83%A8%E5%8A%9F%E8%83%BD%E5%8C%85%E6%8B%AC%E4%B8%89%E8%A7%92%E5%87%BD%E6%95%B0%E7%AD%89%E5%B8%B8%E7%94%A8%E5%87%BD%E6%95%B0%2C%E7%8E%B0%E5%9C%A8%E9%9C%80%E8%A6%81%E6%9C%89%E6%8A%8A%E4%B8%AD%E7%BC%80%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%90%8E%E7%BC%80%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E6%96%B9%E6%B3%95%2C%E5%B8%8C%E6%9C%9B%E6%9C%89%E5%85%B7%E4%BD%93%E7%9A%84%E8%A7%A3%E9%87%8A%2C)
把中缀表达式转换为后缀表达式的算法我需要用html和javascript实现一个科学计算器的全部功能包括三角函数等常用函数,现在需要有把中缀表达式转换为后缀表达式的方法,希望有具体的解释,
把中缀表达式转换为后缀表达式的算法
我需要用html和javascript实现一个科学计算器的全部功能包括三角函数等常用函数,现在需要有把中缀表达式转换为后缀表达式的方法,希望有具体的解释,或者能提供教程也行.最好把计算机识别后缀表达式的原理解释一下,分数不多,不成敬意.
把中缀表达式转换为后缀表达式的算法我需要用html和javascript实现一个科学计算器的全部功能包括三角函数等常用函数,现在需要有把中缀表达式转换为后缀表达式的方法,希望有具体的解释,
include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MaxStackSize 100
#define M 100
typedef char DataType;
#include "SeqStack.h"
#include "implement.c"
/////////////////////////////计算表达式/////////////////////////////////
void EvaluateExpression(char *exp)
{
char c;
char theta;
char tmpc,a,b,y;
//char x,ch;
SeqStack OPTR; //运算符栈
SeqStack OPND; //操作数栈
//int s1,s2;
StackInitiate(&OPTR);
StackPush(&OPTR,'#');
StackInitiate(&OPND);
c=*exp++;
//printf("当前读取的字符为%c\n",c);
StackTop(OPTR,&tmpc);
//printf("当前运算符栈顶字符为%c\n",tmpc);
//printf("%c",tmpc);
while (c!='#'||tmpc!='#')
{
printf("进入循环,当前读取表达式的字符为%c\n",c);
if(!IsOperator(c)) //如果获取的字符不是运算符则入操作数栈
{
printf("发现操作数\n");
StackPush(&OPND,c);
c=*exp++;
//x=getchar();
}
else
{
printf("发现运算符\n");
//StackTop(OPTR,&tmpc); //获取当前运算符栈顶字符
//printf("当前的运算符是:%c\n",tmpc);
//ch=Precede(tmpc,c);
//printf("运算符是:%c\n",ch);
switch(Precede(tmpc,c))
{
case '': //退栈并计算
//printf("栈顶元素优先级高:出栈\n");
StackPop(&OPTR,&theta);
//printf("当前进行的运算是:");
//printf("%c\n",theta);
StackPop(&OPND,&b); StackPop(&OPND,&a);
StackPush(&OPND, Operate(a,theta,b));
StackTop(OPTR,&theta); //获取一个运算符出栈之后的当前运算符栈顶,继续和此时读取的运算符比较
while(Precede(theta,c)=='>')
{
StackPop(&OPND,&b); StackPop(&OPND,&a);
StackPush(&OPND, Operate(a,theta,b));
StackPop(&OPTR,&theta); //将当前的栈顶弹出(刚刚比较过的运算符)
StackTop(OPTR,&theta); //获取当前新的栈顶
}
if(Precede(theta,c)=='=') //右括号始终不进栈,在此去除左括号.
{
StackPop(&OPTR,&theta); //将当前的栈顶弹出(刚刚比较过的运算符)
//StackTop(OPTR,&theta); //获取当前新的栈顶
}
if(c!='#'&&c!=')') //将所有栈内优先级高的运算完成(出栈)之后,将当前的运算符入栈
StackPush(&OPTR,c);
//StackTop(OPND,&y);
//printf("当前操作数栈顶为%c\n",y);
//c=*exp++;
break;
}//switch
if(!StackEmpty(OPTR))
StackTop(OPTR,&tmpc);
//if(tmpc=='#') break;
//x=getchar();
if(c!='#')
c=*exp++; //c指向下一个字符
}
//printf("in while");
//printf("当前的theta:%c\n",theta);
//printf("当前的c:%c\n",c);
//printf("当前的tmpc:%c\n",tmpc);
}//while
StackTop(OPND,&y);
printf("表达式的运算结果为%c\n",y);
}
void main(void)
{
char str[M];
printf("请输入中缀表达式(注意所有运算结果都应该保证在10以内,以免出错.):\n");
gets(str);
EvaluateExpression(str);
}