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