fork download
  1. #include <stdio.h>
  2.  
  3. #define SIZE 10
  4.  
  5. int stack[SIZE];
  6. int sp;
  7.  
  8. void push(int value);
  9. int pop(void);
  10. int isFull(void);
  11. int isEmpty(void);
  12. void answer(void);
  13. void reset(void);
  14.  
  15. int main(void)
  16. {
  17. reset();
  18. int resp, data;
  19.  
  20. while(1){
  21. double data, cal1, cal2;
  22. int resp;
  23.  
  24. scanf("%d", &resp);
  25.  
  26. if(resp==9) break;
  27.  
  28. switch(resp){
  29.  
  30.  
  31. case 1: cal1=pop();
  32.  
  33. cal2 =pop();
  34. push(cal1+cal2);
  35.  
  36.  
  37. break;
  38.  
  39. case 2: cal1=pop();
  40.  
  41. cal2 =pop();
  42. push(cal1-cal2);
  43. break;
  44.  
  45. case 3: cal1=pop();
  46.  
  47. cal2 =pop();
  48. push(cal1*cal2) ;
  49. break;
  50. case 4: cal1=pop();
  51.  
  52. cal2 =pop();
  53. push(cal1/cal2);
  54. break;
  55.  
  56.  
  57.  
  58. case 5:
  59. scanf("%d", &data);
  60. push(data);
  61. break;}
  62.  
  63. printf("sp=%d\n", sp);
  64. }
  65.  
  66. answer();
  67.  
  68. return 0;
  69. }
  70.  
  71. void push(int value)
  72. {
  73. if( isFull() ){
  74. printf("スタックが満杯で入りませんでした\n");
  75. }else{
  76. stack[sp++] = value;
  77. }
  78. }
  79.  
  80. int pop(void)
  81. {
  82. if( isEmpty() ){
  83. printf("スタックが空で取り出せませんでした\n");
  84. return 0;
  85. }else{
  86. return stack[--sp];
  87. }
  88. }
  89.  
  90. int isFull(void)
  91. {
  92. if(sp >= SIZE){
  93. return 1;
  94. }else{
  95. return 0;
  96. }
  97. }
  98.  
  99. int isEmpty(void)
  100. {
  101. if(sp <= 0){
  102. return 1;
  103. }else{
  104. return 0;
  105. }
  106. }
  107.  
  108. void answer(void)
  109. {
  110. printf("\n");
  111. for(int i=0; i<sp; i++){
  112. printf("stack[%d]=%d \n", i, stack[i]);
  113. }
  114. }
  115.  
  116. void reset(void)
  117. {
  118. sp = 0;
  119. }
Success #stdin #stdout 0s 5312KB
stdin
5
1
5
3
1
9
stdout
sp=1
sp=2
sp=1

stack[0]=0