1 #include"stdio.h" 2 #include"stdlib.h" 3 #include"time.h" 4 5 int max(int a,int b) 6 { 7 int k,l,p; 8 if(a<b){l=a;a=b;b=l;} 9 while(b!=0) 10 { 11 k=a%b;a=b;b=k; 12 } 13 p=a; 14 return p; 15 16 } 17 main() 18 { 19 int a,b,c,d,t,k,m,p; 20 int *p1; 21 srand((int)time(NULL)); 22 printf("請輸入須要的題數\t"); 23 scanf("%d",&k); 24 for(int i=0;i<k;i++) 25 { 26 a=rand()%100+1; 27 b=rand()%100+1; 28 c=rand()%100+1; 29 d=rand()%100+1; 30 t=rand()%8; 31 switch(t) 32 { 33 case 0:printf("%d + %d=\n",a,b);break; 34 case 1:{ 35 if(a<b){m=a,a=b,b=m;} 36 printf("%d - %d=\n",a,b);break; 37 } 38 case 2:printf("%d × %d=\n",a,b);break; 39 case 3:printf("%d ÷ %d=\n",a,b);break; 40 case 4:{ 41 if(a>b){m=a,a=b,b=m;} 42 if(c>d){m=c,c=d,d=m;} 43 a=a/max(a,b); 44 b=b/max(a,b); 45 c=c/max(c,d); 46 d=d/max(c,d); 47 printf("%d/%d + %d/%d=\n",a,b,c,d);break; 48 } 49 case 5:{ 50 if(a>b){m=a,a=b,b=m;} 51 if(c>d){m=c,c=d,d=m;} 52 a=a/max(a,b); 53 b=b/max(a,b); 54 c=c/max(c,d); 55 d=d/max(c,d); 56 printf("%d/%d - %d/%d=\n",a,b,c,d);break; 57 } 58 case 6:{ 59 if(a>b){m=a,a=b,b=m;} 60 if(c>d){m=c,c=d,d=m;} 61 a=a/max(a,b); 62 b=b/max(a,b); 63 c=c/max(c,d); 64 d=d/max(c,d); 65 printf("%d/%d × %d/%d=\n",a,b,c,d);break; 66 } 67 case 7:{ 68 if(a>b){m=a,a=b,b=m;} 69 if(c>d){m=c,c=d,d=m;} 70 a=a/max(a,b); 71 b=b/max(a,b); 72 c=c/max(c,d); 73 d=d/max(c,d); 74 printf("%d/%d ÷ %d/%d=\n",a,b,c,d);break; 75 } 76 } 77 } 78 return 0; 79 }
此次做業我認爲比較簡單,在最開始的設計中,只有整數的加減乘除運算,只用到了3個rand()函數(2個因數的隨機,1個符號的隨機),而後利用switch輸出不一樣符號之間加減乘除的式子。以後加入了分數的運算,而後出現了設計時的第一個問題,分數不是一個參數,致使本來的輸出語句沒辦法輸出a+b=這樣的式子,因而我想到了加入更多的case,來將分數的計算加入進去,但這樣就出現一個問題,case太多,致使了程序複雜化,我尚未想到更好的解決方法。最後,在測試時我發現分數並非真分數,而且能夠進行約分,我又將對分數的化簡與分母比分子大這樣的限制加入到程序中,變成如今的程序。編程
這個程序還不不算很完善,還有不少可以增長和改進的地方,但願之後等個人能力提高了能夠設計出更實用,更簡潔的程序出來。函數