fork download
  1. #include <stdio.h>
  2. #define SIZE 10
  3. double stack[SIZE];
  4. int sp;
  5.  
  6. void push(double value);
  7. double pop(void);
  8. int isFull(void);
  9. int isEmpty(void);
  10. void answer(void);
  11. void reset(void);
  12.  
  13.  
  14. int main(void) {
  15.  
  16. reset();
  17.  
  18. while(1){
  19. double a, b, val;
  20. int kazu;
  21.  
  22. scanf("%d", &kazu);
  23. if (kazu == 9) {
  24. break;
  25. }
  26.  
  27. switch (kazu) {
  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", &val);
  50. push(val);
  51. printf("data:%f\n", val);
  52. break;
  53. }
  54. }
  55.  
  56. answer();
  57.  
  58. return 0;
  59. }
  60. void push(double value)
  61. {
  62. if (!isFull()) {
  63. stack[sp++] = value;
  64. }
  65. }
  66. double pop(void)
  67. {
  68. if (!isEmpty()) {
  69. return stack[--sp];
  70. }
  71. return 0;
  72. }
  73. int isFull(void)
  74. {
  75. if (sp>=SIZE)
  76. printf("スタックが満杯です\n");
  77. }
  78. int isEmpty(void)
  79. {
  80. if (sp<=0)
  81. printf("スタックが空です\n");
  82. }
  83. void answer(void)
  84. {
  85. if (sp > 0) {
  86. printf("answer:%f\n", stack[sp - 1]);
  87. }
  88. }
  89. void reset(void)
  90. {
  91. sp=0;
  92. }
  93.  
Success #stdin #stdout 0s 5284KB
stdin
5
1
5
2
1
9
stdout
data:1.000000
data:2.000000
answer:3.000000