2024年10月eval后缀(加减乘除运算(Java))

 更新时间:2024-10-12

  ⑴eval后缀(加减乘除运算(Java)

  ⑵加减乘除运算(Java)

  ⑶实际上这相当于javascript的eval方法,以下是该方法的java实现://Eval.javaimportjava.util.ArrayList;importjava.util.List;importjava.util.Stack;publilassEval{publicinteval(Stringexp){List《String》list=infixExpToPostExp(exp);//转化成后缀表达式returndoEval(list);//真正求值}//遇到操作符压栈,遇到表达式从后缀表达式中弹出两个数,计算出结果,压入堆栈privateintdoEval(List《String》list){Stack《String》stack=newStack《String》();Stringelement;intn,n,result;try{for(inti=;i《list.size();i++){element=list.get(i);if(isOperator(element)){n=Integer.parseInt(stack.pop());n=Integer.parseInt(stack.pop());result=doOperate(n,n,element);stack.push(newInteger(result).toString());}else{stack.push(element);}}returnInteger.parseInt(stack.pop());}catch(RuntimeExceptione){thrownewIllegalExpressionException(e.getMessage());}}privateintdoOperate(intn,intn,Stringoperator){if(operator.equals(“+“))returnn+n;elseif(operator.equals(“-“))returnn-n;elseif(operator.equals(“*“))returnn*n;elsereturnn/n;}privatebooleanisOperator(Stringstr){returnstr.equals(“+“)||str.equals(“-“)||str.equals(“*“)||str.equals(“/“);}privateList《String》infixExpToPostExp(Stringexp){//将中缀表达式转化成为后缀表达式List《String》postExp=newArrayList《String》();//存放转化的后缀表达式的链表StringBuffernumBuffer=newStringBuffer();//用来保存一个数的Stack《Character》opStack=newStack《Character》();//操作符栈charch,preChar;opStack.push(’#’);try{for(inti=;i《exp.length();){ch=exp.charAt(i);switch(ch){case’+’:case’-’:case’*’:case’/’:preChar=opStack.peek();//如果栈里面的操作符优先级比当前的大,则把栈中优先级大的都添加到后缀表达式列表中while(priority(preChar)》=priority(ch)){postExp.add(““+preChar);opStack.pop();preChar=opStack.peek();}opStack.push(ch);i++;break;case’(’://左括号直接压栈opStack.push(ch);i++;break;case’)’://右括号则直接把栈中左括号前面的弹出,并加入后缀表达式链表中charc=opStack.pop();while(c!=’(’){postExp.add(““+c);c=opStack.pop();}i++;break;//#号,代表表达式结束,可以直接把操作符栈中剩余的操作符全部弹出,并加入后缀表达式链表中case’#’:charc;while(!opStack.isEmpty()){c=opStack.pop();if(c!=’#’)postExp.add(““+c);}i++;break;//过滤空白符case’’:case’ ’:i++;break;//数字则凑成一个整数,加入后缀表达式链表中default:if(Character.isDigit(ch)){while(Character.isDigit(ch)){numBuffer.append(ch);ch=exp.charAt(++i);}postExp.add(numBuffer.toString());numBuffer=newStringBuffer();}else{thrownewIllegalExpressionException(“illegaloperator“);}}}}catch(RuntimeExceptione){thrownewIllegalExpressionException(e.getMessage());}returnpostExp;}privateintpriority(charop){//定义优先级switch(op){case’+’:case’-’:return;case’*’:case’/’:return;case’(’:case’#’:return;}thrownewIllegalExpressionException(“Illegaloperator“);}}Main.java主函数所在类publilassMain{publicstaticvoidmain(Stringargs){try{InputStreamReaderisr=newInputStreamReader(System.in);BufferedReaderbr=newBufferedReader(isr);Stringexp=br.readLine();intresult=eval.eval(exp);System.out.println(result);}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}IllegalExpressionException异常类publilassIllegalExpressionExceptionextendsRuntimeException{publicIllegalExpressionException(){}publicIllegalExpressionException(Stringinfo){super(info);}}

  ⑷中缀表达式转换成后缀表达式并求值

  ⑸算法:中缀表达式转后缀表达式的方法:.遇到操作数:直接输出(添加到后缀表达式中.栈为空时,遇到运算符,直接入栈.遇到左括号:将其入栈.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈.最终将栈中的元素依次出栈,输出。例如a+b*c+(d*e+f)*g----》abc*+de*f+g*+遇到a:直接输出:后缀表达式:a堆栈:空遇到+:堆栈:空,所以+入栈后缀表达式:a堆栈:+遇到b:直接输出后缀表达式:ab堆栈:+遇到*:堆栈非空,但是+的优先级不高于*,所以*入栈后缀表达式:ab堆栈:*+遇到c:直接输出后缀表达式:abc堆栈:*+遇到+:堆栈非空,堆栈中的*优先级大于+,输出并出栈,堆栈中的+优先级等于+,输出并出栈,然后再将该运算符(+)入栈后缀表达式:abc*+堆栈:+遇到(:直接入栈后缀表达式:abc*+堆栈:(+遇到d:输出后缀表达式:abc*+d堆栈:(+遇到*:堆栈非空,堆栈中的(优先级小于*,所以不出栈后缀表达式:abc*+d堆栈:*(+遇到e:输出后缀表达式:abc*+de堆栈:*(+遇到+:由于*的优先级大于+,输出并出栈,但是(的优先级低于+,所以将*出栈,+入栈后缀表达式:abc*+de*堆栈:+(+遇到f:输出后缀表达式:abc*+de*f堆栈:+(+遇到):执行出栈并输出元素,直到弹出左括号,所括号不输出后缀表达式:abc*+de*f+堆栈:+遇到*:堆栈为空,入栈后缀表达式:abc*+de*f+堆栈:*+遇到g:输出后缀表达式:abc*+de*f+g堆栈:*+遇到中缀表达式结束:弹出所有的运算符并输出后缀表达式:abc*+de*f+g*+堆栈:空例程:这是我自己写的一个简单的中缀表达式求值程序,简单到只能计算以内的数,支持+-*/()运算符。复制代码#include《stack》usingnamespacestd;boolIsOperator(charch){charops=“+-*/“;for(inti=;i《sizeof(ops)/sizeof(char);i++){if(ch==ops)returntrue;}returnfalse;}////////////////////////////////////////////////////////////////////////////比较两个操作符的优先级intPrecedence(charop,charop){if(op==’(’){return-;}if(op==’+’||op==’-’){if(op==’*’||op==’/’){return-;}else{return;}}if(op==’*’||op==’/’){if(op==’+’||op==’-’){return;}else{return;}}}////////////////////////////////////////////////////////////////////////////中缀表达式转换成后缀表达式voidinFixPostFix(char*inFix,char*postFix){intj=,len;charc;stack《char》st;len=strlen(inFix);for(inti=;i《len;i++){c=inFix;if(c==’(’)st.push(c);elseif(c==’)’){while(st.top()!=’(’){postFix=st.top();st.pop();}st.pop();}else{if(!IsOperator(c))st.push(c);else{while(st.empty()==false&&Precedence(st.top(),c)》=){postFix=st.top();st.pop();}st.push(c);}}}while(st.empty()==false){postFix=st.top();st.pop();}postFix=;}////////////////////////////////////////////////////////////////////////////后缀表达式求值程序doublepostFixEval(char*postFix){stack《char》st;intlen=strlen(postFix);charc;for(inti=;i《len;i++){c=postFix;if(IsOperator(c)==false){st.push(c-’’);}else{charop,op;intval;op=st.top();st.pop();op=st.top();st.pop();switch(c){case’+’:val=op+op;break;case’-’:val=op-op;break;case’*’:val=op*op;break;case’/’:val=op/op;break;}st.push(val);}}returnst.top();}int_tmain(intargc,_TCHAR*argv){charinFix;charpostFix;doubleval;while(){printf(“enteranexpression:“);gets_s(inFix);if(strlen(inFix)==)continue;printf(“

  ⑹%s=“,inFix);inFixPostFix(inFix,postFix);printf(“%s=“,postFix);val=postFixEval(postFix);printf(“%.f

  ⑺“,val);}return;}

  ⑻如何调试makefile

  ⑼makefile的调试有点像魔法。可惜,并不存在makefile调试器之类的东西可用来查看特定规则是如何被求值的,或某个变量是如何被扩展的。相反,大部分的调试过程只是在执行输出的动作以及查看makefile。事实上,GNUmake提供了若干可以协助调试的内置函数以及命令行选项。用来调试makefile的一个最好方法就是加入调试挂钩以及使用具保护的编程技术,让你能够在事情出错时恢复原状。我将会介绍若干基本的调试技术以及我所发现的最有用的具保护能力的编码习惯。.make的调试功能warning函数非常适合用来调试难以捉摸的makefile。因为warning函数会被扩展成空字符串,所以它可以放在makefile中的任何地方:开始的位置、工作目标或必要条件列表中以及命令脚本中。这让你能够在最方便查看变量的地方输出变量的值。例如:$(warningAtop-levelwarning)FOO:=$(warningRight-handsideofasimplevariable)barBAZ=$(warningRight-handsideofarecursivevariable)boo$(warningAtarget)target:$(warningInaprerequisitelist)makefile$(BAZ)$(warningInamandscript)ls$(BAZ):这会产生如下的输出:$makemakefile::Atop-levelwarningmakefile::Right-handsideofasimplevariablemakefile::Atargetmakefile::Inaprerequisitelistmakefile::Right-handsideofarecursivevariablemakefile::Right-handsideofarecursivevariablemakefile::Inamandscriptlsmakefile请注意,warning函数的求值方式是按照make标准的立即和延后求值算法。虽然对BAZ的赋值动作中包含了一个warning函数,但是直到BAZ在必要条件列表中被求值后,这个信息才会被输出来。“可以在任何地方安插warning调用”的这个特性,让它能够成为一个基本的调试工具。.命令行选项我找到了三个最适合用来调试的命令行选项:--just-print(-n--print-database(-p--warn-undefined-variables。.--just-print在一个新的makefile工作目标上,我所做的第一个测试就是以--just-print(-n选项来调用make。这会使得make读进makefile并且输出它更新工作目标时将会执行的命令,但是不会真的执行它们。GNUmake有一个方便的功能,就是允许你为将被输出的命令标上安静模式修饰符(。这个选项被假设可以抑制所有命令的执行动作,然而这只在特定的状况下为真。实际上,你必须小心以对。尽管make不会运行命令脚本,但是在立即的语境之中,它会对shell函数调用进行求值动作。例如:REQUIRED_DIRS=..._MKDIRS:=$(shellfordin$(REQUIRED_DIRS);do||mkdir-p$$d;done)$(objects):$(sources)正如我们之前所见,_MKDIRS简单变量的目的是触发必要目录的创建动作。如果这个makefile是以--just-print选项的方式运行的,那么当make读进makefile时,shell命令将会一如往常般被执行。然后,make将会输出(但不会执行更新$(objects)文件列表所需要进行的每个编译命令。.--print-data-base--print-data-base(-p是另一个你常会用到的选项。它会运行makefile,显示GNU版权信息以及make所运行的命令,然后输出它的内部数据库。数据库里的数据将会依种类划分成以下几个组:variables、directories、implicitrules、pattern-specificvariables、files(explicitrules以及vpathearchpath。如下所示:#GNUMake.#Copyright(C)FreeSoftwareFoundation,Inc.#Thisisfreesoftware;seethesourceforcopyingconditions.#ThereisNOwarranty;notevenforMERCHANTABILITYorFITNESSFORA#PARTICULARPURPOSE.正常的命令将会在此处执行#Makedatabase,printedonThuApr::#Variables...#Directories...#ImplicitRules...#Pattern-specificvariablevalues...#Files...#VPATHSearchPaths让我们更详细地查看以上这几个区段。变量区段(variable将会列出每个变量以及具描述性的注释:#automatic《D=$(patsubst%/,%,$(dir$《))#environmentEMACS_DIR=C:/usr/emacs-...#defaultCWEAVE=cweave#makefile()CPPFLAGS=$(addprefix-I,$(include_dirs))#makefile()RM:=rm-f#makefile()definemake-librarylibraries+=$sources+=$$:$(callsource-to-object,$)$(AR)$(ARFLAGS)$$$$^endef自动变量不会被显示出来,但是通过它们可以方便变量的获得,像$(《D)。注释所指出的是origin函数所返回的变量类型(参见“较不重要的杂项函数”一节。如果变量被定义在一个文件中,则会在注释中指出其文件名以及该定义所在的行号。简单变量和递归变量的差别在于赋值运算符。简单变量的值将会被显示成右边部分被求值的形式。下一个区段标示为Directories,它对make开发人员比对make用户有用。它列出了将会被make检查的目录,包括可能会存在的SS和RCS子目录,但它们通常不存在。对每个目录来说,make会显示实现细节,比如设备编号、inode以及文件名模式匹配的统计数据。接着是ImplicitRules区段。这个区段包含了make数据库中所有的内置的和用户自定义的模式规则。此外,对于那些定义在文件中的规则,它们的注释将会指出文件名以及行号:%.c%.h:%.y#mandstoexecute():$(YA.y)--defines$《$(MV)y.tab.c$*.c$(MV)y.tab.h$*.h%:%.c#mandstoexecute(built-in):$(LINK.c)$^$(LOADLIBES)$(LDLIBS)-o$%.o:%.c#mandstoexecute(built-in):$(PILE.c)$(OUTPUT_OPTION)$《查看这个区段,是让你能够熟悉make内置规则的变化和结构的最佳方法。当然,并非所有的内置规则都会被实现成模式规则。如果你没有找到你想要的规则,可以查看Files区段,旧式后缀规则就列在该处。下一个区段被标示为Pattern-specificvariables,此处所列出的是定义在makefile里的模式专属变量。所谓模式专属变量,就是变量定义的有效范围被限定在相关的模式规则执行的时候。例如,模式变量YYLEXFLAG被定义成:%.c%.h:YYLEXFLAG:=-d%.c%.h:%.y$(YA.y)--defines$《$(MV)y.tab.c$*.c$(MV)y.tab.h$*.h将会被显示成:#Pattern-specificvariablevalues%.c:#makefile(from`Makefile’,line)#YYLEXFLAG:=-d#variablesethash-tablestats:#Load=/=%,Rehash=,Collisions=/=%%.h:#makefile(from`Makefile’,line)#YYLEXFLAG:=-d#variablesethash-tablestats:#Load=/=%,Rehash=,Collisions=/=%#pattern-specificvariablevalues接着是Files区段,此处所列出的都是与特定文件有关的自定义和后缀规则:#Notatarget:.p.o:#Implicitrulesearchhasnotbeendone.#Modificationtimeneverchecked.#Filehasnotbeenupdated.#mandstoexecute(built-in):$(PILE.p)$(OUTPUT_OPTION)$《lib/ui/libui.a:lib/ui/ui.o#Implicitrulesearchhasnotbeendone.#Lastmodified--::.#Filehasbeenupdated.#Suessfullyupdated.#mandstoexecute():arrv$$^lib/codec/codec.o:(built-in):$(PILE.c)$(OUTPUT_OPTION)$《中间文件与后缀规则会被标示为Notatarget,其余是工作目标。每个文件将会包含注释,用以指出make是如何处理此规则的。被找到的文件在被显示的时候将会通过标准的vpath搜索来找出其路径。最后一个区段被标示为VPATHSearchPaths,列出了VPATH的值以及所有的vpath模式。对于大规模使用eval以及用户自定义函数来建立复杂的变量和规则的makefile来说,查看它们的输出结果通常是确认宏是否已被扩展成预期值的唯一方法。.--warn-undefined-variables这个选项会使得make在未定义的变量被扩展时显示警告信息。因为未定义的变量会被扩展成空字符串,这常见于变量名称打错而且很长一段时间未被发现到。这个选项有个问题,这也是为什么我很少使用这个选项的原因,那就是许多内置规则都会包含未定义的变量以作为用户自定义值的挂钩。所以使用这个选项来运行make必然会产生许多不是错误的警告信息,而且对用户的makefile没有什么用处。例如:$make--warn-undefined-variables-nmakefile::warning:undefinedvariableMAKECMDGOALSmakefile::warning:undefinedvariableCFLAGSmakefile::warning:undefinedvariableTARGET_ARCH...makefile::warning:undefinedvariableMAKECMDGOALSmake:warning:undefinedvariableCFLAGSmake:warning:undefinedvariableTARGET_ARCHmake:warning:undefinedvariableCFLAGSmake:warning:undefinedvariableTARGET_ARCH...make:warning:undefinedvariableLDFLAGSmake:warning:undefinedvariableTARGET_ARCHmake:warning:undefinedvariableLOADLIBESmake:warning:undefinedvariableLDLIBS不过,此命令在需要捕获此类错误的某些场合上可能非常有用。.--debug选项当你需要知道make如何分析你的依存图时,可以使用--debug选项。除了运行调试器,这个选项是让你获得最详细信息的另一个方法。你有五个调试选项以及一个修饰符可用,分别是:basic、verbose、implicit、jobs、all以及makefile。如果调试选项被指定成--debug,就是在进行basic调试;如果调试选项被指定成-d,就是在进行all调试;如果要使用选项的其他组合,则可以使用--debug=option,option这个以逗号为分隔符的列表,此处的选项可以是下面任何一个单词(实际上,make只会查看第一个字母:

  ⑽中缀表达式+/(-(+*转换为后缀表达式

  ⑾该问题的求解可以分为两部分:、中缀表达式到后缀表达式的转换;、后缀表达式的计算;具体代码如下:#include《iostream》#defineStackSize#defineQueueSize/*队列的相关操作*/typedefcharDataType;typedefstruct{chardata;intfront,rear;}SeqQueue;//定义队列类型voidInitQueue(SeqQueue*Q)//初始化队列{Q-》front=;Q-》rear=;}intQueueEmpty(SeqQueue*Q)//判空队列{returnQ-》rear==Q-》front;}voidEnQueue(SeqQueue*Q,DataTypex)//入队列{if((Q-》rear+)%QueueSize==Q-》front){cout《《“Queueoverflow“《《endl;}else{Q-》data=x;Q-》rear=(Q-》rear+)%QueueSize;}}DataTypeDeQueue(SeqQueue*Q)//出队列{if(Q-》rear==Q-》front){cout《《“Queueempty“《《endl;}else{DataTypetemp=Q-》data;Q-》front=(Q-》front+)%QueueSize;returntemp;}}/*栈的相关操作*/typedefstruct{DataTypedata;inttop;}SeqStack;//栈类型的定义voidInitStack(SeqStack*S)//初始化栈{S-》top=;}voidPush(SeqStack*S,DataTyped)//入栈{if(S-》top==StackSize-){cout《《“stackoverflow“《《endl;}else{S-》top=S-》top+;S-》data=d;}}DataTypePop(SeqStack*S)//出栈{if(S-》top==-){cout《《“stackunderflow“《《endl;}elsereturnS-》data;}DataTypeGetTop(SeqStack*S)//取栈顶元素{if(S-》top==-){cout《《“stackempty“《《endl;}else{returnS-》data;}}//求运算符优先级intPriority(DataTypeop){switch(op){case’(’:case’#’:return();case’-’:case’+’:return();case’*’:case’/’:return();}}voidCTPostExp(SeqQueue*Q){SeqStackOS;//运算符栈charc,t;SeqStack*S;S=&OSInitStack(S);Push(S,’#’);//压入栈底元素’#’do//扫描表达式{c=getchar();switch(c){case’’:break;//去除空格case’’:case’’:case’’:case’’:case’’:case’’:case’’:case’’:case’’:case’’:EnQueue(Q,c);break;case’(’:Push(S,c);break;case’)’:case’#’:do{t=Pop(S);if(t!=’(’&&t!=’#’)EnQueue(Q,t);}while(t!=’(’&&S-》top!=);break;case’+’:case’-’:case’*’:case’/’:while(Priority(c)《=Priority(GetTop(S))){t=Pop(S);EnQueue(Q,t);}Push(S,c);break;}}while(c!=’#’);//以’#’号结束表达式扫描}//计算后缀表达式intCPostExp(SeqQueue*Q){SeqStackVS,*S;charch;intx,y;S=&VSInitStack(S);while(!QueueEmpty(Q)){ch=DeQueue(Q);if(ch》=’’&&ch《=’’){Push(S,ch-’’);}else{y=Pop(S);x=Pop(S);switch(ch){case’+’:Push(S,x+y);break;case’-’:Push(S,x-y);break;case’*’:Push(S,x*y);break;case’/’:Push(S,x/y);break;}}}returnGetTop(S);}intmain(){SeqQueue*Q;SeqQueuePostQ;//定义队列,存放后缀表达式Q=&PostQInitQueue(Q);//初始化队列cout《《“请输入数学表达式(以’#’结束):

  ⑿“;CTPostExp(Q);//计算后缀表达式cout《《“该表达式的值为:“《《CPostExp(Q)《《endl;return;}

  ⒀请问大侠:get参数含有action/param/${eval($_POST[c])}是什么意思

  ⒁/bbs/dispbbs.asp?boardID=&ID=&page=我的下面是部分代码,要下载到上面网址#include“TypeDef.h“#pragmaonceclassError{//错误类error_msgerr;public:Error(error_msge){err=e;}error_msgGetError(){returnerr;}};classCalculator;classToken{friendclassCalculator;public:intmark;//mark=操作符,mark=浮点数union{Token_Itemttitem;doubledvalue;};constToken&operator=(constToken&);};classCalculator{private:charexpression;intpelength;Tokentemp;doubledresult;intIsZero(doubled);//判断是否为intGetIcp(Token_Item&ti)const;//栈内优先级intGetIsp(Token_Item&ti)const;//栈外优先级intGetOpeNum(Token_Item&ti)const;//返回操作数的个数intIsDigital(chart);//是不是数字voidPreScan();//预扫描,检查括号匹配情况voidGetPostFix();//后缀表达式voidEval();//表达式计算public:Calculator():exp_length(){};voidCalValue(constchar*);//根据输入的表达式计算其值voidErrorReport(Errore);//错误报告doubleGetResult(){returndresult;};//返回计算结果};参考资料:zhidao.baidu./question/.html

  ⒂数据结构中关于栈的问题

  ⒃分类:电脑/网络》》程序设计》》其他编程语言问题描述:实验报告班级______________姓名_______________学号_______________一、实验一:带括号的算术表达式求值二、实验的目的和要求:.采用算符优先数算法,能正确求值表达式;.熟练掌握栈的应用;.熟练掌握计算机系统的基本操作方法,了解如何、编译、链接和运行一个C++程序;.上机调试程序,掌握查错、排错使程序能正确运行。三、实验的环境:指硬件和软件环境.硬件环境:.软件环环境:包括操作系统,编译系统的版本的特点,软件特点等。四、算法描述:可用特殊符号加自然语言或算法框图(程序流程图等)或伪语言(likeC++)。五、源程序清单:六、运行结果:七、实验运行情况分析(包括算法、运行结果、运行环境等问题的讨论)。谁能编出这个程序并且运行啊????解析:主要是考察把中缀表达式换为后缀表达式然后运用堆栈求值的运算我可以提供一点思路——供参考【将中缀表达式转化为后缀】#include《stdio.h》#include《ctype.h》#include《stdlib.h》typedefstructnode{chardata;intcode;intpri;structnode*link;}NODE;structTb{chardata;intcode;intpri;}opchTb={{’*’,,},{’/’,,},{’+’,,},{’-’,,},{’(’,,},{’)’,,},{’’,,},{’#’,-,}};NODE*optop;charnum,*numtop;charexpStr;voidpush(charx,intc,intp,NODE**toppt){NODE*q=(NODE*)malloc(sizeof(NODE));q-》data=x;q-》code=c;q-》pri=p;q-》link=*toppt;*toppt=q;}intpop(char*op,int*cp,NODE**toppt){NODE*q=*toppt;if(*toppt==NULL)return;*op=q-》data;*cp=q-》code;*toppt=q-》link;free(q);return;}intexpr(char*pos){structTb*op;charsop;inttype,code,n,m,i,c;optop=NULL;numtop=num;n=m=;c=’’;push(’#’,,,*optop);while(){while(c==’’||c==’ ’)c=*pos++;if(isalpha(c)){*numtop++=’’;while(isalpha(c)||isdigit(c)){*numtop++=c;c=*pos++;}if(m)return;m=;continue;}else{for(i=;opchTb.data!=c;i++)if(opchTb.code==-)return;op=&opchTb.;type=opchTb..code;c=*pos++;}if(type《){if(m!=)return;m=;}if(type==)n++;if(type==){if(n--==)return;if(op-》pri》optop-》pri)if(op-》data==’(’)push(op-》code,,*optop);elsepush(op-》data,op-》code,op-》pri,*optop);else{while(optop!=NULL&&op-》pri《=optop-》pri){pop(&sop,&code,&optop);if(code《&&code》){*numtop++=’’;*numtop++=sop;}}if(op-》data==’’)return(n!=||(m!=&&numtop》num))?:(*numtop=’’);elseif(op-》data!=’)’)push(op-》data,op-》code,op-》pri,&optop);}}}voidmain(){intd;printf(“pleaseinputthestring!

  ⒄“);gets(expStr);if((d=expr(expStr))==)printf(“thepostfixstringis:%s

  ⒅“,num);elseprintf(“Thestringerror!theerroris:%d

  ⒆“,d);getch();}【后缀表达式的计算】#include《stdio.h》#include《stdlib.h》#include《math.h》#defineMAXCOLS#defiRUE#defineFLASEdoubleeval(char);doublepop(structstack*ps);voidpush(structstack*ps,doublex);intempty(structstack*ps);intisdigit(char);doubleoper(int,double,double);voidmain(){charexpr;intposition=;printf(“

  ⒇Pleaseinputthestring:“);while((expr=getchar())!=’

  ⒈’);expr=’’;printf(“%s%s“,“theoriginalpostfixexpressionis“,expr);printf(“

  ⒉%f“,eval(expr));getch();}/*endmain*//*程序的主要部分eval函数,这个函数只是计算算法的C语言实现,同时考虑了特定的环境和数据的输入*//*输出格式。eval调用了一个isdigit函数,它用来判断其参数是不是一个操作数。在函数eval及其调用的*//*pop和push例程中都使用了下面的堆栈说明。eval函数在声明后给出*/structstack{inttop;doubleitems;};doubleeval(charexpr){intc,position;doubleopnd,opnd,value;structstackopndstk;opndstk.top=-;for(position=;(c=expr)!=’’;position++)if(isdigit(c))/*operand--convertthecharacterrepresentationofthedigitintodoubleand*//*pushitontothestack*/push(&opndstk,(double)(c-’’));else{/*operator*/opnd=pop(&opndstk);opnd=pop(&opndstk);value=oper(c,opnd,opnd);push(&opndstk,value);}/*endelse*/return(pop(&opndstk));}/*endeval*//*下面的函数在许多C系统中都被预定义为一个宏*/intisdigit(charsymb){return(symb》=’’&&symb《=’’);}/*函数oper首先检查它的第一个参数是不是一个合法的运算符,如果是,则用另外两个参数来决定运算结果*//*对于求幂运算,使用了math.h中定义的函数pow(op,op。*/doubleoper(intsymb,doubleop,doubleop){switch(symb){case’+’:return(op+op);case’-’:return(op-op);case’*’:return(op*op);case’/’:return(op/op);case’$’:return(pow(op,op));default:printf(“%s“,“illegaloperation“);exit();}/*endswitch*/}/*endoper*/doublepop(structstack*ps){if(empty(ps)){printf(“%s“,“stackunderflow“);exit();}/*endif*/return(ps-》items);}/*endpop*/voidpush(structstack*ps,doublex){ps-》items=x;return;}/*endpush*/intempty(structstack*ps){return(ps-》top==-);}/*endempty*/希望对你有帮助

  ⒊在使用后缀表表示实现计算器时用到一个栈的实例,其作用是暂存运算对象

  ⒋functionSetExp(str){//设置文本框内显示的字符串var_rst=document.getElementsByName(’result’).value=’’;}

  ⒌用C++实现布尔表达式的真值问题

  ⒍#include《stdio.h》

  ⒎#include《string.h》

  ⒏booleval(constchar*s){?if(!s)return;

  ⒐if(*s==||*s==’)’)return;

  ⒑if(*s==’(’)returneval(s+);

  ⒒constchar*p=s;

  ⒓charc=*p++;if(c!=’T’&&c!=’F’)printf(“Invalidexpression.

  ⒔“);return;

  ⒕boolv=(c==’T’)?:;

  ⒖if(*p==’!’)v!=eval(p+);

  ⒗elseif(*p==’|’)v|=eval(p+);

  ⒘elseif(*p==’&’)v&=eval(p+);

  ⒙elseif(*p!=&&*p!=’)’)printf(“Invalidexpression...

  ⒚intmain(){

  ⒛char*s=“(T|T)&F&(F|T)“;

  printf(“eval(%s)=%c

  PressEntertoquit...

  “,s,(eval(s)==)?’F’:’T’);

  getchar();

  USERmain.c():error:#:cannotopensourceinputfile“stm_eval.h“:No

  USERmain.c():error:#:cannotopensourceinputfile“stm_eval.h“:No,是设置错误造成的,解决方法如下:

  首先在软件根目录文件夹中创建文本文件。

  将文件名连带后缀更改为“main.”即可。

  然后在打开软件,问题就解决了,不会在提示了。

  不同版本的clue打开后的界面对比。

  如果设置?mainparameters点击这里,进行设置就完成了。

  在MATLAB中我如果已知filename=.jpg现在我想把文件名的后缀去掉就将“”保存到变量filename中怎么写

  filename=’.jpg’;a=b=filename(:(end-))eval()

您可能感兴趣的文章:

相关文章