




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)2.3 循環(huán)程序設(shè)計(jì)1 實(shí)驗(yàn)?zāi)康模?) 掌握三種循環(huán)語句的使用,能分析循環(huán)的執(zhí)行過程;(2) 掌握break和continue語句的使用;(3)了解如何利用求余和整除操作獲取和刪除一個(gè)整數(shù)的最低位;(4) 掌握累加、累乘的處理方法。(5) 掌握計(jì)數(shù)問題的編寫技巧,如何控制每行輸出元素個(gè)數(shù)。2 知識(shí)要點(diǎn) 循環(huán)就是反復(fù)執(zhí)行一段代碼,直到滿足結(jié)束條件。循環(huán)語句一般包括初始化、循環(huán)體、迭代和判斷4部分。2.1 while循環(huán)與do while循環(huán)的使用差異while語句的格式: while (條件表達(dá)式)
2、60; 循環(huán)體 特點(diǎn)是“先判斷、后執(zhí)行”,循環(huán)體有可能執(zhí)行0次。dowhile循環(huán)的格式: do 循環(huán)體 while (條件表達(dá)式) 特點(diǎn)是“先執(zhí)行,后判斷”,循環(huán)體至少要執(zhí)行1次。建議: 在程序設(shè)計(jì)中盡量不用do while循環(huán),而用while循環(huán)。2.2 for循環(huán)與while循環(huán)的對(duì)應(yīng)關(guān)系for (控制變量賦初值;循環(huán)條件;增值) 循環(huán)體 等價(jià)于:控制變量賦初值;While (循環(huán)條件) 循環(huán)體;控制變量增值;注意幾點(diǎn)
3、:(1)for循環(huán)的執(zhí)行過程是先做初始化,然后判斷是否滿足結(jié)束條件,若滿足,則執(zhí)行循環(huán)體,在執(zhí)行完循環(huán)體后進(jìn)行迭代增值。(2)初始化部分和增值部分可以使用逗號(hào)語句執(zhí)行多個(gè)操作;(3)三部分均為空,寫成for(;)相當(dāng)于一個(gè)無限循環(huán)。2.3 continue和break語句的作用l continue-跳過之后的語句,繼續(xù)下一輪循環(huán);l break-跳出直接所處循環(huán)。l
4、160; 帶標(biāo)號(hào)的continue可以回到標(biāo)號(hào)指定的那級(jí)循環(huán)的下一輪執(zhí)行。l 帶標(biāo)號(hào)的break可以跳出標(biāo)號(hào)指定的那級(jí)循環(huán)。2.4 常見問題處理(1)累加問題的解決辦法累加變量的初值設(shè)置在循環(huán)外,通常賦0為初值;(2)如何利用循環(huán)求階乘累乘,在循環(huán)外設(shè)置變量初值為1;(3)如何控制每行的輸出數(shù)據(jù)個(gè)數(shù)(計(jì)數(shù)問題);(4)如何產(chǎn)生一定范圍的隨機(jī)整數(shù)。Math.random()產(chǎn)生的數(shù)是0到1之間的小數(shù),不包括0和1,要產(chǎn)生隨機(jī)整數(shù)必須先放大再取整。3 樣例
5、程序樣例1:輸入一批學(xué)生成績,以-1作為結(jié)束標(biāo)記 (1)統(tǒng)計(jì)這批學(xué)生中,不及格、及格、中等、良好、優(yōu)秀的人數(shù)。 (2)求這批學(xué)生的平均分。【分析】根據(jù)要求不難看出這是一個(gè)計(jì)數(shù)和累加問題。學(xué)生數(shù)量不確定,但有一個(gè)結(jié)束標(biāo)記(-1),該問題從總體結(jié)構(gòu)是一個(gè)循環(huán)處理問題,可采用while循環(huán),當(dāng)輸入數(shù)據(jù)為-1時(shí)結(jié)束循環(huán)。為了統(tǒng)計(jì)各種情況的人數(shù),需要設(shè)立相應(yīng)的計(jì)數(shù)變量,并給其賦初值0,另外為了求平均分,必須計(jì)算總分,也就是計(jì)算出所有學(xué)生成績的累加和,然后除總?cè)藬?shù)即可得到平均。【參考程序】import java.io.*;public
6、 class Score public static void main(String args) throws IOException int s=0,b=0,c=0,d=0,e=0,f=0; /變量賦初值 BufferedReader br=new BufferedReader(new InputStreamReader(System.in); int a=Integer.parseInt(br.readLine();
7、160; /讀取一個(gè)整數(shù) while(a!=-1) s+=a; /累加 switch(a/10 ) case 0: case 1:
8、 case 2: case 3: case 4: case 5: b+;break; /計(jì)數(shù)增1 case
9、6: c+;break; case 7: d+;break; case 8: e+;break; case 9: f+;break; a=In
10、teger.parseInt(br.readLine(); System.out.println("優(yōu)秀人數(shù):"+f); System.out.println("良好人數(shù):"+e); System.out.println("中等人數(shù): "+d); System.out.println("及格人數(shù):"+c);
11、60; System.out.println("不及格人數(shù):"+b); int average=s/(b+c+d+e+f); /求平均成績 System.out.println("平均分="+average); 【說明】程序流圖見圖4-1,程序總體結(jié)構(gòu)上是一個(gè)循環(huán)問題,在循環(huán)內(nèi)部要分情況統(tǒng)計(jì)各分?jǐn)?shù)段人數(shù),包含一個(gè)是switch語句。在輸入數(shù)據(jù)時(shí)未處理異常,所以在main方法的頭部增加throws IOExcept
12、ion聲明該方法會(huì)拋出IO異常?!揪幊碳记伞?1) 用while循環(huán)控制數(shù)據(jù)的錄入和處理過程,-1作為循環(huán)的結(jié)束標(biāo)記;注意循環(huán)體的最后要有輸入數(shù)據(jù)的語句,以便得到新的處理數(shù)據(jù)。(2) 如何將各分?jǐn)?shù)檔按情況進(jìn)行分別處理,掌握除10取整后得到數(shù)據(jù)的特征。(3) 記住累加和計(jì)數(shù)問題的處理技巧。樣例2:找10100之間能被或整除的數(shù),每行輸出5個(gè)數(shù)【參考程序】public class A public static void main(String arge) int k=10; /循環(huán)控制變量,從10變化到100
13、160; int m=0; /用于統(tǒng)計(jì)輸出數(shù)的個(gè)數(shù) while(k<=100) /循環(huán)的終值為100 if(k%3=0|k%5=0) /被3或5整除 m+;
14、160; System.out.print(k+"t"); if (m%5=0) /控制每隔5個(gè)輸出數(shù)換一行 System.out.println( ); &
15、#160; k+; /循環(huán)控制變量增值 【說明】本程序是找出一定范圍內(nèi)(10100)查找滿足條件的數(shù),這里有兩個(gè)關(guān)鍵,一是如何表達(dá)一個(gè)數(shù)被3或5整除,用到求余運(yùn)算符和邏輯或;二是為了控制每行輸出5個(gè)數(shù),必須對(duì)輸出的數(shù)進(jìn)行統(tǒng)計(jì),因此,本程序的實(shí)質(zhì)也要用到計(jì)數(shù)。注意,print和println的差別?!揪幊碳记伞?1) 3或5整除的邏輯表達(dá)問題。(2) 如何控制一行輸出5個(gè)數(shù)。樣例3:編寫一個(gè)程序從鍵盤輸入10個(gè)整數(shù),將最大、最小
16、的整數(shù)找出來輸出?!緟⒖汲绦颉縤mport java.io.*;public class Find public static void main(String a) throws IOException int m=0,n=Integer.MAX_VALUE; /用m,n存放需求的最大、最小整數(shù) BufferedReader br= new BufferedReader(new Input
17、StreamReader(System.in); for (int k=1;k<=10;k+) int x=Integer.parseInt(br.readLine(); if (x>m) m=x; /如果比最大的還大,那x成為最大的. if (x<n) n=x; System.out.p
18、rintln("最大整數(shù)="+m); System.out.println("最小整數(shù)="+n); 【編程技巧】(1) 分別引入兩個(gè)變量m,n用來保存所求的最大與最小數(shù)值。在循環(huán)外為這兩個(gè)變量假定一個(gè)值(為多大合適),然后在循環(huán)內(nèi)將其他值與其比較。也可以先假定第一個(gè)數(shù)據(jù)為最大、最小,然后將剩余數(shù)據(jù)與其比較。(2)不要忘記將獲取新數(shù)據(jù)的輸入語句放在循環(huán)內(nèi)。(3)結(jié)束循環(huán)后輸出結(jié)果。樣例4:計(jì)算算式: 1+21+22+23+2n (注:n由鍵盤輸入)【參考程序1】public class Twoad
19、d public static void main(String args) int n=Integer.parseInt(args0); long sum=1; for (int k=1;k<=n;k+) sum = sum +(long)Math.pow(2,k); /用Math類的pow方法求2k
20、60; System.out.println("result="+sum); 【參考程序2】public class Twoadd public static void main(String args) int n=Integer.parseInt(args0); /從命令行輸入n long sum=1; /保存累加和
21、 long x=1; /被加項(xiàng) for (int k=1;k<=n;k+) x=x*2; /求下一個(gè)被加項(xiàng)時(shí),只要在前一項(xiàng)的基礎(chǔ)上乘2 sum=sum+x; System.out.println("result="+sum
22、); 【說明】“參考程序1”最直觀,但“參考程序2”比“參考程序1”要好,利用Math.pow(2,k)求每個(gè)累加項(xiàng)花費(fèi)的時(shí)間長,為了完成計(jì)算,在pow方法內(nèi)要執(zhí)行一段計(jì)算程序。而“參考程序2”求累加項(xiàng)則是一個(gè)乘法運(yùn)算,這里利用了前后兩個(gè)累加項(xiàng)的變化特點(diǎn)。甚至簡單寫成x=x+x形式的加法運(yùn)算更快,但可讀性不如x=x*2。【編程技巧】(1) 用循環(huán)組織累加,在循環(huán)外給累加變量賦初值,在循環(huán)內(nèi)將累加項(xiàng)加到累加變量上;(2) 分析累加項(xiàng)的變化規(guī)律,尤其是前后項(xiàng)之間的關(guān)系。(3)
23、160; 用Math類的pow方法求2的k次方,由于該方法返回為一個(gè)實(shí)數(shù),所以要用強(qiáng)制轉(zhuǎn)換為long型才能累加到sum上。樣例5:從鍵盤輸入一個(gè)長整數(shù),求其各位數(shù)字之和?!痉治觥窟@里的關(guān)鍵的如何得到各位數(shù)字,注意到得到一個(gè)整數(shù)的最低位數(shù)字可用除10求余數(shù)的辦法,而要得到該整數(shù)的除最低位外的數(shù)只要用除10取整即可。因此,利用循環(huán)即可將一個(gè)整數(shù)的所有各位數(shù)字取出?!緟⒖汲绦颉縫ublic class fang public static void main (String args) &
24、#160; int a,m=0; a=Integer.parseInt(args0); /從命令行輸入a while(a>0) m+=a%10; /累加計(jì)算各位數(shù)字 a=a/10;
25、160; System.out.print(a+"的各位數(shù)字之和="+m); 【編程技巧】(4) 如何取一個(gè)數(shù)的最低位;(5) 如何計(jì)算去掉最低進(jìn)后的數(shù);(6) 如何設(shè)置循環(huán)的條件?!舅伎肌咳绾涡薷某绦?使程序的輸出形式為: 5
26、4237=5+4+2+3+7=21樣例6:計(jì)算n至少多大時(shí),以下不等式成立。 1+1/2+1/3+1/n>10【參考程序】public class Limit public static void main(String args) int n=0; double s=0;
27、160; while (s<=10) n=n+1; / n的值增加1 s=s+1.0/n; / 進(jìn)行累加 System.
28、out.println("n="+n); /輸出最后的n 【運(yùn)行結(jié)果】n=12367【編程技巧】(1) 累加一定要表示為1.0/n的形式,如果只寫1/n則只要n大于1結(jié)果均為0。(2) 循環(huán)條件的表達(dá),以累加和的結(jié)果小于等于10為條件。結(jié)束循環(huán)時(shí),累加和大于10,n就是所求的結(jié)果。樣例7:利用隨機(jī)函數(shù)產(chǎn)生10道兩位數(shù)的加法題,判斷用戶得分。提示:產(chǎn)生隨機(jī)數(shù)用以下辦法 x=(int)(10+Math.random()*90)
29、程序運(yùn)行界面為:12+34=? xx45+67=? xx .你的得分為:70【分析】出10道題,總體是個(gè)循環(huán)問題,每一道題先要產(chǎn)生出試題,顯示試題給用戶,然后,獲取用戶的解答,比較用戶解答與計(jì)算機(jī)的計(jì)算值是否相等,如果相等,就得分。循環(huán)結(jié)束輸出得分。【參考程序】import java.io.*;public class AddTest public static void main(String args) throws IOException int x,y,z,score=0;
30、160; BufferedReader br= new BufferedReader(new InputStreamReader(System.in); for (int i=0;i<10;i+) /循環(huán)處理10道題 x =(int)(10+Math.random()*90);
31、160; /產(chǎn)生1個(gè)數(shù) y =(int)(10+Math.random()*90); /產(chǎn)生另一個(gè)數(shù) System.out.print(x+"+"+y+"=? "); /提示加法式給用戶 z =In
32、teger.parseInt(br.readLine(); /用戶輸入解答 if( x+y = z) score+=10; /解答正確,得10分 System.out.println("你的得分:"+score);&
33、#160; 【編程技巧】(1) 利用循環(huán)控制出10道題;(2) 利用隨機(jī)函數(shù)產(chǎn)生一定范圍內(nèi)的整數(shù)的方法;(3) 提示用戶,獲取輸入,進(jìn)行比較判斷得分的邏輯順序表達(dá)。(4) 循環(huán)結(jié)束輸出判分結(jié)果。4 上機(jī)練習(xí)² 基本題1)寫一個(gè)程序輸入一個(gè)整數(shù)n,輸出相應(yīng)三角形。例如:N=4,則三角形如下:#2) 計(jì)算算式: 1-1/2+1/3-1/4+1/5-1/1003) 輸出九九乘法表,格式如下: 1*1=1 1*1=2
34、0; 1*3=3 2*1=1 2*2=2 2*3=3 9*1=1 9*2=18 9*3=27 4) 編寫一個(gè)程序,用于輸出Fibonacci數(shù)列的前20項(xiàng)。5) 編寫一個(gè)程序,輸出90度以內(nèi)的各度的sin()函數(shù)值。² 提高題1) 編寫一個(gè)猜數(shù)的應(yīng)
35、用程序,用隨機(jī)函數(shù)產(chǎn)生一個(gè)10到99的隨機(jī)數(shù)。根據(jù)猜中使用的次數(shù)x計(jì)算得分。每次猜完給出是大于還是小于的提示。注:得分計(jì)算辦法:110-x*10 ;(其中,x為猜的次數(shù))2)找出1100之間擁有除數(shù)最多的數(shù)。【提示】在一定范圍內(nèi)找目標(biāo)數(shù),所以總體上是一個(gè)循環(huán)問題。對(duì)于每個(gè)被檢測的數(shù),要統(tǒng)計(jì)出其擁有除數(shù)的個(gè)數(shù),這又是個(gè)循環(huán)問題,也就是在外循環(huán)內(nèi)有內(nèi)循環(huán)。為了求出擁有除數(shù)最多的哪個(gè)數(shù),還涉及比較問題,所以要引入兩個(gè)變量記下符合條件的這個(gè)數(shù)以及最多擁有的除數(shù)個(gè)數(shù),在每次考察一個(gè)數(shù)的除數(shù)個(gè)數(shù)后要與最多者進(jìn)行比較,從而決定是否要修改最多者。3) 編寫一個(gè)人與計(jì)算機(jī)對(duì)拿火柴的游戲程序。利用隨機(jī)函數(shù)Math
36、.random()產(chǎn)生火柴數(shù)量(2050), 每次最多拿3根,拿到最后一根為勝者。要求:游戲過程要顯示火柴總數(shù),選擇誰先拿;每步要顯示剩余火柴數(shù)量,以及計(jì)算機(jī)拿的數(shù)量,并提示用戶輸入拿多少;結(jié)束時(shí)顯示誰是勝者。【解題算法提示】(1) 產(chǎn)生火柴總數(shù)(amount); (2) 決定隨先拿(whoplay:1-人, 2-計(jì)算機(jī)); (3) 定義一個(gè)變量保存剩余火柴數(shù)量(remain)=amount ;(4) 當(dāng)remain>0 循環(huán) 4.1 根據(jù)whoplay的值決定是計(jì)算機(jī)拿x根還是提示人拿x根;計(jì)算機(jī)拿時(shí)最好
37、帶有智能,人拿時(shí)要限制輸入數(shù)量。 4.2 修改 whoplay的值; 4.3 修改remain的值;(5) 根據(jù)whoplay的值決定勝者4)某地刑偵大隊(duì)對(duì)涉及六個(gè)嫌疑人的一樁疑案進(jìn)行分析: A、B至少有一人作案; A、E、F三人中至少有兩人參與作案; A、D不可能是同案犯; B、C或同時(shí)作案,或與本案無關(guān); C、D中有且僅有一人作案;如果D沒有參與作案,則E也不可能參與作案。 試編一程序,將作案人找出來。5 思考題1)執(zhí)行以下程序后,輸出結(jié)果為public class e
38、x2 public static void main(String args) int f=1; int k; for (k=2;k<5;k+) f*=k; System.out.println(k); A. 0 B. 1
39、; C. 5 D. 4 E. 242) 設(shè)有如下類class Loop public static void main(String agrs) int x=0;int y=0; outer: for(x=0;x<100;x+) middle:
40、 for(y=0;y<100;y+) System.out.println("x="+x+" y="+y); if(y=10) <<<insert code>>>
41、160; 在<<<insert code>>>處插入什么代碼可以結(jié)束外循環(huán)?Acontinue middle;Bbreak outer;Cbreak middle;Dcontinue outer;Enone of these3)以下代碼的運(yùn)行結(jié)果為:public class Calc public static void main (String args ) int total = 0; for (int i
42、 = 0, j = 10; total > 30; +i, -j) System.out.println(" i = " + i + " : j = " + j); total += (i + j); System.out.println("Total
43、 " + total); A. 產(chǎn)生運(yùn)行錯(cuò)誤B. 產(chǎn)生編譯錯(cuò)誤C. 輸出 "Total 0"D. 產(chǎn)生如下輸出: i = 0 : j = 10 i = 1 : j = 9 i = 2 : j = 8 Total 304)以下程序的運(yùn)行結(jié)果為: public class test public static void main(String args) int i
44、=0, j=2; do i=+i; j-; while(j>0); System.out.println(i); A. 0 B. 1 &
45、#160;C. 2 .35)以下程序的運(yùn)行結(jié)果為? class xyz public static void main(String args) int i,j,k; for (i = 0; i < 3; i+) for(j=1; j < 4; j+)
46、160; for(k=2; k<5; k+) if(i = j) && (j=k) System.out.p
47、rintln(i); A. 0 B. 1&
48、#160; C. 2 D. 3 E. 4 6) 以下程序的運(yùn)行結(jié)果為?class test public static void main(String args) int i,j=0; for(i=10;i<0;i-) j+; switch(j)
49、case (0) : j=j+1; case (1) : j=j+2; break; case (2) : j=j+3; break; case (10) : j=j+10; break; default : break;
50、60; System.out.println(j); A. 0 B. 1 C. 2 D. 3 E. 10 7) 觀察以下程序段: int i=1,j=10; do if(i+>-j) continue; while(i<5); 執(zhí)行完后,i、j的值分別為: A i=6 j=5
51、; B i=5 j=5 C i=6 j=4 D i=5 j=68)以下程序的輸出結(jié)果為: public class example public static void main(String args) int s=0; for (int i=0;i<5;i+) for (int j=10;j>3*i;j-) s += i*j; System.out.println(s); A. 127
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省寧德市2024-2025學(xué)年高二上學(xué)期期末質(zhì)量檢測數(shù)學(xué)試題(解析版)
- 2025年餐廚垃圾車項(xiàng)目發(fā)展計(jì)劃
- 2025年古馬隆樹脂項(xiàng)目建議書
- 碟閥維修施工方案
- 培訓(xùn)工作總結(jié)與規(guī)劃
- 2025年洗滌劑用4A沸石項(xiàng)目發(fā)展計(jì)劃
- 腫瘤臨床表現(xiàn)
- 課題開題報(bào)告:基于“養(yǎng)正”學(xué)校文化的小學(xué)班級(jí)自主管理的實(shí)踐研究
- 課題開題報(bào)告:湖北省行業(yè)特色高??平倘趨R賦能新質(zhì)生產(chǎn)力實(shí)踐路徑研究
- 學(xué)校監(jiān)控系統(tǒng)施工方案
- 一至六年級(jí)下冊音樂期末試卷及答案
- 多介質(zhì)過濾器計(jì)算書
- 完整戶口本英文翻譯模板(共4頁)
- 高二通用技術(shù)-經(jīng)典結(jié)構(gòu)的欣賞課件說課講解
- 鑼鼓曲譜16762
- 數(shù)獨(dú)入門技巧宮摒除法使用
- 使用深埋錨改善橋梁墩柱預(yù)應(yīng)力施工效果
- 三、QHLY系列——露頂式弧形門閘門液壓啟閉機(jī)
- 《病毒性肝炎》課件.ppt
- UCP600中英文對(duì)照版
- 泄露檢測負(fù)壓波檢漏
評(píng)論
0/150
提交評(píng)論