文档介绍:实验报告姓名:孙岩学号:1408080211班级:惠普开发142学校:青岛科技大学Mail:电话:178教师:宮生文实验报告:实验名称:逆波兰式分析实验目的与要求将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。实验内容与步骤:一、实验内容对于这个实验,总共用了三个函数,即主函数、算术表达式转换为后缀表达式函数、根据后缀表达式求取表达式的计算值。主要完成的功能就是接收一个包含加减乘除以及括号的算数表达式,进而将其转换为后缀表达式,从而通过此后缀表达式求出该算数表达式的值。二、实验步骤1、基于实验的内容,构造程序所需的模块2、根据已建构的模块,写出各个模块的相应程序代码3、在主函数中调用模块来完成所要得到的效果在本程序中,首先定义了数组常量ex[max],用于存储后缀表达式,操作对象在前,运算符在后;其次,就是trans()函数,它的作用就是将算数表达式转换为后缀表达式;pvalue()函数,它的作用就是根据后缀表达式求取对应算数表达式的算数值;最后就是主函数模块,主要就是通过对以上几个模块的调用。实验代码如下:#include<stdio、h>#include<math、h>#include<stdlib、h>#definemax100charex[max];/*存储后缀表达式*/voidtrans(){/*将算术表达式转化为后缀表达式*/ charstr[max];/*存储原算术表达式*/ charstack[max];/*作为栈使用*/ charch; intsum,i,j,t,top=0; printf("*****************************************\n"); printf("*输入一个求值的表达式,以#结束。*\n"); printf("******************************************\n"); printf("算数表达式:"); i=0;/*获取用户输入的表达式*/ do{ i++; scanf("%c",&str[i]); }while(str[i]!='#'&&i!=max);sum=i; t=1;i=1; ch=str[i];i++; while(ch!='#'){ switch(ch){ case'(':/*判定为左括号*/ top++;stack[top]=ch; break;case')':/*判定为右括号*/ while(stack[top]!='('){ex[t]=stack[top];top--;t++; } top--; break;case'+':/*判定为加减号*/ case'-': while(top!=0&&stack[top]!='('){ ex[t]=stack[top];top--;t++; } top++;stack[top]=ch; break; case'*':/*判定为乘除号*/case'/': while(stack[top]=='*'||stack[top]=='/'){ ex[t]=stack[top];top--;t++; } top++;stack[top]=ch; break; case'':break; default:while(ch>='0'&&ch<=