fork 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. reset();
  17. while(1){
  18. int cmd;
  19. double a, b, data;
  20. printf("command? ");
  21. scanf("%d", &cmd);
  22.  
  23. switch(cmd){
  24. case 1: // +
  25. b = pop();
  26. a = pop();
  27. push(a + b);
  28. break;
  29. case 2: // -
  30. b = pop();
  31. a = pop();
  32. push(a - b);
  33. break;
  34. case 3: // *
  35. b = pop();
  36. a = pop();
  37. push(a * b);
  38. break;
  39. case 4: // /
  40. b = pop();
  41. a = pop();
  42. push(a / b);
  43. break;
  44. case 5: // data input
  45. printf("data? ");
  46. scanf("%lf", &data);
  47. push(data);
  48. break;
  49. case 9: // show answer
  50. answer();
  51. return 0;
  52. }
  53. }
  54. }
  55. void push(double value)
  56. {
  57. if(isFull()){
  58. printf("Stack is full.\n");
  59. return;
  60. }
  61. stack[sp++] = value;
  62. printf("data:%f\n", value);
  63. }
  64.  
  65. double pop(void)
  66. {
  67. if(isEmpty()){
  68. printf("Stack is empty.\n");
  69. return 0;
  70. }
  71. return stack[--sp];
  72. }
  73.  
  74. int isFull(void)
  75. {
  76. return sp >= SIZE;
  77. }
  78.  
  79. int isEmpty(void)
  80. {
  81. return sp <= 0;
  82. }
  83.  
  84. void answer(void)
  85. {
  86. printf("answer:%f\n", stack[sp - 1]);
  87. }
  88.  
  89. void reset(void)
  90. {
  91. sp = 0;
  92. }
  93.  
  94.  
Success #stdin #stdout 0s 5320KB
stdin
5
1
5
2
1
9
stdout
command? data? data:1.000000
command? data? data:2.000000
command? data:3.000000
command? answer:3.000000