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

3.000000