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