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

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 《编程之美》作者 2021-03-24 12:54
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号