fork download
  1.  
  2. #include <stdio.h>
  3.  
  4. #define SIZE 10
  5.  
  6. double stack[SIZE];
  7. int sp;
  8.  
  9. void push(double value);
  10. double pop(void);
  11. int isFull(void);
  12. int isEmpty(void);
  13. void reset(void);
  14. void answer(void);
  15.  
  16. int main(void)
  17. {
  18. int resp;
  19. double data, a, b;
  20.  
  21. reset();
  22.  
  23. while(1){
  24.  
  25.  
  26. int result = scanf("%d", &resp);
  27.  
  28. if(result == EOF){
  29. break;
  30. }
  31.  
  32. if(result != 1){
  33. printf("Invalid input\n");
  34. break;
  35. }
  36.  
  37. if(resp == 0) break;
  38.  
  39. switch(resp){
  40.  
  41. case 1:
  42. b = pop();
  43. a = pop();
  44. push(a + b);
  45. break;
  46.  
  47. case 2:
  48. b = pop();
  49. a = pop();
  50. push(a - b);
  51. break;
  52.  
  53. case 3:
  54. b = pop();
  55. a = pop();
  56. push(a * b);
  57. break;
  58.  
  59. case 4:
  60. b = pop();
  61. a = pop();
  62.  
  63. if(b == 0){
  64. printf("Cannot divide by zero\n");
  65. push(a);
  66. push(b);
  67. break;
  68. }
  69.  
  70. push(a / b);
  71. break;
  72.  
  73. case 5:
  74. printf("insert data:");
  75. if(scanf("%lf", &data) != 1){
  76. printf("Invalid input\n");
  77. return 1;
  78. }
  79.  
  80. push(data);
  81. break;
  82.  
  83. case 9:
  84. answer();
  85. break;
  86.  
  87. default:
  88. printf("Invalid command\n");
  89. break;
  90. }
  91. }
  92.  
  93. return 0;
  94. }
  95.  
  96. void push(double value)
  97. {
  98. if(isFull()){
  99. printf("stack is full\n");
  100. }else{
  101. stack[sp++] = value;
  102. }
  103. }
  104.  
  105. double pop(void)
  106. {
  107. if(isEmpty()){
  108. printf("stack is empty\n");
  109. return 0;
  110. }else{
  111. return stack[--sp];
  112. }
  113. }
  114.  
  115. int isFull(void)
  116. {
  117. if(sp >= SIZE){
  118. return 1;
  119. }else{
  120. return 0;
  121. }
  122. }
  123.  
  124. int isEmpty(void)
  125. {
  126. if(sp <= 0){
  127. return 1;
  128. }else{
  129. return 0;
  130. }
  131. }
  132.  
  133. void answer(void)
  134. {
  135. double sum = 0;
  136. int i;
  137.  
  138. for(i = 0; i < sp; i++){
  139. printf("Data %d: %g\n", i + 1, stack[i]);
  140. sum += stack[i];
  141. }
  142.  
  143. printf("Answer %g\n", sum);
  144. }
  145.  
  146. void reset(void)
  147. {
  148. sp = 0;
  149. }
  150.  
Success #stdin #stdout 0s 5320KB
stdin
5
1
5
2
1
9
stdout
insert data:insert data:Data 1: 3
Answer 3