课堂练习之四则运算加强版
一、程序設計題目要求和設計思想
1、題目
(1)、題目避免重復;??
(2)、可定制(數量/打印方式);?
(3)、可以控制下列參數: 是否有乘除法、是否有括號、 數值范圍、加減有無負數、除法有無余數、否支持分數 (真分數, 假分數, …)、是否支持小數 (精確到多少位)、打印中每行的間隔可調整;
2、設計思想
1、題目避免重復; 2、可定制(數量/打印方式): 3、可以控制下列參數(是否有乘除法,是否有括號,數值范圍,加減有無負數,除法有無余數、是否支持分數(真分數,假分數)):
設計思路:
1、(任意自定義題目個數)通過輸入的數字對應for循環的次數,
2、(是否有乘除法)
3、(是否支持分數)(有/否:1/0):
這兩個放在一起實現,兩個組合一起可以有四種方式,00,01,10,11
分別對應case語句中的選項,在選則時,0、1是加法,2、3是減法,4、5是乘法,6、7是除法,
奇數是可以產生分數的,
當00時,選擇0和2,
當01時,選擇1,2,3,4;
當10時,選擇0,2,4,6;
當11時,選擇全部。
4、(數值的范圍) 將傳進來的數num3直接當作指數進行運算,產生該數位的最大和最小兩個數字,
并通過random_2方法,產生兩數之間的隨機數。
自定義兩數之間的隨機數方法random_2思路:
1、先隨機產生小于較大數的隨機數, 2、判斷該隨機數是否大于較小數, 3、如果大于則返回該數,否則就通過循環產生另一個隨機數,重復判斷。
二、程序源代碼
1 /* 2 需求:每天出30道四則運算題目給小學生做 3 */ 4 import java.util.*; 5 class Rand 6 { 7 public static void sop(Object obj) 8 { 9 System.out.print(obj); 10 } 11 public static int random_1(int n)//隨機產生一個0--n之間的數 12 { 13 return new Random().nextInt(n); 14 } 15 16 public static int random_2(int n1,int n2)//產生n1--n2隨機數的方法 17 { 18 int temp = 0,b = 0; 19 while((temp=new Random().nextInt(n2))>=n1)//如果產生的隨機數大于n1,就將其返回,否則就繼續 20 { 21 b = temp; 22 } 23 if(b==0) 24 b = b + 2*n1; 25 return b; 26 } 27 28 public static void main(String[] args) 29 { 30 sop("<---小學生二年級課后作業,每天30道四則運算練習--->"); 31 32 System.out.print("\r\n1、請輸入今日想完成的題目數量:"); 33 34 Scanner sc = new Scanner(System.in); 35 int num = sc.nextInt(); 36 37 System.out.print("\r\n2、請選擇是否有乘除運算:(有/否:1/0):"); 38 39 Scanner sc1 = new Scanner(System.in); 40 int num1 = sc1.nextInt(); 41 42 System.out.print("\r\n3、請選擇是否需要真分數運算:(有/否:1/0):"); 43 44 Scanner sc2 = new Scanner(System.in); 45 int num2 = sc2.nextInt(); 46 47 System.out.print("\r\n4、請輸入每行打印的個數:"); 48 49 Scanner sc4 = new Scanner(System.in); 50 int num4 = sc4.nextInt(); 51 52 System.out.print("\r\n5、請選擇需要幾位數的運算:(請輸入大于1的位數,\r\n如不需要定制,輸入1,隨機產生不大于1000的運算):"); 53 54 Scanner sc3 = new Scanner(System.in); 55 int num3 = sc3.nextInt() - 1; 56 57 int count = 0,d1,d2,k1,k2,k3,k4;//計數器 58 59 for (int i=0;i<num ;i++ ) 60 { 61 if(num3==0)//如果輸入為1,就將隨機產生不大于1000的數 62 { 63 d1 = random_1(1000); 64 d2 = random_1(1000); 65 k1 = random_1(1000); 66 k2 = random_1(1000); 67 k3 = random_1(1000); 68 k4 = random_1(1000); 69 } 70 else 71 { 72 d1 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);//自定義的產生隨機數 73 d2 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1); 74 k1 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1); 75 k2 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1); 76 k3 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1); 77 k4 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1); 78 } 79 80 81 int k = 0,r = 0;//聲明兩個變量 82 if(num1==0 && num2==0)//都沒有 83 { 84 r = random_1(4); 85 if(r%2!=0)//將產生的奇數隨機數取出 86 k=r; 87 if(k==0)//即使已經將k判斷為奇數了,但還是會等于0,所以就再判斷一次,如果為0,就將其+1; 88 ++k; 89 } 90 91 else if(num1==0 && num2==1)//沒乘除,有分數 92 k = random_1(4); 93 else if(num1==1 && num2==0)//有乘除,沒分數 94 { 95 r = random_1(8); 96 if(r%2!=0) 97 k=r; 98 if(k==0) 99 ++k; 100 } 101 else//都有 102 k = random_1(8); 103 104 switch(k)//前兩個是加法,2,3是減法,4,5是乘法,6,7是除法 105 { 106 case 0: 107 sop(zhenfenshu(k1,k2)+" + "+zhenfenshu(k3,k4)+" = \t"); 108 break; 109 case 1: 110 sop(d1+" + "+d2+" = \t"); 111 break; 112 case 2: 113 sop(zhenfenshu(k1,k2)+" - "+zhenfenshu(k3,k4)+" = \t"); 114 break; 115 case 3: 116 jianfa(d1,d2); 117 break; 118 case 4: 119 sop(zhenfenshu(k1,k2)+" * "+zhenfenshu(k3,k4)+" = \t"); 120 break; 121 case 5: 122 sop(d1+" * "+d2+" = \t"); 123 break; 124 case 6: 125 sop(zhenfenshu(k1,k2)+" ÷ "+zhenfenshu(k3,k4)+" = \t"); 126 break; 127 case 7: 128 chufa(d1,d2); 129 break; 130 131 132 default: 133 sop("duang,duang,daung"); 134 break; 135 } 136 count++; 137 if(count%num4==0) 138 System.out.println(); 139 } 140 141 sop("以上共有:"+count+"道題。"); 142 143 } 144 public static void jianfa(int a,int b)//因為小學二年級沒有學負數,所以相減不能為負數 145 { 146 if(a>=b) 147 sop(a+" - "+b+" = \t"); 148 else 149 { 150 sop(b+" - "+a+" = \t"); 151 } 152 153 } 154 155 public static void chufa(int a,int b)//為了使除法有意義,除數不能為零, 156 { 157 if(b>0) 158 sop(a+" ÷ "+b+" = \t"); 159 //如果除數為零,就將其加上10,再進行運算 160 else 161 { 162 b = b + 10; 163 sop(a+" ÷ "+b+" = \t"); 164 } 165 166 } 167 public static String zhenfenshu(int a,int b)//產生真分數的方法 168 { 169 if(a<=b) 170 return a+"/"+b; 171 else 172 return b+"/"+a; 173 } 174 }三、運算結果截圖
(只有加減法,沒有分數,所有的數都是四位的)
(有乘除,沒分數,兩位數運算)
(有乘除,也有分數,兩位數)
(在自定義數的位數,輸入1,就是產生小于1000的隨機數)
四、總結
在對該程序進行修改的過程中,只實現了一部分的功能,雖然可以做一些簡單的定制功能,
還存在不少的缺陷和bug,比如沒有實現小數的運算,但是我感覺比較好的就是,
可以自定義兩個數,產生這兩個數之間的隨機數,希望在下面可以繼續將本程序
再加改進,功能更加完善。
?
?
時間安排:
一、項目計劃總結:
?
周活動總結表
姓名: ?????????????? 日期:
| 日期???????任務 | 聽課 | 編寫程序 | 閱讀課本 | 準備考試 | ? | ? | 日總計 |
| 周日 | ? | ? | ? | ? | ? | ? | ? |
| 周一 | ? | ? | ? | ? | ? | ? | ? |
| 周二 | ?100 | ?30 | ?30 | ? | ? | ? | ?160 |
| 周三 | ? | ?150 | ?30 | ? | ? | ? | ?180 |
| 周四 | ? | ?120 | ?40 | ? | ? | ? | ?160 |
| 周五 | ?100 | ?120 | ?40 | ? | ? | ? | ?160 |
| 周六 | ? | ?180 | ?40 | ? | ? | ? | ?220 |
| 周總結 | ?200 | ?600 | ?180 | ? | ? | ? | ?980 |
階段時間和效率????????????????????????????????????????????周數(上一次周活動表的周數+1):
不包括上一周在內的累計時間?????????????????????????????????????????????????????????????????????????
| 總計 | ?200 | ?600 | ?180 | ? | ? | ? | ?980 |
| 平均 | ?200 | ?600 | ?180 | ? | ? | ? | ?980 |
| 最大 | ?200 | ?600 | ?180 | ? | ? | ? | ?980 |
| 最小 | ?200 | ?600 | ?180 | ? | ? | ? | ?989 |
以前各周的累計時間????????????????????????????????????????????????????????????????????????????????????
| 總計 | ? | ? | ? | ? | ? | ? | ? |
| 平均 | ? | ? | ? | ? | ? | ? | ? |
| 最大 | ? | ? | ? | ? | ? | ? | ? |
| 最小 | ? | ? | ? | ? | ? | ? | ? |
二、時間記錄表:
學生??????????郭健豪???????????????????????????????????????????????????日期???????2015.3.15????????????????
教師????????王建民?????????????????????????????????????????????課程???????????PSP???????
| 日期 | 開始時間 | 結束時間 | 中斷時間 | 凈時間 | 活動 | 備注 |
| ?3.10 | ?19:20 | 20:00 | ?10 | ?30 | ?編程 | ? |
| ?3.11 | ?15:00 | 18:20 | ?50 | ?150 | ?編程、看書 | ? |
| ?3.12 | ?18:30 | 21:30 | ?20 | ?160 | ?編程、看書 | ? |
| ?3.13 | ?19:00 | 21:30 | ?20 | ?130 | ?編程、看書 | ? |
| ?3.14 | ?9:00 | 11:20 | ?30 | ?180 | 編程??磿?/p> | ? |
| ? | ? | ? | ? | ? | ? | ? |
?
三、缺陷記錄日志:
學生????????郭健豪????
日期???????2015.3.15?
教員???????王建民???
程序號????????????????
| 日期 | 編號 | 類型 | 引入階段 | 排除階段 | 修復時間 | 修復缺陷 |
| ?3.11 | ? | ? | ? | ? | ? | ? |
| ?想自定義一個方法,可以隨機輸入兩個數,產生這兩個數之間的隨機數,但是不能將得到的這個數返回,這個問題一直困擾著我。 | ||||||
| ?3.12 | ? | ? | ? | ? | ? | ? |
| ?在今天晚上,我繼續想昨天的這個沒有解決的問題,經過將近一個小時的思考和調試,最終我給設了一個中間變量,將該數給返回出來, | ||||||
?
轉載于:https://www.cnblogs.com/KevinBin/p/4339680.html
總結
以上是生活随笔為你收集整理的课堂练习之四则运算加强版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库工具Navicat for MyS
- 下一篇: 在基于Jetty Fast CGI Pr