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

📄 floatbck.c

📁 表达式求值
💻 C
字号:
#define maxsize 100
typedef struct
{
	float data[maxsize];
	int top;
}seqstack;
int empty(seqstack stack)
{
	if(stack.top==-1) return 1;
	else return 0;
}
int priority(char op)
{
	if(op=='+'||op=='-') return 1;
	else if(op=='*'||op=='/') return 2;
	else if(op==')') return 3;
	else if(op=='(') return 0;
}
seqstack push(seqstack stack,float value)
{
	if(stack.top==maxsize-1) printf("Stack is Full\n");
	else stack.data[++stack.top]=value;
	return stack;
}
char GetTop(seqstack stack)
{
	if(stack.top==-1) return 0;
	else return(stack.data[stack.top]);
}
float count(float *backorder)
{
	seqstack S;
	float a,b;
	int i=0;
	S.top=-1;
	while(backorder[i]!=9)
	{
		if(backorder[i]>=10) S=push(S,backorder[i++]);
		else
		{
			b=S.data[S.top--]-10;
			a=S.data[S.top--]-10;
			if(backorder[i]==3) S=push(S,a+b+10);
			else if(backorder[i]==5) S=push(S,a-b+10);
			else if(backorder[i]==2) S=push(S,a*b+10);
			else if(backorder[i]==7) S=push(S,a/b+10);
			i++;
		}
	}
	return S.data[S.top--]-10;
}
main()
{
	seqstack S;
	int i=0,j=0,k,k_end;
	char c[100];
	float backorder[100],add1,add2;
	S.top=-1;
	printf("Input the string:");
	gets(c);
	while(c[i]!='\0')
	{
		if(c[i]>='0'&&c[i]<='9')
		{
			k=i+1;
			add1=c[i]-48;
			add2=0;
			while(c[k]>='0'&&c[k]<='9') add1=add1*10+c[k++]-48;
			i=k;
			if(c[k]=='.')
			{
				k_end=++k;
				while(c[k_end]>='0'&&c[k_end]<='9') k_end++;
				i=k_end;
				add2=(float)(c[--k_end]-48)/10;
				while(k_end>k) add2=add2/10+(float)(c[--k_end]-48)/10;
			}
			backorder[j++]=add1+add2+10;
		}
		else
		{
			if(empty(S)||c[i]=='(') S=push(S,c[i++]);
			else if(c[i]==')')
			{
				while(GetTop(S)!='(') backorder[j++]=S.data[S.top--]-40;
				S.top--;
				i++;
			}
			else
			{
				if(priority(c[i])>=priority(GetTop(S))||empty(S)) S=push(S,c[i++]);
				else
				{
					while(priority(c[i])<priority(GetTop(S))&&!empty(S)) backorder[j++]=S.data[S.top--]-40;
					S=push(S,c[i++]);
				}
			}
		}
	}
	while(!empty(S)) backorder[j++]=S.data[S.top--]-40;
	backorder[j]=9;
	for(i=0;backorder[i]!=9;i++)
		if(backorder[i]>=10) printf("%f ",backorder[i]-10);
		else printf("%c ",(int)backorder[i]+40);
	printf("= %f\n",count(backorder));
	getch();
}

⌨️ 快捷键说明

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