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