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. reset();
  17.  
  18. while(1){
  19. int select;
  20. double d, val1, val2;
  21.  
  22. scanf("%d", &select);
  23. switch(select){
  24. case 1:
  25. val2 = pop();
  26. val1 = pop();
  27. push(val1 + val2);
  28. break;
  29. case 2:
  30. val2 = pop();
  31. val1 = pop();
  32. push(val1 - val2);
  33. break;
  34. case 3:
  35. val2 = pop();
  36. val1 = pop();
  37. push(val1 * val2);
  38. break;
  39. case 4:
  40. val2 = pop();
  41. val1 = pop();
  42. push(val1 / val2);
  43. break;
  44. case 5:
  45. scanf("%lf", &d);
  46. push(d);
  47. printf("data:%f\n", d);
  48. break;
  49. case 9:
  50. goto end_loop;
  51. default:
  52. break;
  53. }
  54. }
  55. end_loop:
  56.  
  57. answer();
  58. return 0;
  59. }
  60.  
  61. void push(double value)
  62. {
  63. if (isFull()) {
  64. return;
  65. }
  66. stack[sp] = value;
  67. sp++;
  68. }
  69.  
  70. double pop(void)
  71. {
  72. if (isEmpty()) {
  73. return 0.0;
  74. }
  75. sp--;
  76. return stack[sp];
  77. }
  78.  
  79. int isFull(void)
  80. {
  81. if (sp >= SIZE) {
  82. return 1;
  83. }
  84. return 0;
  85. }
  86.  
  87. int isEmpty(void)
  88. {
  89. if (sp <= 0) {
  90. return 1;
  91. }
  92. return 0;
  93. }
  94.  
  95. void answer(void)
  96. {
  97. printf("answer:%f\n", stack[0]);
  98. }
  99.  
  100. void reset(void)
  101. {
  102. sp = 0;
  103. }
Success #stdin #stdout 0s 5316KB
stdin
5
1
5
2
1
9
stdout
data:1.000000
data:2.000000
answer:3.000000