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