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