fork download
  1. #include <stdio.h>
  2.  
  3. #define SIZE 10
  4. double stack[SIZE];
  5. double a,b;
  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. reset();
  18. int resp,data;
  19. printf("1:足し算 2:引き算 3:かけ算 4:割り算 5:データ入力 9:計算結果 \n");
  20. while(1){
  21. scanf("%d",&resp);
  22.  
  23. switch(resp){
  24. case 1:a=pop(); b=pop(); push(a+b);
  25. break;
  26. case 2:a=pop(); b=pop(); push(b-a);
  27. break;
  28. case 3:a=pop(); b=pop(); push(a*b);
  29. break;
  30. case 4:a=pop(); b=pop();
  31. if(a==0){
  32. break;
  33. }else{
  34. push(b/a);
  35. break;
  36. }
  37. case 5:scanf("%d",&data); printf("data:%d\n",data); push(data);
  38. break;
  39. case 9:answer();
  40. return 0;
  41. }
  42. }
  43. }
  44.  
  45.  
  46.  
  47. void push(double value)
  48. {
  49. if(isFull()){
  50. printf("スタックが満杯で入りませんでした");
  51. }else{
  52. stack[sp++]=value;
  53. }
  54. }
  55.  
  56. double pop(void)
  57. {
  58. if(isEmpty()){
  59. printf("スタックが空で取り出せませんでした");
  60. return 0;
  61. }else{
  62. return stack[--sp];
  63. }
  64. }
  65.  
  66. int isFull(void)
  67. {
  68. if(sp>SIZE){
  69. return 1;
  70. }else{
  71. return 0;
  72. }
  73. }
  74.  
  75. int isEmpty(void)
  76. {
  77. if(sp<=0){
  78. return 1;
  79. }else{
  80. return 0;
  81. }
  82. }
  83.  
  84. void answer(void)
  85. {
  86. printf("answer:%f",stack[sp-1]);
  87. }
  88.  
  89. void reset(void)
  90. {
  91. sp=0;
  92. }
Success #stdin #stdout 0s 5284KB
stdin
5 1 5 2 1 5 2 5 4 1 4 9
stdout
1:足し算 2:引き算 3:かけ算 4:割り算 5:データ入力 9:計算結果 
data:1
data:2
data:2
data:4
answer:0.500000