实验一四则运算
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 }
虽然花费了很长的时间完成的,但是我个人认为在容错方面有点小缺陷,其他的暂时还没发现。最后我发现做小程序容易,想要完美却不易。