C语言!1.要求:完成标准中缀算术表达式求值运算.2.中缀表达式由键盘输入,以回车键结束.如:3*((4+6)-(5-2)^3)3.输入的中缀表达式符合以下要求:(1) 中缀表达式长度不确定.(2) 中缀表

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 06:37:56
C语言!1.要求:完成标准中缀算术表达式求值运算.2.中缀表达式由键盘输入,以回车键结束.如:3*((4+6)-(5-2)^3)3.输入的中缀表达式符合以下要求:(1) 中缀表达式长度不确定.(2) 中缀表

C语言!1.要求:完成标准中缀算术表达式求值运算.2.中缀表达式由键盘输入,以回车键结束.如:3*((4+6)-(5-2)^3)3.输入的中缀表达式符合以下要求:(1) 中缀表达式长度不确定.(2) 中缀表
C语言!
1.要求:完成标准中缀算术表达式求值运算.
2.中缀表达式由键盘输入,以回车键结束.如:3*((4+6)-(5-2)^3)
3.输入的中缀表达式符合以下要求:
(1) 中缀表达式长度不确定.
(2) 中缀表达式仅出现在一行输入行中.
(3) 中缀表达式中只包含5种2目运算符:+,-,*,/ ,^及两种优先级运算符“(”和“)”.
“^” 为指数运算,如:4^2=16.
(4) 中缀表达式中的运算数由{0,1,…,8,9}中的单个数字组成.
(5) 中缀表达式中不包含多余的空格.
(6) 中缀表达式在逻辑上和结构上如出现错误,程序应能提示错误.
4.你的程序应输出最终运算结果.
5.为确保你的程序的正确性,完备性,健壮性,请提交前自行设计相应的测试实例进行充分的测试检查.

C语言!1.要求:完成标准中缀算术表达式求值运算.2.中缀表达式由键盘输入,以回车键结束.如:3*((4+6)-(5-2)^3)3.输入的中缀表达式符合以下要求:(1) 中缀表达式长度不确定.(2) 中缀表
#include
#include
#include
#include
char str[100];
int p;
typedef struct node
{
char sym;
struct node *lchild,*rchild;
}BTNode;
BTNode *lastNode;
void Initial()
{
scanf("%s",str);
char str2[100];
int len = strlen(str),i;
for(i = 0;i < len;i++)
{
if(str[len-i-1] == ')')
str2[i] = '(';
else if(str[len-i-1] == '(')
str2[i] = ')';
else
str2[i] = str[len-i-1];
}
str2[i] = '\0';
strcpy(str,str2);
p = 0;
}
void Advance()
{
p++;
}
char SYM()
{
return str[p];
}
bool SYMIsDigital()
{
return SYM() = '0';
}
void A();
void B();
void C();
void D();
void A_();
void B_();
void C_();
void A()
{
if(SYM() == '('||SYMIsDigital())
{
B();
A_();
}
else
exit(0);
}
void A_()
{
BTNode *p,*q;
if(SYM() == '+')
{
p = lastNode;
Advance();
B();
A_();
q = lastNode;
lastNode = (BTNode *)malloc(sizeof(BTNode));
lastNode->sym = '+';
lastNode->lchild = p;
lastNode->rchild = q;
}
else if(SYM() == '-')
{
p = lastNode;
Advance();
B();
A_();
q = lastNode;
lastNode = (BTNode *)malloc(sizeof(BTNode));
lastNode->sym = '-';
lastNode->lchild = p;
lastNode->rchild = q;
}
else if(SYM() == ')'||SYM() == '\0')
{
}
else
exit(0);
}
void B()
{
if(SYM() == '('||SYMIsDigital())
{
C();
B_();
}
else
exit(0);
}
void B_()
{
BTNode *p,*q;
if(SYM() == '*')
{
p = lastNode;
Advance();
C();
B_();
q = lastNode;
lastNode = (BTNode *)malloc(sizeof(BTNode));
lastNode->sym = '*';
lastNode->lchild = p;
lastNode->rchild = q;
}
else if(SYM() == '/')
{
p = lastNode;
Advance();
C();
B_();
q = lastNode;
lastNode = (BTNode *)malloc(sizeof(BTNode));
lastNode->sym = '/';
lastNode->lchild = p;
lastNode->rchild = q;
}
else if(SYM() == ')'||SYM() == '\0'||SYM() == '+'||SYM() == '-')
{
}
else
exit(0);
}
void C()
{
if(SYM() == '('||SYMIsDigital())
{
D();
C_();
}
else
exit(0);
}
void C_()
{
BTNode *p,*q;
if(SYM() == '^')
{
p = lastNode;
Advance();
D();
C_();
q = lastNode;
lastNode = (BTNode *)malloc(sizeof(BTNode));
lastNode->sym = '^';
lastNode->lchild = p;
lastNode->rchild = q;
}
else if(SYM() == ')'||SYM() == '\0'||SYM() == '+'||SYM() == '-'||SYM() == '*'||SYM() == '/')
{
}
else
exit(0);
}
void D()
{
if(SYMIsDigital())
{
lastNode = (BTNode *)malloc(sizeof(BTNode));
lastNode->sym = SYM();
lastNode->lchild = lastNode->rchild = NULL;
Advance();
}
else if(SYM() == '(')
{
Advance();
A();
if(SYM() == ')')
Advance();
else
exit(0);
}
else
exit(0);
}
double Calculate(BTNode *T)
{
double a,b;
if(T)
{
b = Calculate(T->lchild);
a = Calculate(T->rchild);
if(T->sym sym >= '0')
return (double)(T->sym-'0');
else if(T->sym == '+')
return a+b;
else if(T->sym == '-')
return a-b;
else if(T->sym == '*')
return a*b;
else if(T->sym == '/')
return a/b;
else if(T->sym == '^')
return pow(a,b);
}
}
int main()
{
Initial();
A();
printf("%f\n",Calculate(lastNode));
system("pause");
}
//vs2010下编译通过,使用的是递归下降分析法LL(1)(比较方便实现),在实现过程中翻转了字符串
//如果输入格式不符合直接退出程序(只支持1位的数字)

C语言!1.要求:完成标准中缀算术表达式求值运算.2.中缀表达式由键盘输入,以回车键结束.如:3*((4+6)-(5-2)^3)3.输入的中缀表达式符合以下要求:(1) 中缀表达式长度不确定.(2) 中缀表 表达式求值中缀表达式转换为后缀表达式,并求值,(C语言) 中缀形式的算术表达式A+(B-C/D)*E的后缀形式是什么?手工运算怎么算啊? 中缀表达式A*B*C,后缀表达式是多少.初学者, 求《数据结构》课程设计(题目:算术表达式求值)系统应具备的功能:(1)设计算术表达式的存储结构(2)实现前缀表达式、中缀表达式和后缀表达式的求值 (3)输出求值结果希望 C语言表达式的计算练习掌握算术表达式、逗号表达式、赋值表达式的计算练习 已知一算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为 数据结构中的树与二叉树已知一算术表达式的中缀形式A+B*C-D/E,后缀ABC*+DE/-,前缀形式为什么 C语言 表达式1 算术表达式求值 C语言算术表达式求值(1)用户可通过键盘输入四则运算的表达式(2)判断表达式是否正确(3)对正确的表达式,计算该表达式的值 2001 USACO 绿组 奶牛表达式 (要求用PASCAL语言编写)在数学中同一个表达式常有几种写法,其中中缀表式是最常见的,如1+2和7*(5-3).而在前缀表达式中,运算符式写操作数之前的,如上述的表达式的 用c++编程实现计算器程序,完成实数的加、减、乘、除运算.注意运算符优先级别.表达式要求采用中缀形式. 试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.功能要求及说明:(1) 任意输入一个算术表达式;(2) 利用栈,判断表达式中出现的 求一程序:用C语言编写,要求如下:实验内容:(1) 判断一个算术表达式中开括号和闭括号是否配对.(2) 假设算术表达式仅由加减乘除运算符组成,编写一个函数对用后缀表达式表示的算 算术表达式能实现前缀后缀和中缀的表达是求值设计表达式的存储结构能求出结果 C语言数据结构(写出下列中缀表达式的后缀表达式)(1) -A+B-C+D A-B+C-D+(2) A*-B+C AB-*C+答案我是知道的,但我不知道是怎得来的,请懂的给我说说! C语言:数据结构(写出下边这个中缀表达式的后缀表达式)A*-B+C AB-*C+这个答案是怎么得出来的,谁能给我通俗的说一下过程! 表达式a*(b+C)-d的后缀表达式什么?什么叫中缀和后缀?