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. sp=0;
  17.  
  18. reset();
  19.  
  20. while(1){
  21. int command;
  22. double basyo1,basyo2,hako;
  23. scanf("%d",&command);
  24. switch(command){
  25. case 1:
  26. basyo1=pop();
  27. basyo2=pop();
  28. push(basyo2+basyo1);
  29. break;
  30. case 2:
  31. basyo1=pop();
  32. basyo2=pop();
  33. push(basyo2-basyo1);
  34. break;
  35. case 3:
  36. basyo1=pop();
  37. basyo2=pop();
  38. push(basyo2*basyo1);
  39. break;
  40. case 4:
  41. basyo1=pop();
  42. basyo2=pop();
  43. push(basyo2/basyo1);
  44. break;
  45.  
  46. case 5:
  47. scanf("%lf",&hako);
  48. push(hako);
  49. break;
  50.  
  51. case 9:
  52. answer();
  53. return 0;
  54.  
  55. }
  56.  
  57. }
  58. }
  59. void push(double value)//スタックを追加する関数
  60. {
  61. if(sp>=SIZE){
  62. printf("スタックが満杯で入りませんでした。\n");
  63. }else{
  64. stack[sp++]=value;
  65. }
  66. }
  67. double pop(void)//データを抽出する関数
  68. {
  69. if(sp<=0){
  70. printf("スタックが空で取り出せませんでした。\n");
  71. return 0;
  72. }else{
  73. return stack[--sp];
  74. }
  75. }
  76.  
  77. int isFull(void)//スタックが満杯か判定
  78. {
  79. if(sp>=SIZE){
  80. return 1;
  81. }else{
  82. return 0;
  83. }
  84. }
  85.  
  86.  
  87. int isEmpty(void)//スタックが空か判定
  88. {
  89. if(sp<=0){
  90. return 1;
  91. }else{
  92. return 0;
  93. }
  94. }
  95.  
  96. void answer(void)//計算結果
  97. {
  98. if(sp>0){
  99. printf("answer:%lf\n",stack[sp-1]);
  100. }else{
  101. return;
  102. }
  103. }
  104.  
  105. void reset(void)//スタックの中身をリセット
  106. {
  107. sp=0;
  108. }
  109.  
Success #stdin #stdout 0s 5320KB
stdin
5 10 5 20 1 9
stdout
answer:30.000000