做業二:我的編程項目——四則運算

題目:

  • 自動生成四則運算題目

基本要求:

  • 除了整數之外,還能支持真分數的四則運算。
  • 對實現的功能進行描述,而且對實現結果要求截圖。

編程環境:

  • 本次編程使用的是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太多,致使了程序複雜化,我尚未想到更好的解決方法。最後,在測試時我發現分數並非真分數,而且能夠進行約分,我又將對分數的化簡與分母比分子大這樣的限制加入到程序中,變成如今的程序。編程

  這個程序還不不算很完善,還有不少可以增長和改進的地方,但願之後等個人能力提高了能夠設計出更實用,更簡潔的程序出來。函數

相關文章
相關標籤/搜索