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