课堂练习之四则运算加强版
一、程序設(shè)計題目要求和設(shè)計思想
1、題目
(1)、題目避免重復;??
(2)、可定制(數(shù)量/打印方式);?
(3)、可以控制下列參數(shù): 是否有乘除法、是否有括號、 數(shù)值范圍、加減有無負數(shù)、除法有無余數(shù)、否支持分數(shù) (真分數(shù), 假分數(shù), …)、是否支持小數(shù) (精確到多少位)、打印中每行的間隔可調(diào)整;
2、設(shè)計思想
1、題目避免重復; 2、可定制(數(shù)量/打印方式): 3、可以控制下列參數(shù)(是否有乘除法,是否有括號,數(shù)值范圍,加減有無負數(shù),除法有無余數(shù)、是否支持分數(shù)(真分數(shù),假分數(shù))):
設(shè)計思路:
1、(任意自定義題目個數(shù))通過輸入的數(shù)字對應for循環(huán)的次數(shù),
2、(是否有乘除法)
3、(是否支持分數(shù))(有/否:1/0):
這兩個放在一起實現(xiàn),兩個組合一起可以有四種方式,00,01,10,11
分別對應case語句中的選項,在選則時,0、1是加法,2、3是減法,4、5是乘法,6、7是除法,
奇數(shù)是可以產(chǎn)生分數(shù)的,
當00時,選擇0和2,
當01時,選擇1,2,3,4;
當10時,選擇0,2,4,6;
當11時,選擇全部。
4、(數(shù)值的范圍) 將傳進來的數(shù)num3直接當作指數(shù)進行運算,產(chǎn)生該數(shù)位的最大和最小兩個數(shù)字,
并通過random_2方法,產(chǎn)生兩數(shù)之間的隨機數(shù)。
自定義兩數(shù)之間的隨機數(shù)方法random_2思路:
1、先隨機產(chǎn)生小于較大數(shù)的隨機數(shù), 2、判斷該隨機數(shù)是否大于較小數(shù), 3、如果大于則返回該數(shù),否則就通過循環(huán)產(chǎn)生另一個隨機數(shù),重復判斷。
二、程序源代碼
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)//隨機產(chǎn)生一個0--n之間的數(shù) 12 { 13 return new Random().nextInt(n); 14 } 15 16 public static int random_2(int n1,int n2)//產(chǎn)生n1--n2隨機數(shù)的方法 17 { 18 int temp = 0,b = 0; 19 while((temp=new Random().nextInt(n2))>=n1)//如果產(chǎn)生的隨機數(shù)大于n1,就將其返回,否則就繼續(xù) 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("<---小學生二年級課后作業(yè),每天30道四則運算練習--->"); 31 32 System.out.print("\r\n1、請輸入今日想完成的題目數(shù)量:"); 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、請選擇是否需要真分數(shù)運算:(有/否:1/0):"); 43 44 Scanner sc2 = new Scanner(System.in); 45 int num2 = sc2.nextInt(); 46 47 System.out.print("\r\n4、請輸入每行打印的個數(shù):"); 48 49 Scanner sc4 = new Scanner(System.in); 50 int num4 = sc4.nextInt(); 51 52 System.out.print("\r\n5、請選擇需要幾位數(shù)的運算:(請輸入大于1的位數(shù),\r\n如不需要定制,輸入1,隨機產(chǎn)生不大于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;//計數(shù)器 58 59 for (int i=0;i<num ;i++ ) 60 { 61 if(num3==0)//如果輸入為1,就將隨機產(chǎn)生不大于1000的數(shù) 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);//自定義的產(chǎn)生隨機數(shù) 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)//將產(chǎn)生的奇數(shù)隨機數(shù)取出 86 k=r; 87 if(k==0)//即使已經(jīng)將k判斷為奇數(shù)了,但還是會等于0,所以就再判斷一次,如果為0,就將其+1; 88 ++k; 89 } 90 91 else if(num1==0 && num2==1)//沒乘除,有分數(shù) 92 k = random_1(4); 93 else if(num1==1 && num2==0)//有乘除,沒分數(shù) 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)//因為小學二年級沒有學負數(shù),所以相減不能為負數(shù) 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)//為了使除法有意義,除數(shù)不能為零, 156 { 157 if(b>0) 158 sop(a+" ÷ "+b+" = \t"); 159 //如果除數(shù)為零,就將其加上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)//產(chǎn)生真分數(shù)的方法 168 { 169 if(a<=b) 170 return a+"/"+b; 171 else 172 return b+"/"+a; 173 } 174 }三、運算結(jié)果截圖
(只有加減法,沒有分數(shù),所有的數(shù)都是四位的)
(有乘除,沒分數(shù),兩位數(shù)運算)
(有乘除,也有分數(shù),兩位數(shù))
(在自定義數(shù)的位數(shù),輸入1,就是產(chǎn)生小于1000的隨機數(shù))
四、總結(jié)
在對該程序進行修改的過程中,只實現(xiàn)了一部分的功能,雖然可以做一些簡單的定制功能,
還存在不少的缺陷和bug,比如沒有實現(xiàn)小數(shù)的運算,但是我感覺比較好的就是,
可以自定義兩個數(shù),產(chǎn)生這兩個數(shù)之間的隨機數(shù),希望在下面可以繼續(xù)將本程序
再加改進,功能更加完善。
?
?
時間安排:
一、項目計劃總結(jié):
?
周活動總結(jié)表
姓名: ?????????????? 日期:
| 日期???????任務 | 聽課 | 編寫程序 | 閱讀課本 | 準備考試 | ? | ? | 日總計 |
| 周日 | ? | ? | ? | ? | ? | ? | ? |
| 周一 | ? | ? | ? | ? | ? | ? | ? |
| 周二 | ?100 | ?30 | ?30 | ? | ? | ? | ?160 |
| 周三 | ? | ?150 | ?30 | ? | ? | ? | ?180 |
| 周四 | ? | ?120 | ?40 | ? | ? | ? | ?160 |
| 周五 | ?100 | ?120 | ?40 | ? | ? | ? | ?160 |
| 周六 | ? | ?180 | ?40 | ? | ? | ? | ?220 |
| 周總結(jié) | ?200 | ?600 | ?180 | ? | ? | ? | ?980 |
階段時間和效率????????????????????????????????????????????周數(shù)(上一次周活動表的周數(shù)+1):
不包括上一周在內(nèi)的累計時間?????????????????????????????????????????????????????????????????????????
| 總計 | ?200 | ?600 | ?180 | ? | ? | ? | ?980 |
| 平均 | ?200 | ?600 | ?180 | ? | ? | ? | ?980 |
| 最大 | ?200 | ?600 | ?180 | ? | ? | ? | ?980 |
| 最小 | ?200 | ?600 | ?180 | ? | ? | ? | ?989 |
以前各周的累計時間????????????????????????????????????????????????????????????????????????????????????
| 總計 | ? | ? | ? | ? | ? | ? | ? |
| 平均 | ? | ? | ? | ? | ? | ? | ? |
| 最大 | ? | ? | ? | ? | ? | ? | ? |
| 最小 | ? | ? | ? | ? | ? | ? | ? |
二、時間記錄表:
學生??????????郭健豪???????????????????????????????????????????????????日期???????2015.3.15????????????????
教師????????王建民?????????????????????????????????????????????課程???????????PSP???????
| 日期 | 開始時間 | 結(jié)束時間 | 中斷時間 | 凈時間 | 活動 | 備注 |
| ?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 | ? | ? | ? | ? | ? | ? |
| ?想自定義一個方法,可以隨機輸入兩個數(shù),產(chǎn)生這兩個數(shù)之間的隨機數(shù),但是不能將得到的這個數(shù)返回,這個問題一直困擾著我。 | ||||||
| ?3.12 | ? | ? | ? | ? | ? | ? |
| ?在今天晚上,我繼續(xù)想昨天的這個沒有解決的問題,經(jīng)過將近一個小時的思考和調(diào)試,最終我給設(shè)了一個中間變量,將該數(shù)給返回出來, | ||||||
?
轉(zhuǎn)載于:https://www.cnblogs.com/KevinBin/p/4339680.html
總結(jié)
以上是生活随笔為你收集整理的课堂练习之四则运算加强版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库工具Navicat for MyS
- 下一篇: 在基于Jetty Fast CGI Pr