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