⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expression.txt

📁 表达式求值:利用栈操作实现由中缀表达式到后缀表达式的转换,再求值.
💻 TXT
字号:
// 123yr.cpp : Defines the entry point for the console application.
//

// A.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"

	  
char postexp[40];
void main ()
 {
	 void trans(char exp[],char postexp[]);
	   int compvalue(char post[]);
	 char exp[40];
         printf("请输入要求值的表达式:");
	 scanf("%s",exp);
        int n;
         
	 trans(exp,postexp);
     printf("转换为后缀表达式:%s\n",postexp); 
     n= compvalue(postexp);
	 

 }
void trans(char exp[],char postexp[])
  {
	  struct
	  {
		  char data[100];
		  int top;
	  }op;
	  int i,j;
	  char ch;
	  op.top=-1;
	  i=0;
	  j=0;
      ch=exp[i];
	  while(ch!='\0')
	  {
         
		  switch(ch)
		  {
	        case '(':
				op.top=op.top+1;
		        op.data[op.top]=ch;
		        
		        break;
	        case ')' :while(op.data[op.top]!='(')
				{
					postexp[j]=op.data[op.top];
					op.top--;
					j=j+1;
				}
		  
		          op.top--;
		        
		          break;
	        case'+':while((op.top!=-1)&&(op.data[op.top]!='('))
					{
				      postexp[j]=op.data[op.top];
		             op.top=op.top-1;
				     j=j+1;
					}op.top=op.top+1;
				      op.data[op.top]=ch;
					  
			        	break;  
	        case '-': while((op.top!=-1)&&(op.data[op.top]!='('))
					  {
				        postexp[j]=op.data[op.top];
				        op.top=op.top-1;
				        j=j+1;
                                                      
					  }  op.top=op.top+1;
				        op.data[op.top]=ch;
				         break;
            case '*':
			case '/':  while((op.top!=-1)&&(op.data[op.top])=='*'||(op.data[op.top]=='/'))
					   {
						   postexp[j]=op.data[op.top];
						   op.top=op.top-1;
						   j=j+1;
					   }
				           op.top=op.top+1;
						   op.data[op.top]=ch;
					   
			      	       break;
      
default:while (ch>='0'&&ch<='9')
			  {
				  postexp[j]=ch;
                   i=i+1;
				  ch=exp[i];
				  j=j+1;
				  
				  
			  }i=i-1;
	           postexp[j]='#';
	           j=j+1;
				break;
				
                  
	      
		  }
           i=i+1;
ch=exp[i];
      }
		  while((op.top!=-1))
		  {
			  postexp[j]=op.data[op.top];
			  op.top=op.top-1;
			  j=j+1;
		  }
		  
		  return;
	  }
int compvalue(char postexp[])
{
  struct
     {
      int data[100];
      int top;   
     }l;

l.top=-1;
int i,j,b[3];
int n=0; 
char ch;
i=0;j=0;
ch=postexp[i];
      while(ch!='\0')
          {
            switch(ch)
			{
			case'#':l.data[++l.top]=n;
				n=0;
				break;
            case'/':j=0;
				while(j<2)
				{
					b[j]=l.data[l.top--];
					j++;
				}
				n=b[1]/b[0];
				l.data[++l.top]=n;
				n=0;
				break;
			case'*':j=0;
				while(j<2)
				{
					b[j]=l.data[l.top--];
					j++;
				}
                n=b[0]*b[1];
				l.data[++l.top]=n;
				n=0;
				break;
			case'-':j=0;
				while(j<2)
				{
					b[j]=l.data[l.top--];
					j++;
				}
				n=b[1]-b[0];
				l.data[++l.top]=n;
				n=0;
				break;
			case'+':j=0;
				while(j<2)
				{
					b[j]=l.data[l.top--];
					j++;
				}
				n=b[1]+b[0];
				l.data[++l.top]=n;
				n=0;
				break;
			default:n=n*10+ch-'0';

			}
			
             i=i+1;
			  ch=postexp[i];
	  }
	  while(l.top!=-1)
	  printf("表达式的值n=%d\n",l.data[l.top--]);
	      n=l.data[l.top--];
   return n;
   
}
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -