天天看點

練習題——流程控制語句(下)

上一次我總結了有關選擇結構的 if 和 switch 語句的練習題,相比于今天要總結的循環結構要簡單許多,是以這次總結會更加細緻。

這裡先總結一個解決for循環的方法:

  • 先看行與行之間的規律。因為這個規律比較明顯,是以我們一般将這個for循環寫在最外層
  • 其次觀察每一行(列)有什麼規律。如果每一行的規律不止一個,那就還是按規律比較明顯的先寫。(這時就是嵌套 for 循環,注意格式的縮進)。
  • 最後跳出循環,完成剩下的程式性代碼。
練習題——流程控制語句(下)

分析:圖案1:按照步驟,我們先看行與行之間的規律——每一行都比上一行的數字多一個,總共是六行

                       其次觀察每一行(列)的數字之間的規律——逐次加一,,最大數字為六,并且每個數字都要空一格

public class Home03_15{
    public static void main(String[] args){
        for(int j=1;j<=6;j++){   //行的規律:每一行的數字比上一行多一個
            for(int i=1;i<=j;i++){      //列的規律:每個數字比上一個數字加一
                System.out.print(i + " ");
            }
            System.out.println();   //每一行完後要進行換行
        }
    }
}
           

運作結果:

練習題——流程控制語句(下)

       圖案2:按照步驟:先看行與行之間的規律——每一行都比上一行的數字少一個,總共是六行

                    其次觀察每一行(列)的數字之間的規律——逐次加一,,最大數字為六,并且每個數字都要空一格

public class Home03_15b{
    public static void main(String[] args){
        for(int j=6;j>=1;j--){
            for(int i=1;i<=j;i++){
                System.out.printf(i + " ");
            }
            System.out.println();
        }
    }
}
           

運作結果:

練習題——流程控制語句(下)

       圖案3:按照步驟,我們先看行與行之間的規律——每一行都比上一行的數字少一個,總共是六行。但是我們會發現這個圖   有空白部分,其實那是空格。

                    其次觀察每一行(列)的規律,首先是空格的規律,每一行的空格數都比上一行少一個,然後是數字,每一個數字都比前一個數字大一。

public class Home03_15c{
    public static void main(String[] args){
        for(int k=1;k<=6;k++){    //行,每一行的數字都比上一行多一個
            for(int j=1;j<=(6-k);j++){       //空格,每一行的空格數都比上一行少一個
                System.out.printf(" ");
            }
            for(int i=1;i<=k;i++){      //數字,每一個數字都比上一個數字大一
                System.out.print(i);
            }
            System.out.println();
        }
    }
}
           

運作結果:

練習題——流程控制語句(下)

        圖案4:按照步驟,我們先看行與行之間的規律——每一行都比上一行的數字多一個,總共是六行。但是我們會發現這個圖   有空白部分,其實那也是空格。

                    其次觀察每一行(列)的規律,首先是空格的規律,每一行的空格數都比上一行少一個,然後是數字,每一個數字都比前一個數字大一。

public class Home03_15d{
    public static void main(String[] args){
        for(int k=1;k<=6;k++){      //行
            for(int j=1;j<=(k-1);j++){    //空格
                System.out.print(" ");
            }
            for(int i=1;i<=(7-k);i++){     //數字
                System.out.print(i);
            }
            System.out.println();
        }
    }
}
           

運作結果:

練習題——流程控制語句(下)
練習題——流程控制語句(下)

分析:我們先觀察這個圖的規律,發現它是兩邊對稱的,對于這種對稱圖形,我們一般會運用絕對值來确定它的範圍,這樣就能得到一個對稱圖形。

           按照步驟, 因為我們把這個圖分成了左右對稱的兩部分,是以還是每一行都比上一行多一個數字,還有空格。

           其次觀察每一行的數字(列),我們會發現每個數都是2的次方,2的0次方、2的1次方......最高是2的7次方,并且每一行的最高次幂都是這一行的行數-1.

class Home03_16{
    public static void main(String[] args){
        for(int i=1;i<=8;i++){      //行
            for(int j=1;j<=8-i;j++){     //空格
                System.out.print("    ");
            }
            for(int k=-(i-1);k<=i-1;k++){     //根據圖形對稱性及最高次幂  
                System.out.printf("%4.0f",Math.pow(2,i-1-Math.abs(k)));
            }    //4.0f是為了格式的整齊,Math.pow是指數,用絕對值表示圖形對稱
            System.out.println();        //每一行之間進行換行
        }
    }
}
           

運作結果:

練習題——流程控制語句(下)

以上是有關圖形的循環結構的習題,我們所遇到的問題肯定不止圖形,更多的是代數,例如求和、求具有規律性的算法......是以下面就是一些有關代數的循環題。

練習題——流程控制語句(下)

分析:我們觀察等式,發現等式最後一項分式已經告訴了我們每個分式分母的規律,2*項數-1。

           那我們下來就要觀察每個分式之間的規律,奇數項前面是負号偶數項前面是正号,正負交錯。

import java.util.Scanner;
class Demo03_18{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("請輸入一個數字:");
        int imax=scanner.nextInt();
        double sum=0;
        double flag=1;
        for(int i=1;i<=imax;i++){        //插入項數
            sum+=flag/(2*i-1);      //求出每個項,并且對所有項求和      
            flag=-flag;          //變換每個項前面的符号,一正一負
        }
        double pi=sum*4;
        System.out.println(pi);
    }
}
           

運作結果:

練習題——流程控制語句(下)
練習題——流程控制語句(下)

分析:我們首先要知道用十進制怎麼求出二進制,那就是用十進制一直除以2,直到商0,那麼所有的餘數就是二進制。那麼這裡就要用到while循環了。但是數字和數字相加還是一個數字,那怎麼辦呢?這就需要用到字元串,因為字元串和數字隻能疊加,運用while循環之後,什麼時候跳出循環呢?就是商0的時候,這時就要用到 if 語句了。

import java.util.Scanner;
class Demo03_23{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("請輸入一個數字:");
        int num=scanner.nextInt();
        String binStr="";
        while(true){
            binStr=num%2+binStr;
            num/=2;
            if(num==0){
                break;
            }
        }
        System.out.println(binStr);
    }
}
           

運作結果:

練習題——流程控制語句(下)