fork(1) 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.  
  18. while(1) {
  19. int n;
  20. double x, y;
  21. scanf("%d", &n);
  22.  
  23. switch(n) {
  24. case 1:
  25. y = pop();
  26. x = pop();
  27. push(x + y);
  28. break;
  29. case 2: // 引き算
  30. y = pop();
  31. x = pop();
  32. push(x - y);
  33. break;
  34. case 3: // 掛け算
  35. y = pop();
  36. x = pop();
  37. push(x * y);
  38. break;
  39. case 4: // 割り算
  40. y = pop();
  41. x = pop();
  42. push(x / y);
  43. break;
  44. case 5: // データ入力
  45. scanf("%lf", &x);
  46. push(x);
  47. break;
  48. case 9: // 結果表示
  49. answer();
  50. return 0;
  51. }
  52. }
  53. }
  54.  
  55. void push(double value)
  56. {
  57. if(isFull()) {
  58. printf("Error: stack overflow\n");
  59. } else {
  60. stack[sp++] = value;
  61. printf("data:%f\n", value);
  62. }
  63. }
  64.  
  65. double pop(void)
  66. {
  67. if(isEmpty()) {
  68. printf("Error: stack underflow\n");
  69. return 0.0;
  70. } else {
  71. return stack[--sp];
  72. }
  73. }
  74.  
  75. int isFull(void)
  76. {
  77. return sp >= SIZE;
  78. }
  79.  
  80. int isEmpty(void)
  81. {
  82. return sp <= 0;
  83. }
  84.  
  85. void answer(void)
  86. {
  87. if(!isEmpty()) {
  88. printf("answer:%f\n", pop());
  89. }
  90. }
  91.  
  92. void reset(void)
  93. {
  94. sp = 0;
  95. }
  96.  
Success #stdin #stdout 0s 5320KB
stdin
5 6 5 2 8 9
stdout
data:6.000000
data:2.000000
answer:2.000000