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