weixin_54282780
沐い
2021-03-24 12:42
采纳率: 50%
浏览 48

c语言的有关栈的问题 不知道为什么输出不出来结果,求教一下

本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S​1​​ 存放数字,另一个堆栈 S​2​​ 存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:

  1. 从 S​1​​ 中弹出两个数字,顺序为 n​1​​ 和 n​2​​;
  2. 从 S​2​​ 中弹出一个运算符 op;
  3. 执行计算 n​2​​ op n​1​​;
  4. 将得到的结果压回 S​1​​。

直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。

输入格式:

输入首先在第一行给出正整数 N(1<N≤10​3​​),为 S​1​​ 中数字的个数。

第二行给出 N 个绝对值不超过 100 的整数;第三行给出 N−1 个运算符 —— 这里仅考虑 +-*/ 这四种运算。一行中的数字和符号都以空格分隔。

输出格式:

将输入的数字和运算符按给定顺序分别压入堆栈 S​1​​ 和 S​2​​,将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过 10​9​​。

如果执行除法时出现分母为零的非法操作,则在一行中输出:ERROR: X/0,其中 X 是当时的分子。然后结束程序。

输入样例 1:

5
40 5 8 3 2
/ * - +

输出样例 1:

2

输入样例 2:

5
2 5 8 4 4
* / - +

输出样例 2:

ERROR: 5/0

 

#include <stdio.h>
#include <stdlib.h>
#define MaxSize  1000
typedef int ElementType;
typedef struct {
	ElementType Data[MaxSize];
	int Top;
} Stack;
void Push( Stack *PtrS, ElementType item )
{
    if ( PtrS->Top == MaxSize-1 ) {
		return;
	}
	else {
		++(PtrS->Top);
		PtrS->Data[PtrS->Top] = item;
        return;
    }
}
ElementType Pop( Stack *PtrS )
{
     return ( PtrS->Data[(PtrS->Top)--] );
}
int main(){
	Stack numst,opst;
	numst.Top=opst.Top=-1;
	int n,a,b,i,j;
	char op;
	scanf ("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a);
		Push(&numst,a);
	 } 
	 for(j=0;j<n;j++)
	 {
	 	getchar();
	 	scanf("%c",&op);
	 }
	 while(1)
	 {
	 	if(numst.Top!=-1&&opst.Top!=-1)
	    {
		   int n1=Pop(&numst);
	 	   int n2=Pop(&numst);
	 	   op=Pop(&opst);
		   int sum;
		switch(op)
		{
		    case '+':
		 		sum=n2+n1;
		 		break;
		    case '-':
		 		sum=n2-n1;
		 		break;
		    case '*':
		 		sum=n2*n1;
		 		break;
		 	case '/':
		 		if(n1==0)
				{
				    printf("ERROR: %d/0;",n2);
				    break;
				}
		 		else
				 {
				 sum=n2/n1;} 
		 		break;
		}
		if(numst.Top==-1&&opst.Top==-1)
		{
			printf("%d",sum);
		}
		else
		    Push(&numst,sum);
		}
		else
		    break;
	}
   return 0;
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • SoftwareTeacher
    SoftwareTeacher 2021-03-24 12:54
    点赞 评论
  • Yang9325
    猫叔压力大 2021-03-24 19:11

    37行删了试试吧。

    点赞 评论

相关推荐