循環(huán)程序設(shè)計(jì)_第1頁
循環(huán)程序設(shè)計(jì)_第2頁
循環(huán)程序設(shè)計(jì)_第3頁
循環(huán)程序設(shè)計(jì)_第4頁
循環(huán)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論