fork download
  1. #include <stdio.h>
  2.  
  3. #define SIZE 10
  4. int stack[SIZE];
  5. int sp;
  6.  
  7. void push(double value);
  8. double pop(void);
  9.  
  10. int isFull(void);
  11. int isEmpty(void);
  12. void answer(void);
  13. void reset(void);
  14.  
  15. int main(void){
  16. reset();
  17. while(1){
  18. int resp,data;
  19. double cal1,cal2;
  20. scanf("%d", &resp);
  21. if(resp == 9)
  22.  
  23. break;
  24. switch(resp){
  25. case 1: cal1 = pop();
  26. cal2 = pop();
  27. push(cal2 + cal1);
  28. break;
  29. case 2: cal1 = pop();
  30. cal2 = pop();
  31. push(cal2 - cal1);
  32. break;
  33. case 3: cal1 = pop();
  34. cal2 = pop();
  35. push(cal2 * cal1);
  36. break;
  37. case 4: cal1 = pop();
  38. cal2 = pop();
  39. push(cal2 / cal1);
  40. break;
  41. case 5: scanf("%d", &data);
  42. printf("data:%d\n", data);
  43. push(data);
  44. break;
  45. }
  46. }
  47.  
  48. answer();
  49. return 0;
  50. }
  51.  
  52. void push(double value){
  53. if(isFull()==1){
  54. printf("スタックが満杯で入りませんでした\n");
  55. }else{
  56. stack[sp++] = value;
  57. }
  58. }
  59. double pop(void){
  60. if(isEmpty()==1){
  61. printf("スタックが空で取り出せませんでした\n");
  62. return 0;
  63. }else{
  64. return stack[--sp];
  65. }
  66. }
  67. int isFull(void){
  68. if(sp >= SIZE)return 1;
  69. else return 0;
  70. }
  71. int isEmpty(void){
  72. if(sp <= 0)return 1;
  73. else return 0;
  74. }
  75. void answer(void){
  76. printf("answer:%f", pop());
  77. }
  78. void reset(void){
  79. sp = 0;
  80. }
Success #stdin #stdout 0s 5284KB
stdin
5 1 5 2 1 9
stdout
data:1
data:2
answer:3.000000