第四周课堂实践总结

课堂知识点总结

  • 数组边界值即为其中的最大最小值
  • 循环与递归
    • 循环语句
  1. for循环语句(循环体只有一条语句时,大括号最好不要省略)

for(表达式1;表达式2;表达式3) { 若干语句 }

  1. while循环语句(循环体只有一条语句时,大括号最好不要省略)

while(表达式) { 若干语句 }

  1. do-while循环语句

do{ 若干语句 }while(表达式);

  • 递归

    递归算法是一种直接或间接地调用自身的算法。在编写程序时,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。递归用于解决形式相同,规模不同的问题,能用递归解决的问题都可以转化为循环。递归把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。递归程序有两个要点:递归公式和结束条件。我们以求整数的阶乘为例:

  • 使用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 你的学号后四位。

代码如下:

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调试上面程序:

教材习题

  • 第二章
  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);

    }

}

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

  • 第三章
  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);
    }
}

  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+"是素数");
        }
    }
}

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

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

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

}

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

原文地址:https://www.cnblogs.com/besty-zyx/p/8643248.html

时间: 2024-10-09 02:31:52

第四周课堂实践总结的相关文章

《Java 程序设计》课堂实践项目汇总链接

1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和String单元测试 4.<Java 程序设计>课堂实践项目-类定义

# 20155336 2017-2018 1 《信息安全系统设计基础》2017-9-27课堂实践

20155336 2017-2018 1 <信息安全系统设计基础>2017-9-27课堂实践 第一题:vi 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号 用Vi输入图中代码,并用gcc编译通过 在Vi中使用K查找printf的帮助文档 提交vi编辑过程截图,要全屏,包含自己的学号信息 说起来很惭愧,第一次接触虚拟机,对很多地方都陌生,正好趁学习这门课程掌握一下虚拟机的基本操作. 首先创建一个文件夹,命名为text1.然后将第一道题的要求都录入进去.录入完毕后,输入`gcc *.

20155318 第十六周课堂实践——嵌入式基础

20155318 第十六周课堂实践加分作业 测试中错误部分的理解和学习 根据下图,完成对时分秒的提取和设置 课上提交的答案: 错误原因:没有注意时间变量和地址问题,应在修改为: #define Time_Addr 0xFFFFC0000 //实时钟芯片的IO映像基址是OxFFFFC0000 #define TIME *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中 int getHours() { int time=TIME; return (tim

20165326 第四周课堂测试

第四周课堂测试 知识点:命令行参数(字符串改变为int型输入),递归,利用jdb进行调试 一开始写的时候利用了for循环 for(int t:tmp){ int sum=0; if(t<0) System.out.println("wrong"); else{ for(int i=1;i<=t;i++){ int a=1; for(int j=1;j<=i;j++){ a=a*j; } sum=sum+a; } if(sum<0) System.out.prin

七牛云徐晶:基于 WebRTC 架构的直播课堂实践

8 月 18 日下午,在七牛云架构师实践日第三十期,七牛云教育行业产品研发总监徐晶进行了<基于 WebRTC 架构的直播课堂实践>为题的实战分享.? 本文是对演讲内容的实录整理.??作者简介:??七牛云教育行业产品研发总监,拥有 12 年互联网行业经验.擅长将传统行业与互联网结合,形成具有 Plus 效果的互联网产品.曾在阿里巴巴大文娱负责整个优酷直播业务,目前任职七牛云教育行业产品研发总监,构建互联网教育云计算模型,打造在线教育行业的云计算解决方案,突破传统教育壁垒.? 流媒体协议与功能的演

20172303 2018-2019-1 《程序设计与数据结构》第2周课堂实践修改报告

20172303 2018-2019-1 <程序设计与数据结构>第2周课堂实践修改报告 测试内容 写出链表中结点插入的操作代码: public static void InsertNode(Student Head, Student node){ } 需求分析:该题要求的是在一个链表的结尾插入一个新的结点 测试过程 设计思路: 创建一个临时的指针temp用于遍历整个链表直至找到结尾 将temp指向新创建的指针node 测试过程 首先,需要编写Student类.在这个类中定义构造函数(包括姓名.

20172303 2018-2019-1 《程序设计与数据结构》第5周课堂实践报告

20172303 2018-2019-1 <程序设计与数据结构>第5周课堂实践报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 范雯琪 学号:20172303 实验教师:王志强 助教:张师瑜/张之睿 实验日期:2018年10月12日 必修/选修: 必修 测试内容 ASL测试 已知线性表具有元素{5,13,19,21,37,56,64,75,80,88,92},如果使用折半查找法,ASL是多少? 要求:写出结题过程 测试原理 ASL(Average Search Leng

20172321 第六周课堂实践修改报告

20172321 第六周课堂实践修改报告 20172321 第六周课堂实践修改报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 吴恒佚 学号: 20172321 实验教师:王志强 测试日期:2018年10月19日 必修/选修: 必修 题目要求 错误题目及原因 错题1:二分查找 原因:这次二分查找的元素个数为偶数个,我的理解有点问题,所以把数字10查找了4次 错题2:散列查找 原因:对元素21的位置判断错误 题目分析及错题修改 二分查找 从有序列表的中间元素开始查找,如果中间元素不是

第四周课堂测试汇编2完善

第四周汇编2课堂测试画的图抽象且不完整,这里做一下补充. (1)源代码: int g(int x){ return x+3; } int f(int x){ int i=2: return g(x)+i; } int main(void){ return f(8)+1; } (2)汇编代码: g: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax addl $3, %eax popl %ebp ret f: pushl %ebp movl %esp, %