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

answer:3.000000