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