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