fork download
  1. #include<stdio.h>
  2. #define SIZE 10
  3. /*AIログ
  4. それぞれの関数の役割の確認
  5. 理解したこと:15~21のコメントの内容
  6. while文の中での処理の流れの確認
  7. 理解したこと:switch文の型および、中の処理の流れ
  8. 9を選んだ時の終了の仕方
  9. 理解したこと:swhich文の中で、9を選んだ時にcaseでは表示のみの処理をさせ、それから外に出て、if文でhugashi==9の時にbreakさせることで、while文を終了させることができる
  10. */
  11.  
  12. double stack[SIZE];
  13. int sp;
  14. int i=0;
  15. double a,b;
  16. double j;
  17.  
  18. void push(double value);//スタックにデータを格納する
  19. double pop(void);//スタックからデータを取り出す
  20.  
  21. int isFull(void);//スタックが満杯かどうかを判定する
  22. int isEmpty(void);//スタックが空かどうかを判定する
  23. void answer(void);//計算結果の表示
  24. void reset(void);//スタックの中身をすべて空にする(初期化する)
  25.  
  26. int main(void){
  27. reset();
  28. printf("逆ポーランドによる演算\n");
  29.  
  30.  
  31. while(1){
  32. scanf("%d", &i);
  33.  
  34. switch(i)
  35. {
  36. case 1:
  37. b=pop();
  38. a=pop();
  39. push(b+a);
  40. break;
  41.  
  42. case 2:
  43. a=pop();
  44. b=pop();
  45. push(b-a);
  46. break;
  47.  
  48. case 3:
  49. a=pop();
  50. b=pop();
  51. push(b*a);
  52. break;
  53.  
  54. case 4:
  55. a=pop();
  56. b=pop();
  57. push(b/a);
  58. break;
  59.  
  60. case 5:
  61. printf("データを入力してください:");
  62. scanf("%lf", &j);
  63. push(j);
  64. break;
  65.  
  66. case 9:
  67. answer();
  68. break;
  69.  
  70. default:
  71. printf("無効な入力です\n");
  72. }
  73. if(i==9)
  74. break;
  75. }
  76.  
  77. return 0;
  78. }
  79.  
  80. void push(double value)
  81. {
  82. if(isFull()){
  83. printf("スタックが満杯です\n");
  84. }
  85. else{
  86. stack[sp] = value;
  87. sp++;
  88. }
  89. }
  90.  
  91.  
  92. double pop(void)
  93. {
  94. if(sp<=0){
  95. printf("スタックが空です\n");
  96. return 0;
  97. }
  98. else{
  99. sp--;
  100. return stack[sp];
  101. }
  102.  
  103. }
  104.  
  105.  
  106. int isFull(void)
  107. {
  108. if(sp>=SIZE){
  109. return 1;
  110. }else{
  111. return 0;
  112. }
  113.  
  114. }
  115.  
  116.  
  117. int isEmpty(void)
  118. {
  119. if(sp==0){
  120. return 1;
  121. }
  122. else{
  123. return 0;
  124. }
  125. }
  126.  
  127.  
  128. void answer(void)
  129. {
  130. double ans;
  131. ans = pop();
  132. printf("answer:%lfです\n", ans);
  133. }
  134.  
  135.  
  136. void reset(void)
  137. {
  138. sp=0;
  139. stack[0] = 0;
  140. }
Success #stdin #stdout 0s 5280KB
stdin
5
1
5
2
1
9
stdout
逆ポーランドによる演算
データを入力してください:データを入力してください:answer:3.000000です