20165312-第4周-课上内容补做以及知识点总结

20165312-第4周-课上内容补做以及知识点总结

1、课上内容补做

  • 教材代码完成情况测试p45

这题很快就做完了,然后忘记提交了。。就开始做递归。想起来的时候已经过了时间。

public class Example3_7 {
    public static void main(String args[]) {
        int sum=0,i,j;
        for(i=1;i<=10;i++) {
            if(i%2==0) {   //计算1+3+5+7+9
                continue;
            }
            sum=sum+i;
        }
    System.out.println("sun="+sum);
    for(j=2;j<=5312;j++) {
        for(i=2;i<=j/2;i++) {                         if(j%i==0)
             break;
        }
        if(i>j/2) {
            System.out.println(""+j+"是素数");
        }
    }
    }
}

运行截图:

  • 递归与循环

课堂上的代码出现了一个细小的错误,导致无论输入什么数字,都会退出。出现问题的地方:

for(int i=1;i<args.length;i++) {
    tmp[i] = Integer.parseInt(args[i]);
}

i从1开始,就导致是从第二个数字开始转化成int型,所以无论输入什么,都会退出。

正确代码:

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);
        }
}

运行截图:

  • JDB

    • jdb CLSumRecursion 3

    • jdb CLSumRecursion 1

    • jdb CLSumRecursion 2

2.知识点总结

  • 参考Integer类中的方法把字符串转为整数
public static void main(String [] args) {
        int [] tmp = new int [args.length];
        for(int i=0; i<args.length; i++) {
          tmp[i] = Integer.parseInt(args[i]);
        }
}

运行时为java 文件名 int 型数据

jdb调试时 jdb 文件名 int型数据

3.第二章编程题目

  • 编写一个程序,给出汉字“你”,“我”,“他”在Unicode表中的位置
public class exam2_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);
        }
}

  • 编写一个程序,输出全部的希腊字母
public class exam2_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+" ");
                }
        }
}

4.第三章编程题目

  • 编写应用程序求1!+2!+……+10!
public class exam3_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);
        }
}

运行截图:

  • 编写一个程序求100以内的素数
public class exam3_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+"是素数");
                }
        }
}

运行截图:

  • 分别用do-while和for循环计算1+1/2!+1/3!+……的前20项和
//for循环语句
public class exam3_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);
        }
}

运行截图:

//do-while
public class exam3_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);
        }
}

运行截图:

  • 一个数如果恰好等于它的因子之和,这个数称为完数。编写程序求1000以内的所有完数
public class exam3_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;
        }
}

运行截图:

  • 编写一个程序,使用for循环语句计算8+88+888+……前10项之和
public class exam3_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);
        }
}

运行截图:

  • 编写一个程序,输出满足1+2+3+……+n<8888的最大正整数n
public class exam3_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);
        }
}

运行截图:

参考资料:2016-2017-2 《Java 程序设计》课堂实践项目

posted on 2018-03-23 23:15  歌儿  阅读(282)  评论(3编辑  收藏  举报