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