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