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. reset();
  16.  
  17. while (1) {
  18. int op;
  19. scanf("%d",&op);
  20. switch(op){
  21. case 1: {
  22. double a = pop();
  23. double b = pop();
  24. push(a + b);
  25. break;
  26. }
  27. case 2: {
  28. double a = pop();
  29. double b = pop();
  30. push(b - a);
  31. break;
  32. }
  33. case 3: {
  34. double a = pop();
  35. double b = pop();
  36. push(b * a);
  37. break;
  38. }
  39. case 4: {
  40. double a = pop();
  41. double b = pop();
  42. push(b / a);
  43. break;
  44. }
  45. case 5: {
  46. double d;
  47. scanf("%lf",&d);
  48. push(d);
  49. printf("data:%f\n",d);
  50. break;
  51. }
  52. case 9:
  53. break;
  54. default:
  55. printf("不正な入力です\n");
  56. }
  57.  
  58. if(op==9) break;
  59. }
  60.  
  61. answer();
  62. return 0;
  63. }
  64.  
  65. void push(double value) {
  66. if (sp < SIZE) {
  67. stack[sp++] = value;
  68. } else {
  69. printf("スタックが満杯です。\n");
  70. }
  71. }
  72.  
  73. double pop(void) {
  74. if (sp > 0) {
  75. return stack[--sp];
  76. } else {
  77. printf("スタックが空です。\n");
  78. return 0.0;
  79. }
  80. }
  81.  
  82. int isFull(void) {
  83. return sp == SIZE;
  84. }
  85.  
  86. int isEmpty(void) {
  87. return sp == 0;
  88. }
  89.  
  90. void answer(void) {
  91. if (!isEmpty()) {
  92. printf("計算結果: %f\n", stack[sp - 1]);
  93. } else {
  94. printf("スタックに値がありません。\n");
  95. }
  96. }
  97.  
  98. void reset(void) {
  99. sp = 0;
  100. }
Success #stdin #stdout 0.01s 5316KB
stdin
5 1
5 2
1
9
stdout
data:1.000000
data:2.000000
計算結果: 3.000000