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

answer:3.000000