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