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 menu;
  19. double a,b;
  20.  
  21. if(scanf("%d",&menu)==EOF){
  22. break;
  23. }
  24.  
  25. if (menu==9){
  26. break;
  27. }
  28.  
  29. switch(menu){
  30. case 5:
  31. scanf("%lf",&a);
  32. push(a);
  33. printf("data:%lf\n",a);
  34. break;
  35.  
  36. case 1:
  37. b=pop(); a=pop();
  38. push(a+b);
  39. break;
  40.  
  41. case 2:
  42. b=pop(); a=pop();
  43. push(a-b);
  44. break;
  45.  
  46. case 3:
  47. b=pop(); a=pop();
  48. push(a*b);
  49. break;
  50.  
  51. case 4:
  52. b=pop(); a=pop();
  53. if(b!=0.0){
  54. push(a/b);
  55. }else{
  56. printf("0では割れません");
  57. }
  58. break;
  59.  
  60. default:
  61. break;
  62.  
  63.  
  64. }
  65. }
  66.  
  67.  
  68. answer();
  69.  
  70. return 0;
  71. }
  72.  
  73. void push(double value)
  74. {
  75. if(isFull()){
  76. printf("スタックが満杯で入りませんでした\n");
  77. return;
  78. }
  79. stack[sp]=value;
  80. sp++;
  81.  
  82. }
  83.  
  84. double pop(void)
  85. {
  86. if(isEmpty()){
  87. printf("スタックが空で取り出せませんでした\n");
  88. return 0.0;
  89. }
  90. sp--;
  91. return stack[sp];
  92. }
  93.  
  94. int isFull(void)
  95. {
  96. if(sp>=SIZE){
  97. return 1;
  98. } else return 0;
  99. }
  100.  
  101. int isEmpty(void)
  102. {
  103. if(sp==0){
  104. return 1;
  105. } else return 0;
  106. }
  107.  
  108. void answer(void)
  109. {
  110. if(isEmpty()){
  111. printf("表示する結果がありません\n");
  112. return;
  113. }
  114. printf("answer:%lf\n",stack[sp-1]);
  115. }
  116.  
  117. void reset(void)
  118. {
  119. sp=0;
  120. }
  121.  
  122. // your code goes here
  123.  
Success #stdin #stdout 0s 5288KB
stdin
5
1
5
3
1
9
stdout
data:1.000000
data:3.000000
answer:4.000000