fork download
  1. #include<stdio.h>
  2.  
  3. #define SIZE 10
  4. double stack[SIZE];
  5. int sp; // スタックポインタ
  6.  
  7. // 関数プロトタイプ
  8. void push(double value);
  9. double pop(void);
  10. int isFull(void);
  11. int isEmpty(void);
  12. void answer(void);
  13. void reset(void);
  14.  
  15. int main(void)
  16. {
  17. reset();
  18. double val1, val2;
  19. int choice;
  20.  
  21. while(1){
  22. scanf("%d", &choice); // 選択肢の入力を受け取る
  23.  
  24. switch(choice) {
  25. case 1: // 足し算
  26. if (!isEmpty()) {
  27. val2 = pop();
  28. val1 = pop();
  29. push(val1 + val2);
  30. }
  31. break;
  32. case 2: // 引き算
  33. if (!isEmpty()) {
  34. val2 = pop();
  35. val1 = pop();
  36. push(val1 - val2);
  37. }
  38. break;
  39. case 3: // 掛け算
  40. if (!isEmpty()) {
  41. val2 = pop();
  42. val1 = pop();
  43. push(val1 * val2);
  44. }
  45. break;
  46. case 4: // 割り算
  47. if (!isEmpty()) {
  48. val2 = pop();
  49. val1 = pop();
  50. if (val2 != 0) {
  51. push(val1 / val2);
  52. }
  53. }
  54. break;
  55. case 5: // データ入力
  56. if (!isFull()) {
  57. scanf("%lf", &val1);
  58. push(val1);
  59. printf("data: %.6lf\n", val1); // dataの表示
  60. }
  61. break;
  62. case 9: // 結果表示
  63. answer();
  64. return 0;
  65. default:
  66. // 不正な選択肢は無視
  67. break;
  68. }
  69. }
  70.  
  71. return 0;
  72. }
  73.  
  74. void push(double value)
  75. {
  76. if (!isFull()) {
  77. stack[sp++] = value;
  78. }
  79. }
  80.  
  81. double pop(void)
  82. {
  83. if (!isEmpty()) {
  84. return stack[--sp];
  85. }
  86. return 0; // エラー時は0を返す
  87. }
  88.  
  89. int isFull(void)
  90. {
  91. return sp >= SIZE;
  92. }
  93.  
  94. int isEmpty(void)
  95. {
  96. return sp == 0;
  97. }
  98.  
  99. void answer(void)
  100. {
  101. if (!isEmpty()) {
  102. printf("answer: %.6lf\n", stack[sp-1]);
  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