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