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