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. reset();
  17. while(1){
  18. int mode;
  19. double data, a, b;
  20.  
  21. scanf("%d", &mode);
  22.  
  23. if (mode == 9) {
  24. break;
  25. }
  26.  
  27. switch (mode) {
  28. case 1: // 足し算 (+)
  29. b = pop();
  30. a = pop();
  31. push(a + b);
  32. break;
  33. case 2: // 引き算 (-)
  34. b = pop();
  35. a = pop();
  36. push(a - b);
  37. break;
  38. case 3: // 掛け算 (*)
  39. b = pop();
  40. a = pop();
  41. push(a * b);
  42. break;
  43. case 4: // 割り算 (/)
  44. b = pop();
  45. a = pop();
  46. push(a / b);
  47. break;
  48. case 5: // データ入力
  49. scanf("%lf", &data);
  50. printf("data:%f\n", data);
  51. push(data);
  52. break;
  53. default:
  54. break;
  55. }
  56. }
  57. answer();
  58. return 0;
  59. }
  60.  
  61. /* (2) push関数: データをスタックに格納する */
  62. void push(double value)
  63. {
  64. if (!isFull()) {
  65. stack[sp] = value;
  66. sp++;
  67. }
  68. }
  69.  
  70. /* (3) pop関数: データをスタックから取り出す */
  71. double pop(void)
  72. {
  73. if (!isEmpty()) {
  74. sp--;
  75. return stack[sp];
  76. }
  77. return 0.0;
  78. }
  79.  
  80. /* (4) isFull関数: スタックが満杯かどうか判定 */
  81. int isFull(void)
  82. {
  83. if (sp >= SIZE) {
  84. return 1;
  85. } else {
  86. return 0;
  87. }
  88. }
  89.  
  90. /* (5) isEmpty関数: スタックが空かどうか判定 */
  91. int isEmpty(void)
  92. {
  93. if (sp <= 0) {
  94. return 1;
  95. } else {
  96. return 0;
  97. }
  98. }
  99.  
  100. /* (6) answer関数: 計算結果を表示する */
  101. void answer(void)
  102. {
  103. printf("answer:%f\n", pop());
  104. }
  105.  
  106. /* (7) reset関数: スタックを空にする */
  107. void reset(void)
  108. {
  109. sp = 0;
  110. }
  111.  
  112.  
Success #stdin #stdout 0s 5320KB
stdin
5
1
5
2
1
9
stdout
data:1.000000
data:2.000000
answer:3.000000