fork download
  1. #include <stdio.h>
  2. #define SIZE 10
  3. double stack[SIZE];
  4. int sp=0;
  5. void push(double value);
  6. double pop(void);
  7. int isFull(void);
  8. int isEmpty(void);
  9. void answer(void);
  10. void reset(void);
  11.  
  12. int main(void) {
  13. reset();
  14. while(1) {
  15. int resp,data;
  16. double a, b;
  17. scanf("%d",&resp);
  18. if (!resp)
  19. break;
  20.  
  21. switch(resp) {
  22. case 1:
  23. a= pop();
  24. b= pop();
  25. push(a + b);
  26. break;
  27.  
  28. case 2:
  29. a= pop();
  30. b= pop();
  31. push(a - b);
  32. break;
  33.  
  34. case 3:
  35. a= pop();
  36. b= pop();
  37. push(a*b);
  38. break;
  39.  
  40. case 4:
  41. a= pop();
  42. b= pop();
  43. if(b != 0)
  44. push(a/b);
  45. else
  46. printf("無効な値です\n");
  47. break;
  48.  
  49. case 5:
  50. scanf("%d",&data);
  51. push(data);
  52. break;
  53.  
  54. case 9:
  55. answer();
  56. return 0;
  57. }
  58. }
  59. }
  60.  
  61. void push(double x){
  62. if (isFull()){
  63. printf("スタックが満杯です\n");
  64. }
  65. else {
  66. stack[sp++] = x;
  67. }
  68. }
  69.  
  70. double pop(void){
  71. if (isEmpty()){
  72. printf("スタックが空です\n");
  73. return 0;
  74. }
  75. else{
  76. return stack[--sp];
  77. }
  78. }
  79. int isFull(void){
  80. return sp >= SIZE;
  81. }
  82. int isEmpty(void){
  83. return sp == 0;
  84. }
  85. void answer(void) {
  86. if (!isEmpty()){
  87. printf("答えは %fです\n", stack[sp-1]);
  88. }
  89. else{
  90. printf("スタックは空です\n");
  91. }
  92. }
  93.  
  94. void reset(void){
  95. sp = 0;
  96. }
Success #stdin #stdout 0s 5276KB
stdin
5
1
5
2
1
9
stdout
答えは 3.000000です