Day04-课后练习以及参考答案(流程控制语句_循环结构)

news2024/9/21 10:59:25

文章目录

  • 巩固题
    • 1、5个一行输出1-100之间的偶数
    • 2、趣味折纸
    • 3、实现输出如下任一个数字三角形
    • 4、计算这一天是这一年的第几天
  • 拔高题
    • 1、计算这一天是这一年的第几天
    • 2、计算这一天是在打鱼还是晒网
    • 3、打印『X』对称图形
    • 4、打印空心菱形

巩固题

1、5个一行输出1-100之间的偶数

(1)输出1-100偶数,

(2)要求:每5个偶数一行,一行中的每个偶数数字之间使用逗号分隔

在这里插入图片描述

public class Homework1 {
    public static void main(String[] args) {
        for (int i=2; i<=100; i+=2){
            if(i%10 != 0){
                System.out.print(i + ",");
            }else{
                System.out.println(i);
            }
        }
    }
}

public class Homework1 {
    public static void main(String[] args) {
        int count = 0;
        for (int i=2; i<=100; i+=2){
            count++;
            if(count<5){
                System.out.print(i + ",");
            }else{
                System.out.println(i);
                count = 0;
            }
        }
    }
}

2、趣味折纸

世界上海拔最高山峰是珠穆朗玛峰,它的高度是8848.86米,假如有一张足够大的纸,它的厚度是0.1毫米。

在这里插入图片描述

请问,这张纸需要折叠(对折)多少次,才可以折成珠穆朗玛峰的高度?

参考答案:

public class Homework2 {
    public static void main(String[] args) {
        //定义一个计数器,初始值为0
        int count = 0;

        //定义珠穆朗玛峰的高度
        int zf = 8848860;//单位毫米

        //循环的执行过程中每次纸张折叠,纸张的厚度要加倍
        for(double paper = 0.1; paper < zf;  paper *= 2,count++){
            //在循环中执行累加,对应折叠了多少次
        }
        
        double paper = 0.1;
        while(true) {
            count++;
            paper *= 2;
            if(paper >= zf) break;
        }

        //打印计数器的值
        System.out.println("需要折叠:" + count + "次");
    }
}

3、实现输出如下任一个数字三角形

案例需求:请用循环输出如下数字三角形

1
12
123
1234
123451
22
333
4444
555551
   222
  33333
 4444444
555555555

参考答案:

public class Homework3 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5 ; i++) {
            for (int j = 1; j <=i ; j++) {
                System.out.print(j);
            }
            System.out.println();
        }
    }
}

public class Homework3 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5 ; i++) {
            for (int j = 1; j <=i ; j++) {
                System.out.print(i);
            }
            System.out.println();
        }
    }
}

public class Homework3 {
    public static void main(String[] args) {
        for (int i = 1; i <= 5 ; i++) {
            for(int j=4; j>=i; j--){
                System.out.print(" ");
            }
            for(int j=1; j<=2*i-1; j++){
                System.out.print(i);
            }
            System.out.println();
        }
    }
}

4、计算这一天是这一年的第几天

案例需求:从键盘分别输入年、月、日,使用循环for+if实现,判断这一天是当年的第几天

开发提示:

(1)每个月总天数如下:

  • 平年的2月份有28天,闰年的2月份有29天。
  • 1月、3月、5月、7月、8月、10月、12月有31天,
  • 4月、6月、9月、11月有30天。

(2)闰年的判断标准是:

  • 年份year可以被4整除,但不能被100整除

  • 或年份year可以被400整除

参考答案:

import java.util.Scanner;

public class Homework4 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("请输入年:");
        int year = input.nextInt();

        System.out.print("请输入月:");
        int month = input.nextInt();

        System.out.print("请输入日:");
        int day = input.nextInt();
        
        input.close();
        
        //计算这一天是这一年的第几天
        int days = day;
        for (int i = 1; i < month; i++) {
            if (i == 4 || i == 6 || i == 9 || i == 11) {
                days += 30;
            } else if (i == 2) {
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    days += 29;
                } else {
                    days += 28;
                }
            } else {
                days += 31;
            }
        }
        System.out.println(year + "年" + month + "月" + day + "日是这一年的第" + days + "天");
    }
}

拔高题

1、计算这一天是这一年的第几天

案例需求:

(1)从键盘分别输入年、月、日,判断这一天是当年的第几天。

(2)要求要对输入值进行合法性的判断,确保输入的年份值必须大于0,月份值必须在[1,12]之间,日期值必须在[1, 当月最大日期值]范围内。

开发提示:

(1)每个月总天数如下:

  • 平年的2月份有28天,闰年的2月份有29天。
  • 1月、3月、5月、7月、8月、10月、12月有31天,
  • 4月、6月、9月、11月有30天。

(2)闰年的判断标准是:

  • 年份year可以被4整除,但不能被100整除
  • 或年份year可以被400整除

参考答案:

import java.util.Scanner;

public class Homework5 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        //如果要考虑输入非法值的情况,代码就比较复杂
        System.out.println("请输入日期:");
        int year;
        while(true){
            System.out.print("年:");
            year = input.nextInt();

            if(year > 0){
                break;
            }else{
                System.out.println("年份必须大于0");
            }
        }

        int month;
        while(true){
            System.out.print("月:");
            month = input.nextInt();

            if(month >=1 && month <= 12){
                break;
            }else{
                System.out.println("月份范围是[1,12]");
            }
        }

        //计算month月的总天数
        int totalDaysOfMonth;
        if (month == 2) {
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                totalDaysOfMonth = 29;
            } else {
                totalDaysOfMonth = 28;
            }
        } else if (month == 4 || month == 6 || month == 9 || month == 11) {
            totalDaysOfMonth = 30;
        } else {
            totalDaysOfMonth = 31;
        }

        int day;
        while(true){
            System.out.print("日");
            day = input.nextInt();

            if(day <= 0){
                System.out.println("日期必须大于0");
            }else if(day > totalDaysOfMonth){
                System.out.println(year +"年" + month +"月最多只有" + totalDaysOfMonth + "天");
            }else{
                break;
            }
        }

        input.close();

        //计算这一天是这一年的第几天
        int days = day;
        for (int i = 1; i < month; i++) {
            if (i == 4 || i == 6 || i == 9 || i == 11) {
                days += 30;
            } else if (i == 2) {
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    days += 29;
                } else {
                    days += 28;
                }
            } else {
                days += 31;
            }
        }
        System.out.println(year + "年" + month + "月" + day + "日是这一年的第" + days + "天");
    }
}

2、计算这一天是在打鱼还是晒网

案例需求:

(1)假设从2000年1月1日开始三天打鱼,两天晒网,

(2)从键盘输入今天的日期年、月、日,显示今天是打鱼还是晒网?

(3)开发提示:

  • 先计算这一天是这一年的第几天,即总天数
  • 再用总天数 % 5(三天打鱼两天晒网的周期),根据结果来判断是打鱼还是晒网

(4)每个月总天数:

  • 平年的2月份有28天,闰年的2月份有29天。
  • 1月、3月、5月、7月、8月、10月、12月有31天,
  • 4月、6月、9月、11月有30天。

(5)闰年的判断标准是:

  • 年份year可以被4整除,但不能被100整除
  • 或者年份year可以被400整除

参考答案:

import java.util.Scanner;

public class Homework6 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        //如果要考虑输入非法值的情况,代码就比较复杂
        System.out.println("请输入日期:");
        int year;
        while(true){
            System.out.print("年:");
            year = input.nextInt();

            if(year >=2000){
                break;
            }else{
                System.out.println("年份必须大于等于2000");
            }
        }

        int month;
        while(true){
            System.out.print("月:");
            month = input.nextInt();

            if(month >=1 && month <= 12){
                break;
            }else{
                System.out.println("月份范围是[1,12]");
            }
        }

        //计算month月的总天数
        int totalDaysOfMonth;
        if (month == 2) {
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                totalDaysOfMonth = 29;
            } else {
                totalDaysOfMonth = 28;
            }
        } else if (month == 4 || month == 6 || month == 9 || month == 11) {
            totalDaysOfMonth = 30;
        } else {
            totalDaysOfMonth = 31;
        }

        int day;
        while(true){
            System.out.print("日");
            day = input.nextInt();

            if(day <= 0){
                System.out.println("日期必须大于0");
            }else if(day > totalDaysOfMonth){
                System.out.println(year +"年" + month +"月最多只有" + totalDaysOfMonth + "天");
            }else{
                break;
            }
        }

        input.close();

        //计算[2000, year-1]年的总天数
        int days = 0;
        for(int i=2000; i<year; i++){//这个i代表年份
            if(i%4==0 && i%100!=0 || i%400==0){
                days+=366;
            }else{
                days+=365;
            }
        }

        //计算这一天是第year年的第几天
        for (int i = 1; i < month; i++) {
            if (i == 4 || i == 6 || i == 9 || i == 11) {
                days += 30;
            } else if (i == 2) {
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    days += 29;
                } else {
                    days += 28;
                }
            } else {
                days += 31;
            }
        }
        days += day;

        //判断
        System.out.print(year + "年" + month + "月" + day + "日这一天在");
        if(days%5==1 || days%5==2 || days%5==3){
            System.out.println("打鱼");
        }else{
            System.out.println("晒网");
        }
    }
}

3、打印『X』对称图形

案例效果图:

在这里插入图片描述

开发提示:

  • 平面图形涉及到有行有列,考虑到嵌套for循环
  • 一个外循环控制行,一个内循环控制输出内容
  • 在内循环中,根据变量的变化规律,判断输出"O"还是"*"

参考答案:

public class Homework7 {
    public static void main(String[] args){
        for(int i=1; i<=7; i++){//控制行数
            //(1)打印该行的*或o
			/*
			发现O+*的总个数是7个
			当i=1, 当j=1和j=7的时候是O,其余的是*
			当i=2, 当j=2和j=6的时候是O,其余的是*
			当i=3, 当j=3和j=5的时候是O,其余的是*
			当i=4, 当j=4的时候是O,其余的是*
			当i=5, 当j=5和j=3的时候是O,其余的是*
			当i=6, 当j=6和j=2的时候是O,其余的是*
			当i=7, 当j=7和j=1的时候是O,其余的是*
			*/
            for(int j=1; j<=7; j++){
                if(i==j || i==8-j){
                    System.out.print("O");
                }else{
                    System.out.print("*");
                }
            }

            //(2)每一行的最后一件事是换行
            System.out.println();
        }
    }
}

4、打印空心菱形

案例效果图:

在这里插入图片描述

开发提示:

  • 平面图形涉及到有行有列,考虑到嵌套for循环
  • 一个外循环控制行,两个内循环控制输出内容
  • 一个内循环负责输出空格,另一个内循环输出"*"或空格

案例需求:

public class Homework8 {
    public static void main(String[] args){
        //上半部分:正的等腰三角形
        //5行
        for(int i=1; i<=5; i++){
            //(1)打印空格
			/*
			当i=1,打印4个空格,j=4,3,2,1	j>=i
			当i=2,打印3个空格,j=4,3,2
			当i=3,打印2个空格,j=4,3
			当i=4,打印1个空格,j=4
			当i=5,打印0个空格,j=4,让循环条件一次都不满足
			*/
            for(int j=4; j>=i; j--){
                System.out.print("  ");
            }
            //(2)打印*
			/*
			当i=1,打印1个,j=1					j<=2*i-1
			当i=2,打印3个,j=1,2,3,
			当i=3,打印5个,j=1,2,3,4,5
			当i=4,打印7个,j=1,2,3,4,5,6,7
			当i=5,打印9个,j=1,2,3,4,5,6,7,8,9
			*/
            for(int j=1; j<=2*i-1; j++){
                //不是全部打印*
                if(j==1 || j==2*i-1){
                    System.out.print("* ");
                }else{
                    System.out.print("  ");
                }
            }
            //(3)换行
            System.out.println();
        }


        //下半部分:倒立的等腰三角形
        //4行
        for(int i=1; i<=4; i++){
            //(1)打印空格
			/*
			当i=1,1个空格,j=1		j<=i
			当i=2,2个空格,j=1,2
			当i=3,3个空格,j=1,2,3
			当i=4,4个空格,j=1,2,3,4
			*/
            for(int j=1; j<=i; j++){
                System.out.print("  ");
            }
            //(2)打印*
			/*
			当i=1,7个*,j=1,2,3,4,5,6,7  j<=9-2*i;
			当i=2,5个*,j=1,2,3,4,5
			当i=3,3个*,j=1,2,3
			当i=4,1个*,j=1
			*/
            for(int j=1; j<=9-2*i; j++){
                //不是全部打印*
                if(j==1 || j==9-2*i){
                    System.out.print("* ");
                }else{
                    System.out.print("  ");
                }
            }
            //(3)换行
            System.out.println();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1464736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【更新】ARCGIS之成片区开发方案报备坐标txt格式批量导出工具(定制开发版)

序言 之前开发的成片区开发方案报备格式是按湖北省的标准定制的&#xff0c;目前&#xff0c;自然资源部又有了新的格式要求&#xff0c;现在新增国标版的成片区开发方案报备格式导出。 之前版本软件详见&#xff1a;软件介绍 一、软件简介 本软件是基于arcgis二次开发的工具&…

YOLOv9 | 利用YOLOv9训练自己的数据集 -> 推理、验证(源码解读 + 手撕结构图)

一、本文介绍 本文给大家带来的是全新的SOTA模型YOLOv9的基础使用教程&#xff0c;需要注意的是YOLOv9发布时间为2024年2月21日&#xff0c;截至最近的日期也没有过去几天&#xff0c;从其实验结果上来看&#xff0c;其效果无论是精度和参数量都要大于过去的一些实时检测模型&…

C++力扣题目 392--判断子序列 115--不同的子序列 583--两个字符串的删除操作 72--编辑操作

392.判断子序列 力扣题目链接(opens new window) 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;&quo…

中科大计网学习记录笔记(十三):UDP 套接字编程 | 传输层概述和传输层的服务

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

LangChain支持哔哩哔哩视频总结

是基于LangChain框架下的开发&#xff0c;所以最开始请先 pip install Langchain pip install bilibili-api-python 技术要点&#xff1a; 使用Langchain框架自带的Document loaders 修改BiliBiliLoader的源码&#xff0c;自带的并不支持当前b站的视频加载 源码文件修改&a…

Microsoft的PromptBench可以做啥?

目录 PromptBench简介 PromptBench的快速模型性能评估 PromptBench数据集介绍 PromptBench模型介绍 PromptBench模型加载遇到的问题 第一次在M1 Mac上加载模型 vicuna和llama系列模型 PromptBench各个模型加载情况总结 PromptBench的Prompt快速工程 chain of thought…

【Qt学习】QLineEdit 控件 属性与实例(登录界面,验证密码,正则表达式)

文章目录 1. 介绍2. 实例使用2.1 登录界面2.2 对比两次密码是否相同2.3 通过按钮显示当前输入的密码&#xff08;并对2.2进行优化&#xff09;2.4 结语 3. 正则表达式3.1 QRegExp3.2 验证输入内容 4. 资源代码 1. 介绍 关于 QLineEdit 的详细介绍&#xff0c;可以去查阅官方文…

【Spring】IoC容器 控制反转 与 DI依赖注入 三种实现方式 总结 第五期

目录 1 - 4 期三种配置方式总结1. XML方式配置总结2. XML注解方式配置总结3. 完全注解方式配置总结 整合Spring5-Test5搭建测试环境 1 - 4 期 介绍 IoC DI Xml实现 IoC DI 注解 Xml 实现 IoC DI 完全注解实现 三种配置方式总结 1. XML方式配置总结 所有内容写到xml格式…

Linux第63步_为新创建的虚拟机添加必要的目录和安装支持linux系统移植的软件

1、创建必要的目录 输入密码“123456”&#xff0c;登录虚拟机 这个“zgq”&#xff0c;是用户名&#xff0c;也是下面用到的的“zgq”目录。 1)、创建“/home/zgq/linux/”目录 打开终端&#xff0c;进入“/home/zgq/”目录 输入“mkdir linux回车”&#xff0c;创建“/ho…

VUE3使用three.js显示3D模型

使用3D模型作为自动化系统的界面已经成为潮流。尽管在AutomationML 中推荐COLLADA作为 3D 模型的标准。但是COLLADA的开发者khronos 集团却已经开发了COLLADA的后继者glTF 。glTF 2.0已经成为国际标准ISO/IEC 12113:2022。 Khronos声称-‘glTF是3D里的JPEG’。目前看来glTF 更加…

【Linux】 login命令使用

login命令 在 Linux 中用于创建一个新的会话&#xff0c;并在新会话中登录用户。这个命令通常在终端中自动执行&#xff0c;当你打开一个新的终端会话或者通过 SSH 远程连接到 Linux 服务器时。 在命令后面附加欲登入的用户名称&#xff0c;它会直接询问密码&#xff0c;等待…

软件压力测试:测试方法与步骤详解

随着软件应用的不断发展&#xff0c;用户对系统性能的要求也逐渐提高。在不同的负载条件下&#xff0c;系统必须能够保持稳定、高效的运行。软件压力测试是一种验证系统在各种负载情况下性能表现的关键手段。本文将详细探讨软件压力测试的方法和步骤。 1. 明确测试目标 在进行压…

canvas水波纹效果,jquery鼠标水波纹插件

canvas水波纹效果&#xff0c;jquery鼠标水波纹插件 效果展示 jQuery水波纹效果&#xff0c;canvas水波纹插件 HTML代码片段 <div class"scroll04wrap"><h3>发展历程</h3><div class"scroll04"><p>不要回头&#xff0c;一…

Sora背后的论文(1):使用 lstms 对视频展现进行无监督学习

之前那篇《Sora背后的32篇论文》发出后&#xff0c;大家都觉得不错&#xff0c;有很多小伙伴都开始啃论文了。 那么我就趁热打铁&#xff0c;把这32篇论文的通俗解读版贴一下。 从去年开始&#xff0c;我基本上形成了一个思维方式&#xff0c;任何事情做之前先看看 有没有好的…

C++力扣题目 647--回文子串 516--最长回文子序列

647. 回文子串 力扣题目链接(opens new window) 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 示例 1&#xff1a; 输入&#xff1a…

C++ 文件操作-文本文件-读取和打开文件方法详解

读文件步骤 #include <iostream> using namespace std; #include <fstream> #include <string> //文本文件 读文件void test(){// 1 包含头文件// 2 创建流对象ifstream ifs;// 3 打开文件 并且判断是否打开成功ifs.open("table.txt",ios::in); //…

力扣随笔之两数之和 Ⅱ -输入有序数组(中等167)

思路&#xff1a;在递增数组中找出满足相加之和等于目标数 定义左右两个指针&#xff08;下标&#xff09;从数组两边开始遍历&#xff0c;若左右指针所指数字之和大于目标数&#xff0c;则将右指针自减&#xff0c;若左右指针所指数字之和小于目标数&#xff0c;则左指针自加&…

C# CAD2016 cass10宗地Xdata数据写入

一、 查看cass10写入信息 C# Cad2016二次开发获取XData信息&#xff08;二&#xff09; 一共有81条数据 XData value: QHDM XData value: 121321 XData value: SOUTH XData value: 300000 XData value: 141121JC10720 XData value: 权利人 XData value: 0702 XData value: YB…

VSCode-更改系统默认路径

修改vscode中的默认扩展路径&#xff1a;"%USERPROFILE%\.vscode" 打开目录C:\用户\电脑用户名&#xff0c;将.vscode文件剪切至D:\VSCode文件夹下 用管理员身份打开cmd.exe命令界面输入mklink /D "%USERPROFILE%\.vscode" "D:\VSCode\.vscode\"…

AI工具新革命:从ChatGPT到Sora,生成式AI改变世界

这个春节着实精彩&#xff0c;“春山学”吃透了&#xff0c;不如把目光移向OpenAI又一重磅产品——文生视频大模型Sora。智能新纪元已然开启&#xff0c;因为正如周鸿祎所说&#xff1a;“,Sora的诞生意味着AGI&#xff08;通用人工智能&#xff09;的实现将从10年缩短到1年。”…