fork download
  1. #include <stdio.h>
  2. #define SIZE 10
  3. double stack[SIZE];
  4. int sp;
  5.  
  6. void push(double value);
  7. double pop(void);
  8. int isFull(void);
  9. int isEmpty(void);
  10. void answer(void);
  11. void reset(void);
  12.  
  13. int main(void)
  14. {
  15. reset();
  16.  
  17. int resp;
  18. double data, a, b;
  19.  
  20. while(1){
  21.  
  22. scanf("%d", &resp);
  23.  
  24. if(resp == 9) break;
  25.  
  26. switch(resp){
  27. case 1:
  28. b = pop();
  29. a = pop();
  30. push(a + b);
  31. break;
  32.  
  33. case 2:
  34. b = pop();
  35. a = pop();
  36. push(a - b);
  37. break;
  38.  
  39. case 3:
  40. b = pop();
  41. a = pop();
  42. push(a * b);
  43. break;
  44.  
  45. case 4:
  46. b = pop();
  47. a = pop();
  48. push(a / b);
  49. break;
  50.  
  51. case 5:
  52. scanf("lf", &data);
  53. printf("data%f\n", data);
  54. push(data);
  55. break;
  56. }
  57. }
  58.  
  59. answer();
  60. return 0;
  61. }
  62.  
  63. void push(double value)
  64. {
  65. if(isFull()){
  66. printf("スタックは満杯です\n");
  67. }else{
  68. stack[sp++] = value;
  69. }
  70. }
  71.  
  72. double pop(void)
  73. {
  74. double value;
  75.  
  76. if(isEmpty()){
  77. printf("スタックは空です\n");
  78. return 0;
  79. }else{
  80. value = stack[--sp];
  81. return value;
  82. }
  83. }
  84.  
  85. int isFull(void)
  86. {
  87. if(sp == SIZE){
  88. return 1;
  89. }else{
  90. return 0;
  91. }
  92. }
  93.  
  94. int isEmpty(void)
  95. {
  96. if(sp == 0){
  97. return 1;
  98. }else{
  99. return 0;
  100. }
  101. }
  102.  
  103. void answer(void)
  104. {
  105. if(isEmpty()){
  106. printf("計算結果がありません\n");
  107. }else{
  108. printf("\nanswer:%f\n", stack[sp-1]);
  109. }
  110. }
  111. void reset(void)
  112. {
  113. sp = 0;
  114. }
Success #stdin #stdout 0s 5320KB
stdin
5
1
5
2
1
9
stdout
data0.000000
スタックは空です
data0.000000
スタックは空です

answer:0.000000