文章出處
文章列表
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。得之老師給我們布置了升級版的題目,馬上就動腦并開始做了。判斷正確與否設置在了整數那,小數和分數不做設置,本程序的精華在于兩個真分數的四則運算,雖然還有些小瑕疵,但是對于我來說已經是一種進步了,繼續加油吧!
文章列表
全站熱搜