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