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