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. while(1){
  18. int res=0;
  19. double data=0;
  20. scanf("%d",&res);
  21. if(!res) break;
  22. switch(res){
  23. case 1: pop(); pop(); data=stack[sp]+stack[sp+1]; push(data); break;
  24. case 2: pop(); pop(); data=stack[sp]-stack[sp+1]; push(data); break;
  25. case 3: pop(); pop(); data=stack[sp]*stack[sp+1]; push(data); break;
  26. case 4: pop(); pop(); data=stack[sp]/stack[sp+1]; push(data); break;
  27. case 5: scanf("%lf",&data); printf("入力したデータ=%lf\n",data); push(data); break;
  28. case 9: res=0;break;
  29. }
  30. //printf("sp=%d\n",sp);
  31. }
  32. answer();
  33. return 0;
  34. }
  35. void push(double value){
  36. if(isFull()){
  37. printf("スタックは満タン\n");
  38. }else{
  39. stack[sp++]=value;
  40. }}
  41. double pop(void){
  42. if(isEmpty()){
  43. printf("スタックは空\n");
  44. return 0;
  45. }else{
  46. return stack[--sp];
  47. }}
  48. int isFull(void){
  49. if(sp>=SIZE){
  50. return 1;
  51. }else{
  52. return 0;
  53. }}
  54. int isEmpty(void){
  55. if(sp<0){
  56. return 1;
  57. }else{
  58. return 0;
  59. }}
  60. void answer(void){
  61. pop(); printf("答えは%lfです。",stack[sp]);
  62. }
  63. void reset(void){
  64. sp=0;
  65. }
  66.  
Success #stdin #stdout 0.01s 5284KB
stdin
5
1
5
2
1
9
stdout
入力したデータ=1.000000
入力したデータ=2.000000
答えは3.000000です。