題目:
- 自動生成四則運算題目
基本要求:
- 除了整數以外,還能支援真分數的四則運算。
- 對實作的功能進行描述,并且對實作結果要求截圖。
程式設計環境:
- 本次程式設計使用的是C語言,程式設計軟體使用的是C-free5。
主要功能:
- 使用者輸入所需要的題目數量,程式自動生成所需數量的四則運算題目(其中包括整數與真分數的加減乘除運算)。
設計思想:
- 首先,看到題目的時候,由于是程式自動生成數字,是以必然需要 rand()函數來為因數随機産生各種數字,而加減乘除四個符号的随機也需要利用随機函數進行選擇。
- 因為有四個運算符号,是以需要用到switch()來進行選取。
- 由于需要分數,随機數字需要4個,每2個合成一個分數。
- 在設計中,為了簡化題目,便于計算,利用調用函數計算出分數的分子分母的最大公約數,然後計算出分數的最簡分數。
程式運作代碼:
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太多,導緻了程式複雜化,我還沒有想到更好的解決方法。最後,在測試時我發現分數并不是真分數,并且可以進行約分,我又将對分數的化簡與分母比分子大這樣的限制加入到程式中,變成現在的程式。
這個程式還不不算很完善,還有很多能夠增加和改進的地方,希望以後等我的能力提升了可以設計出更實用,更簡潔的程式出來。