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