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

📄 zjdm.txt

📁 逆波兰式定义: 将运算对象写在前面
💻 TXT
字号:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define max 100
char ex[max];
void trans()
{
	char str[max];
	char stack[max];
	char ch;
	int sum,j,t,top=0;
	int i=0;/*计数器*/
	printf("*****************************************\n");
	printf("说明:以 # 号为结束标志.\n");
	printf("*****************************************\n");
	printf("表达示: ");
	do
    {
		i++;
		scanf("%c",&str[i]);	/*注: str[0]没有数据*/
		if(i>=max)	printf("表达式长度过长!");
    }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)
		if(stack[top]!='(')
		{ 
			ex[t]=stack[top];
			t++;
			top--;
		}   
		else 
		{
			printf("error");
			top--;
			exit(0);
		}
	ex[t]='#';
	printf("\n原表达式是: ");
	for(j=1;j<sum;j++)
		printf("%c",str[j]);
	printf("\n后缀表达式是: ");
	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\tchu0error!\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计算结果为: %g\n",stack[top]);
}
main()
{
	trans();
	compvalue();
	return 0;
}

⌨️ 快捷键说明

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