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