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.  
  18. while(1){
  19. int resp;
  20. double value;
  21. scanf("%d",&resp);
  22.  
  23. if(resp==9){
  24. break;
  25. }else{
  26. switch(resp){//足し算(+)は1を選択,引き算(-)は2を選択,掛け算(*)は3を選択,割り算(/)は4,データ入力は5,計算結果の表示は9を選択
  27. case 1:push(pop()+pop());
  28. break;
  29. case 2:push(pop()-pop());
  30. break;
  31. case 3:push(pop()*pop());
  32. break;
  33. case 4:push(pop()/pop());
  34. break;
  35. case 5:scanf("%lf",&value); printf("data:"); printf("%lf\n",value);
  36. push(value);
  37. break;
  38. default:printf("1 2 3 4 5 9のどれかを入力してください\n");
  39. break;
  40. }
  41. }
  42.  
  43. }
  44.  
  45. answer();
  46.  
  47. return 0;
  48. }
  49.  
  50. void push(double value){//・push関数:データをスタックに格納する関数
  51. if(isFull()==0){
  52. printf("スタックが満杯で入りませんでした\n");
  53. }else{
  54. stack[sp++]=value;
  55. }
  56. }
  57.  
  58. double pop(void){//・pop関数:データをスタックから取り出す関数
  59. if(isEmpty()==0){
  60. printf("スタックが空で取り出せませんでした\n");
  61. return 0;
  62. }
  63. else{
  64. return stack[--sp];
  65. }
  66. }
  67.  
  68. int isFull(void){//・isFull関数:スタックが満杯かどうかを判断する関数
  69. if(sp>=SIZE)
  70. return 0;//満杯
  71. else
  72. return 1;
  73. }
  74.  
  75. int isEmpty(void){//・isEmpty関数:スタックが空かどううかを判断する関数
  76. if(sp<=0)
  77. return 0;//空
  78. else
  79. return 1;
  80. }
  81.  
  82. void answer(void){//・answer関数:計算結果を表示する関数
  83. printf("\nanswer:%lf",pop());
  84. }
  85.  
  86. void reset(void){//・reset関数:スタックの中身をすべて空にする関数
  87. int i;
  88.  
  89. sp=0;
  90. for(i=0;i<SIZE;i++){
  91. stack[i]=0;
  92. }
  93.  
  94. }
  95.  
Success #stdin #stdout 0s 5272KB
stdin
5
1
5
6
1
9
stdout
data:1.000000
data:6.000000

answer:7.000000