fork download
  1. #include <stdio.h>
  2. #define SIZE 10
  3. double stack[SIZE];
  4. int sp;
  5. void push(double value);
  6. double pop(void);
  7. int isFull(void);
  8. int isEmpty(void);
  9. void answer(void);
  10. void reset(void);
  11. int flag=0;
  12. int main(void)
  13. { reset();
  14. while (1)
  15. { int resp;
  16. double data;
  17. scanf("%d",&resp);
  18.  
  19. if (resp==0) break;
  20. switch (resp)
  21. { case 1:
  22. if (isEmpty()) { printf("エラー: スタックが空です。\n");}
  23. else { double b=pop();
  24. if (isEmpty()) { printf("エラー: スタックに値が不足しています。\n"); push(b); }
  25. else { double a=pop(); push(a+b); } } break;
  26.  
  27. case 2: if (isEmpty()) { printf("エラー: スタックが空です。\n");}
  28. else { double b=pop();
  29. if (isEmpty()) { printf("エラー: スタックに値が不足しています。\n"); push(b); }
  30. else { double a=pop(); push(a-b); } } break;
  31.  
  32. case 3:
  33. if (isEmpty()) { printf("エラー: スタックが空です。\n"); }
  34. else { double b=pop();
  35. if (isEmpty()) { printf("エラー: スタックに値が不足しています。\n"); push(b); }
  36. else { double a=pop(); push(a*b); } } break;
  37.  
  38. case 4:
  39. if (isEmpty()) { printf("エラー: スタックが空です。\n"); }
  40. else { double b=pop();
  41. if (isEmpty()) { printf("エラー: スタックに値が不足しています。\n"); push(b); }
  42. else { double a=pop();
  43. if (b==0) { printf("エラー。\n"); push(a); push(b); }
  44. else { push(a/b); } } } break;
  45.  
  46. case 5:
  47. printf("push:");
  48. scanf("%lf",&data);
  49. printf("%lf\n",data);
  50. push(data);
  51. break;
  52.  
  53. case 9:
  54. answer();
  55. flag=1;
  56. break; }
  57. if(flag==1) break; }
  58. return 0;}
  59.  
  60. void push(double value)
  61. { if (isFull()) { printf("スタックが満杯で入りませんでした。\n"); }
  62. else { stack[sp++]=value; } }
  63.  
  64. double pop(void)
  65. { if (isEmpty())
  66. { printf("スタックが空で取り出せませんでした。\n"); return 0; }
  67. else { return stack[--sp]; } }
  68.  
  69. int isFull(void)
  70. { if(sp>=SIZE) { return 1;}
  71. else { return 0; } }
  72.  
  73. int isEmpty(void)
  74. { if(sp<=0) { return 1; }
  75. else { return 0; }}
  76.  
  77. void answer(void)
  78. { if (isEmpty())
  79. { printf("スタックは空です。\n"); }
  80. else { printf("計算結果:%lf",pop()); } }
  81.  
  82. void reset(void)
  83. { sp=0; }
Success #stdin #stdout 0.01s 5284KB
stdin
5
8
5
2
1
9
stdout
push:8.000000
push:2.000000
計算結果:10.000000