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