c语言数据结构 c语言描述表达式求值问题...

当前位置: >
> C语言数据结构表达式求值问题用顺序栈实现算术表达式的求值。将表达式堪称字符串序列,输入语法正确,不
C语言数据结构表达式求值问题用顺序栈实现算术表达式的求值。将表达式堪称字符串序列,输入语法正确,不
haoxiaoyan & at
C语言数据结构表达式求值问题用顺序栈实现算术表达式的求值。将表达式堪称字符串序列,输入语法正确,不含有变量的整数表达式(数字仅限个位),利用算符的优先级关系,把中缀表达式转换为后缀表达式输出,然后求出该后缀表达式的值,如输入的表达式为2*(6-4)+8/4,转换后后缀表达式为264-*84/+程序的基本思路我已经写出了,但是有点问题,而且没有将后缀表达式输出,希望大神们帮忙下~#include&stdio.h&#include&stdlib.h&#include&math.h&#define MAXSIZE 100//定义栈的大小typedef char ElemTtypedef struct& { ElemType data[MAXSIZE];//栈的元素 //栈顶指针,指向栈顶元素}SeqSSeqStack SeqStackInit()//初始化栈{ SeqS s.top=-1; }SeqStack Push(SeqStack s,ElemType x)//入栈操作{ if(s.top==MAXSIZE-1) {
printf(&对不起,栈已经满了&);
exit(0); } s.top++; s.data[s.top]=x; }char Pop(SeqStack s)//弹栈操作{ ElemT if(s.top==-1) {
printf(&对不起,栈已经空了&);exit(0); } x=s.data[s.top]; s.top--; }ElemType SeqStackGetTop(SeqStack s)//取栈顶元素{ if(s.top!=-1)
return (s.data[s.top]);}char Precede(char a1 ,char a2)//判定运算符的优先级函数。{
& &switch(a2) &{ & case'+':
& case'-'://加减运算优先级相同 &
if(a1=='('||a1=='\n') &
r='$>$; & & case'*':
& case'/': //乘除运算优先级相同 &
if(a1=='*'||a1=='/'||a1==')') &
r='$<$; & & case'(': &
if(a1==')') &
printf(&括号匹配错误!&); &
exit(-1); &
r='$<$; & & case')': &
if(a1=='(') &
else if(a1=='\n') &
printf(&error!没有左括号&); &
exit (-1); &
r='$>$; & & case'\n': &
switch(a1) &
case'\n':&
r='='; & &
case'(': &
printf(&error!没有右括号&); &
exit(-1); &
default: &
} & &} &}char operate(char a,char theta,char b){switch(theta){&
case '+': return (a-'0')+(b-'0');&
case '-': return
case '*': return (a-'0')*(b-'0')+'0';&
case '/': return (a-'0')/(b-'0')+'0'; &
default : return '0';& }}char CalculExp(){ char ch[30],theta,a,b; int i=0,j; SeqStack optr, optr=SeqStackInit();//初始化运算符栈 opnd=SeqStackInit();//初始化操作数栈 optr=Push(optr,'#');//将'#'置运算符栈底,级别最低 scanf(&%s&,&ch);//输入表达式,以#结束 for(j=0;j&30;j++) while(!((ch[i]=='#')&&(SeqStackGetTop(optr)=='#')))//当输入不为#与运算符栈顶元素不为#时
if(ch[i]&='0'&&ch[i]&='9')//对数字进行压操作数栈
opnd=Push(opnd,ch[i]);
else switch(Precede(SeqStackGetTop(optr),ch[i]))//否则对运算符栈进行操作
case '$<$:optr=Push(optr,ch[i]);
case '=':Pop(optr);
case '$>$:theta=Pop(optr);
b=Pop(opnd);a=Pop(opnd);
opnd=Push(opnd,operate(a,theta,b));
return(SeqStackGetTop(opnd));}void main(){
q=CalculExp(); printf(&所求的表达值的是\n&,q-'0');}
单步调试下看看什么问题,这么长代码,都不知道你要我输入什么,我按照你要求输入2*(6-4)+8/4一下子就给我退出来了。说栈满了。我给你提醒下吧。scanf(&%s&,&ch);//输入表达式,以#结束应该改为scanf(&%s&,ch);haoxiubo & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-求表达式求值的C语言代码_百度知道
求表达式求值的C语言代码
要求如下:(1)对输入的表达式字符串迚行语法检查、不可除零的检查(2)支持加、减、乘、除及求模运算(3)支持任意层次的括号嵌套(4)支持浮点数运算、如果表达式中出现浮点数则应判定为浮点数运算模式,否则为整数运算模式(5)支持负数(6)可输出表达式的计算过程(7)可输出表达式的最终计算结果各位大侠 勿喷啊,课程设计的要求。。。要求是多了点。。。
我的邮箱是
我有更好的答案
这个好像要用栈吧
在严蔚敏数据结构书中有关于表达式求值的算法,可以参考下~
数据结构当中好想学过但是忘了
其他类似问题
c语言的相关知识
等待您来回答
您可能关注的推广
下载知道APP
随时随地咨询
出门在外也不愁数据结构c语言程序,表达式求值。请发送至邮箱_百度知道
数据结构c语言程序,表达式求值。请发送至邮箱
①从文件或键盘读入中缀表达式。 ②设计操作数为多位整数,操作符为加、减、乘、除、求模的中缀表达式求值算法。 ③设计将中缀表达式转换为后缀表达式的算法。 ④设计将中缀表达式转换为前缀表达式的算法。 ⑤设计后缀表达式求值算法。 ⑥设计前缀表达式求值算法。 ⑦输出各种形式的表达式。 ⑧扩充运算符集,如增加乘方、单目减、指数等。 2)较高要求 ①设计操作数为实数的运算。 ②运算量可以为变量。 ③表达式合法性校验。 ④计算器功能的仿真界面。(3)设计要点提示 1)算术表达式的计算往往是通过使用栈来实现的。 2)读入或扫描表达式的同时,完成运算符和操作数的识别处理。 3)识别操作数时,注意将其字符序列转换成整数(如:’15’-&15)或实数(如:’15.4’-&15.4)形式进行存储。 4)可以将表达式转换为一颗二叉树,通过先序、中序、后序遍历得到前缀、中缀、后缀表达式。
提问者采纳
其他类似问题
c语言程序的相关知识
其他2条回答
:即将进行运算的字符串型数学表达式。如3.5+(2*3/5) 返回参数: s[0]:计算结果将放入s[0]中功能: 将输入的字符串中的数字分别调用convnum(char *
搜一些教学视频吧~
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁利用栈实现表达式求值,可供小学生作业并能给出分数(数据结构(c语言))跪求_百度知道
利用栈实现表达式求值,可供小学生作业并能给出分数(数据结构(c语言))跪求
我有更好的答案
按默认排序
联系您学习一下表达式树。栈我知道可以计算括号匹配的,可能是这样做。希望可以给你提供思路吧,
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 数据结构 c语言描述 的文章

 

随机推荐