第四周課堂實踐總結

課堂知識點總結

  • 數組邊界值即爲其中的最大最小值
  • 循環與遞歸
    • 循環語句
  1. for循環語句(循環體只有一條語句時,大括號最好不要省略)
for(表達式1;表達式2;表達式3) {
      若干語句
  }
  1. while循環語句(循環體只有一條語句時,大括號最好不要省略)
while(表達式) {
     若干語句
 }
  1. do-while循環語句
do{
      若干語句
  }while(表達式);
  • 遞歸html

    遞歸算法是一種直接或間接地調用自身的算法。在編寫程序時,遞歸算法對解決一大類問題是十分有效的,它每每使算法的描述簡潔並且易於理解。遞歸用於解決形式相同,規模不一樣的問題,能用遞歸解決的問題均可以轉化爲循環。遞歸把一個大型複雜的問題層層轉化爲一個與原問題類似的規模較小的問題來求解,遞歸策略只需少許的程序就可描述出解題過程所須要的屢次重複計算,大大地減小了程序的代碼量。遞歸的能力在於用有限的語句來定義對象的無限集合。用遞歸思想寫出的程序每每十分簡潔易懂。遞歸程序有兩個要點:遞歸公式和結束條件。咱們以求整數的階乘爲例:
    imagejava

  • 使用JDB調試java程序算法

    1. 在Linux Bash中輸入 vim 類名。java編輯調試代碼
    2. 使用javac -g -d bin src/類名.java對程序進行編譯(注意javac中-g參數是爲了產生各類調試信息,必定要加上,不然沒法調試)
    3. 使用jdb -classpath .:./bin 類名對程序進行調試
    4. 開始調試:經過運行stop in 類名.main命令在main方法開始處設置斷點
    5. 輸入run命令來運行類名.class,程序會在main()的開始處停下
    6. 能夠用locals命令查看變量,用step命令運行下一行代碼
    7. 可使用list來查看運行到了源代碼的什麼位置
    8. 可使用print或eval命令來查看變量的值
    9. 能夠經過stop at HelloJDB:12在第12行設個斷點,而後運行cont就會一會兒把循環運行完並停在第十二行
    10. 使用quit或exit能夠退出JDB

課堂內容補作

  • 循環與遞歸編程

    參考2016-2017-2 《Java 程序設計》課堂實踐項目編程實現1!+2!+3!+... + N!的功能。N由命令行傳入,好比類名爲SumofRecur, java SumofRecur 8 給出1!+2!+3!+... + 8!的值,提交運行結果的截圖(至少五張),注意測試正常,異常,邊界狀況, 好比java SumofRecur -8,java SumofRecur 0,java SumofRecur 你的學號後四位。vim

代碼以下:數組

public class CLSumRecursion {
    public static void main(String args[]) {
        int sum = 0;
        if(args.length < 1) {
            System.out.println("Usage:java CLSumRecursion num1 num2 ...");
            System.exit(0);
        }
        int tmp[] = new int[args.length];
        for(int i=0;i<args.length;i++) {
            tmp[i] = Integer.parseInt(args[i]);
        }
                if(tmp[0]<=0) {
            System.out.println("Please check your input!");
            System.exit(0);
        }
        else {
            for(int j=1;j<=tmp[0];j++) {
            sum += fact(j);
            }
        }
        if(sum<=0) {
            System.out.println("Please check your input!");
            System.exit(0);
        }
        else
            System.out.println(sum);
    }
    public static int fact(int n) {     
        if(n == 0)
            return 1;
        else
            return n*fact(n-1);
    }
}

運行結果截圖:
image測試

  • JDB調試上面程序:
    image
    image

教材習題

  • 第二章
  1. 編寫一個應用程序,給出漢字「你」 「我」 「他」在Unicode表中的位置。
public class xiti2_1 {

    public static void main(String args[]) {

        char a = '你';

        char b = '我';

        char c = '他';

        System.out.println("漢字:"+a+"的位置:"+(int)a);

        System.out.println("漢字:"+b+"的位置:"+(int)b);

        System.out.println("漢字:"+c+"的位置:"+(int)c);

    }

}

image

  1. 編寫一個Java應用程序,輸出所有的希臘字母。
public class xiti2_2{
        public static void main(String[] args) {
            for (int j = 913; j < 930; j++) { //j表明每一個字母的ASCII代碼
                System.out.print((char)j+" "); //將ASCII代碼轉換成字符就是每一個字母了
            }
            for (int j = 932; j < 938; j++) { //中間空了一個
                System.out.print((char)j+" ");
            }
            for (int j = 945; j < 970; j++) { //大小寫中間空了好幾個,都跳過了
                System.out.print((char)j+" ");
            }
        }
}

image

  • 第三章
  1. 編寫應用程序求1!+2!+...+10!。
public class xiti3_1 {
    public static void main(String args[]) {
        int sum = 0;
        int n = 10;
        for(int i = 1;i<=n;i++) {
            sum = sum+fact(i);
        }
        System.out.println(sum);
    }
       public static int fact(int i) {
        if(i == 0)
            return 1;
        else
            return i*fact(i-1);
    }
}

image

  1. 編寫一個應用程序求100之內的所有素數。
public class xiti3_2 {
    public static void main(String args[]) {
        int i,j;
        for(i=2;i<=100;i++) {
            for(j=2;j<=i/2;j++) {
                if(i%j==0)
                    break;
            }
        if(j>i/2)
            System.out.println(" "+i+"是素數");
        }
    }
}

image

  1. 分別用do-while和for循環計算1+1/2!+1/3!+1/4!+...的前20項和。
public class xiti3_3_1 {
    public static void main(String args[]) {
        double sum = 0;
        for(int i=1;i<=20;i++) {
            sum = sum+1.0/fact(i);
        }
        System.out.println(sum);
    }
    public static int fact(int n) {
        if(n==0) 
            return 1;
        else
            return n*fact(n-1);
    }
}
public class xiti3_3_2 {
    public static void main(String args[]) {
        double sum = 0;
        int i = 1;
        do {
            sum=sum+1.0/fact(i);
            i++;
        }while(i<=20);
        System.out.println(sum);
    }
    public static int fact(int n) {
        if(n==0)
            return 1;
        else
            return n*fact(n-1);
    }
}

image

  1. 一個數若是剛好等於它的因子之和,這個數就稱爲完數。編寫應用程序求1000以內的全部完數。
public class xiti3_4 {
    public static void main(String args[]) {
        int i;
        for(i=1;i<=1000;i++) {
            if(wanshu(i)==1)
                System.out.println(i+"是完數");
            else
                continue;
        }
    }
    public static int wanshu(int i) {
        int sum = 0;
        for(int j=1;j<i;j++) {
            if(i%j==0)
                sum=sum+j;
        }
        if(sum==i)
            return 1;
        else
            return 0;
    }
}

image

  1. 編寫應用程序,使用for循環語句計算8+88+888+...前10項之和。
public class xiti3_5 {
    public static void main(String args[]) {
         long i=1,sum=0,a=8,item=a;
             for(i=1;i<=10;i++)
             {
                 sum=sum+item;   
                 item=item*10+a;
             }
          System.out.println(sum);
    }

}

image

  1. 編寫應用程序,輸出知足1+2+3+...+n<8888的最大正整數n。
public class xiti3_6 {
    public static void main(String args[]) {
        int sum = 0;
        int i = 1;
        while(sum<8888){
            sum=sum+i;
            i++;
        }
        System.out.println(i-1);
    }
}

image

相關文章
相關標籤/搜索