实验一四则运算

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<time.h>
  4 #include<string.h>
  5 #include<math.h>
  6 #define N 100
  7 int fenshu(int a,int b,int a1,char ch[10],int m);
  8 typedef struct 
  9 {
 10     float A[N],B[N];
 11     int ch[N];
 12     int top;
 13 }stack;
 14 void main()
 15 {
 16     int n=5,a1,m=0,x,ret,j=0;
 17     float sum=0,a=2,b=1,c;
 18     char ch[10];
 19     stack S;
 20     S.top=-1;
 21     S.A[-1]=-1;
 22     S.B[-1]=-1;
 23     S.ch[-1]=-1;
 24     printf("请输入题目的个数:");
 25     ret=scanf("%d",&n);
 26     getchar();
 27     while(ret==0)
 28         {
 29                 printf("请重新输入:");
 30                 ret=scanf("%d",&n);
 31                    getchar();
 32         }
 33     x=n;
 34     while(n>0)
 35     {
 36         srand(time(NULL));
 37              a=rand()%49+1;
 38             b=rand()%49+1;
 39              a1=rand()%6+42;
 40             while(a1==44||a1==46)
 41             {
 42                 a1=rand()%6+42;}
 43         while(S.A[S.top]==a&&S.B[S.top]==b&&S.ch[S.top]==a1)
 44         {
 45             srand(time(NULL));
 46              a=rand()%49+1;
 47             b=rand()%49+1;
 48              a1=47rand()%6+42;
 49             while(a1==44||a1==46)
 50             {
 51                 a1=rand()%6+42;}
 52         }
 53             S.top++;
 54             S.A[S.top] =a;
 55             S.B[S.top]=b;
 56             S.ch[S.top]=a1;
 57         if(a1!=47)
 58         {printf("%.0f%c%.0f=",a,a1,b);
 59             ret=scanf("%f",&c);
 60             while(ret==0)
 61             {
 62                 printf("请重新输入:");
 63                 getchar();
 64                 ret=scanf("%f",&c);
 65                 getchar();
 66             }
 67         }
 68         else
 69         {
 70             if(S.ch[S.top-1]!=47)
 71                 if(S.top==-1)
 72                      getchar();
 73         printf("%.0f%c%.0f=",a,a1,b);
 74             gets(ch);
 75         }
 76         switch(a1){
 77         case 42:
 78             sum=a*b;break;
 79         case 43:
 80             sum=a+b;break;
 81          case 45:
 82             sum=a-b;
 83              break;
 84         case 47:
 85             sum=a/b;
 86             break;
 87         }
 88         if(a1!=47)
 89         {
 90         if(c==sum)
 91         {
 92                 printf("√%.0f\n",sum);
 93                 m++;
 94             }
 95             else
 96                 printf("×%.0f\n",sum); 
 97         }
 98         else
 99         {
100             m=fenshu(a,b,a1,ch,m);
101         }
102         n--;
103     }
104      printf("你总共:\n");
105     printf("√%d\n",m);
106     printf("×%d\n",x-m);
107 }
108 int fenshu(int a,int b,int a1,char ch[10],int m)
109 {
110     int i,k=0;
111     int sz1=0,sz2=0;
112     i=b<a?b:a;
113         for(;i>1;i--)
114         {
115             if(a%i==0&&b%i==0)
116             {
117                 a=a/i;
118                 b=b/i;
119             }
120         }
121         if(a!=b&&b!=1)
122         {
123         for(i=strlen(ch)-1;i>=0;i--)
124         {
125             if(ch[i]=='/')
126                 {
127                     k=0;
128                     sz2=sz1;
129                     sz1=0;
130                 }
131             while(ch[i]>'9'||ch[i]<'0'&&ch[i]!='/'&&ch[i]!=' ')
132             {    
133                      printf("输入有误!请重新输入:");
134                          getchar();
135                      gets(ch);
136             }
137             if(ch[i]<'9'||ch[i]>'0'||ch[i]=='/'||ch[i]==' ')
138             {
139                 if(ch[i]!='/'&&ch[i]!=' ')
140                 {
141                     sz1=sz1+(ch[i]-'0')*pow(10,k);
142                     k++;
143                 }
144             }
145         }
146         }
147         else
148         {
149              if(a==b)
150                 sz1=sz2=1;
151                else
152             {
153                  sz1=a;
154                 sz2=1;
155             }
156         }
157         sz1==a&&sz2==b?printf(""),m++:printf("×");//,
158         if(abs(b)==1)
159             printf("%d\n",a/b);
160         else
161         {
162             if(a>b) 
163                 printf("%d又%d/%d\n",a/b,a%b,b);
164              else
165                 printf("%d/%d\n",a,b);    
166         }
167         return m;
168 }

虽然花费了很长的时间完成的,但是我个人认为在容错方面有点小缺陷,其他的暂时还没发现。最后我发现做小程序容易,想要完美却不易。

原文地址:https://www.cnblogs.com/shishaotao/p/4376414.html