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