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. sp=0;
  17. int resp;
  18. double a;
  19. double data1,data2;
  20. printf("足し算:1,引き算:2,掛け算:3,割り算:4,入力:5,結果表示:9\n");
  21.  
  22. while(1)
  23. {
  24. scanf("%d",&resp);
  25. if(!resp) break;
  26. switch(resp)
  27. {
  28. case 1:
  29. {
  30. data1=pop();
  31. data2=pop();
  32. push(data1+data2);
  33. break;
  34. }
  35. case 2:
  36. {
  37. data1=pop();
  38. data2=pop();
  39. push(data2-data1);
  40. break;
  41. }
  42. case 3:
  43. {
  44. data1=pop();
  45. data2=pop();
  46. push(data1*data2);
  47. break;
  48. }
  49. case 4:
  50. {
  51. data1=pop();
  52. data2=pop();
  53. push(data2/data1);
  54. break;
  55. }
  56. case 5:
  57. scanf("%lf",&a);
  58. push(a);
  59. break;
  60. case 9:
  61. {
  62. answer();
  63. break;
  64. }
  65. }
  66.  
  67. }
  68.  
  69. return 0;
  70. }
  71.  
  72. void push(double value)
  73. {
  74. if(isFull())
  75. {
  76. printf("満杯で入りませんでした。");
  77. return;
  78. }
  79. else
  80. {
  81. stack[sp++]=value;
  82. }
  83. }
  84.  
  85. double pop(void)
  86. {
  87. if(isEmpty())
  88. return 0;
  89. else
  90. return stack[--sp];
  91. }
  92.  
  93. int isFull(void)
  94. {
  95. //1だったら満杯、0だったら満杯じゃない
  96. if(sp>=SIZE)
  97. return 1;
  98. else
  99. return 0;
  100. }
  101.  
  102. int isEmpty(void)
  103. {
  104. //1だったら空、0だったら空じゃない
  105. if(sp<=0)
  106. return 1;
  107. else
  108. return 0;
  109. }
  110. void answer(void)
  111. {
  112. if(!isEmpty())
  113. printf("計算結果:%lf\n",stack[0]);
  114. else
  115. printf("スタックが空です。\n");
  116. }
  117. void reset(void)
  118. {
  119. sp=0;
  120. }
  121.  
Success #stdin #stdout 0s 5320KB
stdin
5
1
5
2
9
0
stdout
足し算:1,引き算:2,掛け算:3,割り算:4,入力:5,結果表示:9
計算結果:1.000000