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