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