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