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. int command;
  17. double a, b;
  18.  
  19. reset();
  20.  
  21. while(1){
  22. scanf("%d", &command);
  23.  
  24. switch(command){
  25. case 1:
  26. b = pop();
  27. a = pop();
  28. push(a + b);
  29. break;
  30.  
  31. case 2:
  32. b = pop();
  33. a = pop();
  34. push(a - b);
  35. break;
  36.  
  37. case 3:
  38. b = pop();
  39. a = pop();
  40. push(a * b);
  41. break;
  42.  
  43. case 4:
  44. b = pop();
  45. a = pop();
  46. push(a / b);
  47. break;
  48.  
  49. case 5:
  50. scanf("%lf", &a);
  51. push(a);
  52. break;
  53.  
  54. case 9:
  55. break;
  56. }
  57.  
  58. if(command == 9)
  59. break;
  60. }
  61.  
  62. answer();
  63.  
  64. return 0;
  65. }
  66.  
  67. void push(double value)
  68. {
  69. if(!isFull()){
  70. stack[sp] = value;
  71. sp++;
  72. printf("data:%f\n", value);
  73. }
  74. }
  75.  
  76. double pop(void)
  77. {
  78. double value;
  79.  
  80. if(!isEmpty()){
  81. sp--;
  82. value = stack[sp];
  83. return value;
  84. }
  85.  
  86. return 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:%f\n", stack[sp - 1]);
  103. }
  104. }
  105.  
  106. void reset(void)
  107. {
  108. sp = 0;
  109. }
Success #stdin #stdout 0s 5324KB
stdin
5
1
2
5
1
9

stdout
data:1.000000
data:-1.000000
data:1.000000
answer:1.000000