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