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