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