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