1 #include<stdio.h> 2 #include<time.h> 3 struct fenshu 4 { 5 int fenzi; 6 int fenmu; 7 }Fenshu[100]; 8 int suiji(int x) 9 { 10 x=rand()%100; 11 return x; 12 } 13 double Suiji(int x) 14 { 15 x=rand()%100; 16 return x; 17 } 18 main() 19 { 20 int a,b,i,j,k,x,y,daan,grade=0; 21 double c,d,e,f; //小数 22 float g,h; 23 int l,m,n,o,p,r,s,t; 24 printf("\t\t\t欢迎使用本系统\n"); 25 while (1) 26 { 27 srand((int)time(0)); 28 //使用srand(time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒) 29 printf("------1:整数 2:小数 3:真分数 4:用户出题模式 5:分数统计 0:退出------"); 30 printf("\n"); 31 scanf("%d",&j); 32 switch(j) 33 { 34 case 1: 35 printf("请选择: 1:加法运算 2:减法运算 3:乘法运算 4:除法运算\n"); 36 scanf("%d",&k); 37 switch(k) 38 { 39 case 1: 40 while (1) 41 { 42 a=suiji(x)+1; 43 b=suiji(y)+1; 44 printf("%d+%d=",a,b); 45 scanf("%d",&daan); 46 if (a+b==daan) { 47 printf("\n 恭喜你,答对了!\n"); 48 grade=grade+10; } 49 else if (daan==-1) //输入-1退出 50 break; 51 else{ 52 printf("\n 很抱歉,答错了!\n"); 53 continue; 54 } 55 } 56 printf("\n"); 57 break; 58 case 2: 59 while (1) 60 { 61 a=suiji(x)+1; 62 b=suiji(y)+1; 63 if (a>b) //这里强制被减数比减数大 64 { 65 printf("%d-%d=",a,b);} 66 scanf("%d",&daan); 67 if (a-b==daan) { 68 printf("\n 恭喜你,答对了!\n"); 69 grade=grade+10; } 70 else if (daan==-1) 71 break; 72 else{ 73 printf("\n 很抱歉,答错了!\n"); 74 continue; 75 } 76 } 77 printf("\n"); 78 break; 79 case 3: 80 while (1) 81 { 82 a=suiji(x)+1; 83 b=suiji(y)+1; 84 printf("%d*%d=",a,b); 85 scanf("%d",&daan); 86 if (a*b==daan) { 87 printf("\n 恭喜你,答对了!\n"); 88 grade=grade+10; } 89 else if (daan==-1) 90 break; 91 else{ 92 printf("\n 很抱歉,打错了!\n"); 93 continue; 94 } 95 } 96 printf("\n"); 97 break; 98 case 4: 99 while (1) 100 { 101 a=suiji(x)+1; 102 b=suiji(y)+1; 103 if (a<b) { 104 printf("%d÷%d=",a,b); } 105 scanf("%f",&h); 106 g=(float)a/b; 107 if (h==g) { 108 printf("恭喜你,答对了!\n"); 109 grade=grade+10; } 110 else if (daan=-1) 111 break; 112 else { 113 printf("\n 很抱歉,答错了!\n"); 114 continue; 115 } 116 } 117 printf("\n"); 118 break; 119 } 120 break; 121 case 2: 122 printf("请选择: 1:加法运算 2:减法运算 3:乘法运算 4:除法运算\n"); 123 scanf("%d",&k); 124 switch(k) 125 { 126 case 1: 127 for (i=0;i<30;i++) 128 { 129 c=Suiji(x)+1; 130 d=Suiji(y)+1; 131 e=Suiji(x)*0.01; 132 f=Suiji(y)*0.01; 133 printf("%2.2f+%2.2f=\t",c+e,d+f); 134 } 135 printf("\n"); 136 break; 137 case 2: 138 for (i=0;i<30;i++) 139 { 140 c=Suiji(x)+1; 141 d=Suiji(y)+1; 142 e=Suiji(x)*0.01; 143 f=Suiji(y)*0.01; 144 printf("%2.2f-%2.2f=\t",c+e,d+f); 145 } 146 printf("\n"); 147 break; 148 case 3: 149 for (i=0;i<30;i++) 150 { 151 c=Suiji(x)+1; 152 d=Suiji(y)+1; 153 e=Suiji(x)*0.01; 154 f=Suiji(y)*0.01; 155 printf("%2.2f*%2.2f=\t",c+e,d+f); 156 } 157 printf("\n"); 158 break; 159 case 4: 160 for (i=0;i<30;i++) 161 { 162 c=Suiji(x)+1; 163 d=Suiji(y)+1; 164 e=Suiji(x)*0.01; 165 f=Suiji(y)*0.01; 166 printf("%2.2f/%2.2f=\t",c+e,d+f); 167 } 168 printf("\n"); 169 break; 170 } 171 break; 172 case 3: 173 printf("请选择: 1:加法运算 2:减法运算 3:乘法运算 4:除法运算\n"); 174 scanf("%d",&k); 175 switch(k) 176 { 177 case 1: 178 for (i=0;i<30;i++) 179 { 180 Fenshu[i].fenzi=suiji(x)+1; 181 Fenshu[i].fenmu=suiji(y)+1; 182 Fenshu[i+1].fenzi=suiji(x)+1; 183 Fenshu[i+1].fenmu=suiji(y)+1; 184 if (Fenshu[i].fenzi<Fenshu[i].fenmu && Fenshu[i+1].fenzi<Fenshu[i+1].fenmu) //把真分数筛选出来 185 printf("%d/%d+%d/%d=\t ",Fenshu[i].fenzi,Fenshu[i].fenmu,Fenshu[i+1].fenzi,Fenshu[i+1].fenmu); 186 } 187 printf("\n"); 188 break; 189 case 2: 190 for (i=0;i<30;i++) 191 { 192 Fenshu[i].fenzi=suiji(x)+1; 193 Fenshu[i].fenmu=suiji(y)+1; 194 Fenshu[i+1].fenzi=suiji(x)+1; 195 Fenshu[i+1].fenmu=suiji(y)+1; 196 if (Fenshu[i].fenzi<Fenshu[i].fenmu && Fenshu[i+1].fenzi<Fenshu[i+1].fenmu) 197 printf("%d/%d-%d/%d=\t ",Fenshu[i].fenzi,Fenshu[i].fenmu,Fenshu[i+1].fenzi,Fenshu[i+1].fenmu); 198 } 199 printf("\n"); 200 break; 201 case 3: 202 for (i=0;i<30;i++) 203 { 204 Fenshu[i].fenzi=suiji(x)+1; 205 Fenshu[i].fenmu=suiji(y)+1; 206 Fenshu[i+1].fenzi=suiji(x)+1; 207 Fenshu[i+1].fenmu=suiji(y)+1; 208 if (Fenshu[i].fenzi<Fenshu[i].fenmu && Fenshu[i+1].fenzi<Fenshu[i+1].fenmu) 209 printf("%d/%d*%d/%d=\t ",Fenshu[i].fenzi,Fenshu[i].fenmu,Fenshu[i+1].fenzi,Fenshu[i+1].fenmu); 210 } 211 printf("\n"); 212 break; 213 case 4: 214 for (i=0;i<30;i++) 215 { 216 Fenshu[i].fenzi=suiji(x)+1; 217 Fenshu[i].fenmu=suiji(y)+1; 218 Fenshu[i+1].fenzi=suiji(x)+1; 219 Fenshu[i+1].fenmu=suiji(y)+1; 220 if (Fenshu[i].fenzi<Fenshu[i].fenmu && Fenshu[i+1].fenzi<Fenshu[i+1].fenmu) 221 printf("%d/%d÷%d/%d=\t ",Fenshu[i].fenzi,Fenshu[i].fenmu,Fenshu[i+1].fenzi,Fenshu[i+1].fenmu); 222 } 223 printf("\n"); 224 break; 225 } 226 break; 227 case 4: 228 while (1) // a/c+b/d = (ad+bc)/cd 229 { 230 printf("请输入两个真分数(用逗号分开 两个分数用空格隔开):"); 231 scanf("%d,%d %d,%d",&m,&n,&o,&p); 232 233 printf("下列是加法运算:\n"); //r是最大公约数 234 if ((m*p+o*n)>(n*p)) {r=m*p+o*n; s=n*p;} 235 else {r=n*p; s=m*p+o*n;} 236 t=s; 237 while (t!=0) 238 { 239 t=r%s; 240 r=s; 241 s=t; 242 } 243 printf("%d/%d+%d/%d=%d/%d\n",m,n,o,p,(m*p+o*n)/r,(n*p)/r); 244 245 printf("下列是减法运算:\n"); 246 if ((m*p-o*n)>(n*p)) {r=m*p+o*n; s=n*p;} 247 else {r=n*p; s=m*p-o*n;} 248 t=s; 249 while (t!=0) 250 { 251 t=r%s; 252 r=s; 253 s=t; 254 } 255 printf("%d/%d-%d/%d=%d/%d\n",m,n,o,p,(m*p-o*n)/r,(n*p)/r); 256 257 printf("下列是乘法运算:\n"); 258 if ((m*o)>(n*p)) {r=m*o; s=n*p;} 259 else {r=n*p; s=m*o;} 260 t=s; 261 while (t!=0) 262 { 263 t=r%s; 264 r=s; 265 s=t; 266 } 267 printf("%d/%d*%d/%d=%d/%d\n",m,n,o,p,(m*o)/r,(n*p)/r); 268 269 printf("下列是除法运算:\n"); 270 if ((m*p)>(n*o)) {r=m*p; s=n*o;} 271 else {r=n*o; s=m*p;} 272 t=s; 273 while (t!=0) 274 { 275 t=r%s; 276 r=s; 277 s=t; 278 } 279 printf("%d/%d÷%d/%d=%d/%d\n",m,n,o,p,(m*p)/r,(n*o)/r); 280 break; 281 } 282 break; 283 case 5: 284 printf("\n 你获得的分数为%d\n",grade); 285 break; 286 case 0: 287 exit(0); 288 break; 289 } 290 } 291 }
感想:这个程序写出来感觉不难,但是如果要更好的话,还要继续努力。通过写这个程序,我学习到了语句:srand((int)time(0));。这条语句可以把当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒),要是没有的话,会发现每一次运行的结果都一样,即“不是随机的随机”,显然不是我们想要的。四则运算题目,需要产生随机数,那么问题来了,产生的是整数还是小数?想产生哪个区间的整数,就用rand()对几求余加1,例如想在1到100之间取整,那么可以rand()%100+1。还有,小数部分,首先要想到的是小数点后几位,我总结出了通式:(rand()%10x)*10-x。得之老师给我们布置了升级版的题目,马上就动脑并开始做了。判断正确与否设置在了整数那,小数和分数不做设置,本程序的精华在于两个真分数的四则运算,虽然还有些小瑕疵,但是对于我来说已经是一种进步了,继续加油吧!