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