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