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