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