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

📄 nibolan.c

📁 利用简单优先法输出逆波兰式 将中缀式转化成逆波兰式
💻 C
字号:
#include<stdio.h>
#include<math.h>
#define max 100
char ex[max];       /*存储后缀表达式*/
void trans(){        /*将算术表达式转化为后缀表达式*/
	char str[max];   /*存储原算术表达式*/
	char stack[max];       /*作为栈使用*/
	char ch;
	int sum,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<='9'){                 /*判定为数字*/
			ex[t]=ch;t++;
			ch=str[i];i++;
				}
			i--;
			ex[t]='#';t++;
		}
		ch=str[i];i++;
	}
	while(top!=0){
		ex[t]=stack[top];t++;top--;
	}
	ex[t]='#';
	printf("\n\t原来表达式:");
	for(j=1;j<sum;j++)
		printf("%c",str[j]);
    printf("\n\t后缀表达式:",ex);
	for(j=1;j<t;j++)
		printf("%c",ex[j]);
}

/*void compvalue(){                                 
	float stack[max],d;                   
	char ch;
	int t=1,top=0;               
	ch=ex[t];t++;
    while(ch!='#'){
		switch(ch){
		  case '+':
			  stack[top-1]=stack[top-1]+stack[top];
			  top--;
			  break;
          case '-':
			  stack[top-1]=stack[top-1]-stack[top];
			  top--;
			  break;
          case '*':
			  stack[top-1]=stack[top-1]*stack[top];
			  top--;
			  break;

          case '/':
	          if(stack[top]!=0)
			    stack[top-1]=stack[top-1]/stack[top];
	          else{
		          printf("\n\t除零错误!\n");
		          exit(0);                  
			  }
			  top--;
			  break;
		  default:
			  d=0;
			  while(ch>='0'&&ch<='9'){
				  d=10*d+ch-'0';               
				  ch=ex[t];t++;
			  }
			  top++;
			  stack[top]=d;
		}
		ch=ex[t];t++;
	}
	printf("\n\t计算结果:%g\n",stack[top]);
}*/

main(){
	trans();
//	compvalue();
}

⌨️ 快捷键说明

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