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