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