fork download
  1. #include <stdio.h>
  2.  
  3. #define SIZE 10
  4.  
  5. double stack[SIZE];
  6. int sp;
  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. int resp;
  18. double data, cal1, cal2;
  19.  
  20. reset();
  21.  
  22. while(1){
  23.  
  24.  
  25. scanf("%d", &resp);
  26.  
  27. if(resp==9){
  28.  
  29. break;
  30. }
  31.  
  32. switch(resp){
  33.  
  34. case 1:
  35. cal1 = pop();
  36. cal2 = pop();
  37. push(cal2 + cal1);
  38. break;
  39.  
  40. case 2:
  41. cal1 = pop();
  42. cal2 = pop();
  43. push(cal2 - cal1);
  44. break;
  45.  
  46. case 3:
  47. cal1 = pop();
  48. cal2 = pop();
  49. push(cal2 * cal1);
  50. break;
  51.  
  52. case 4:
  53. cal1 = pop();
  54. cal2 = pop();
  55.  
  56. if(cal1 == 0){
  57. printf("0では割れません\n");
  58. push(cal2);
  59. push(cal1);
  60. }
  61. else{
  62. push(cal2 / cal1);
  63. }
  64. break;
  65.  
  66. case 5:
  67. printf("data : ");
  68. scanf("%lf", &data);
  69. push(data);
  70. break;
  71.  
  72. case 9:
  73. reset();
  74. break;
  75.  
  76. default:
  77. printf("入力エラー\n");
  78. }
  79.  
  80. printf("sp=%d\n", sp);
  81. }
  82.  
  83. answer();
  84.  
  85. return 0;
  86. }
  87.  
  88. void push(double value)
  89. {
  90. if(isFull()){
  91. printf("スタックが満杯で入りませんでした\n");
  92. }
  93. else{
  94. stack[sp++] = value;
  95. }
  96. }
  97.  
  98. double pop(void)
  99. {
  100. if(isEmpty()){
  101. printf("スタックが空で取り出せませんでした\n");
  102. return 0.0;
  103. }
  104. else{
  105. return stack[--sp];
  106. }
  107. }
  108.  
  109. int isFull(void)
  110. {
  111. if(sp >= SIZE){
  112. return 1;
  113. }
  114. else{
  115. return 0;
  116. }
  117. }
  118.  
  119. int isEmpty(void)
  120. {
  121. if(sp <= 0){
  122. return 1;
  123. }
  124. else{
  125. return 0;
  126. }
  127. }
  128.  
  129. void answer(void)
  130. {
  131. if(sp > 0){
  132. printf("data: = %.6f", stack[sp - 1]);
  133. }
  134. else{
  135. printf("\nスタックが空です\n");
  136. }
  137. }
  138.  
  139. void reset(void)
  140. {
  141. sp = 0;
  142. }
Success #stdin #stdout 0s 5352KB
stdin
5
1
5
2
1
9
stdout
data : sp=1
data : sp=2
sp=1
data: = 3.000000