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. answer();
  83. return 0;
  84. }
  85. }
  86.  
  87. answer();
  88.  
  89. return 0;
  90.  
  91.  
  92. }
  93.  
  94. void push(double value)
  95. {
  96. if (!isFull()) {
  97. stack[sp++] = value;
  98. } else {
  99. printf("スタックが満杯で入りませんでした\n");
  100. }
  101. }
  102.  
  103. double pop(void)
  104. {
  105. if (!isEmpty()) {
  106. return stack[--sp];
  107. } else {
  108. printf("スタックが空で取り出せませんでした\n");
  109. return 0.0;
  110. }
  111. }
  112.  
  113. int isFull(void)
  114. {
  115. return sp >= SIZE;
  116. }
  117.  
  118. int isEmpty(void)
  119. {
  120. return sp <= 0;
  121. }
  122.  
  123. void answer(void)
  124. {
  125. if (!isEmpty()) {
  126. printf("答え: %lf\n", stack[sp - 1]);
  127. } else {
  128. printf("スタックが空で何も取り出せませんでした\n");
  129. }
  130. }
  131.  
  132. void reset(void)
  133. {
  134. sp = 0;
  135. }
  136.  
Success #stdin #stdout 0s 5320KB
stdin
5
1
5
2
1
9
stdout
答え: 3.000000