循环加强训练

练习题1

中国有句老话叫“三天打渔,两天晒网”。假设有一个人从2000 年1 月1 日
 开始“三天打渔两天晒网”,读入三个整数,分别表示年份、月份、日期,
问这三个整数所表示的那天这个人在打渔还是在晒网?

解题思路:求出输入的日期到2000年1月1日一共经历了多少天,在与5取余数123在打渔,40在晒网

写法1:

Scanner input=new Scanner(System.in);
        System.out.println("请输入年月日:");
        int year=input.nextInt();
        int month =input.nextInt();
        int day= input.nextInt();
        int allday=0;
        for (int i=2000;i<year;i++){
            if ((i%4==0&&i%100!=0)||i%400==0){--------判断是否为闰年
                allday+=366;
            }
            else{
                allday+=365;
                }
            }
        for (int i=1;i<month;i++){------------因为都是等值判断使用switch,简写方式如下
        switch(i){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                allday+=31;
                break;------------------break不要忘记
            case 2:
                if((i%4==0&&i%100!=0)||i%400==0){
                    allday+=29;}
                    else{
                        allday+=28;
                }
                    break;
            default:---------------switch语句里用default来表示其余情况
                allday+=30;
                break;
        }
        }
        allday+=day;
        if (allday%5==0||allday%5==4){-----------与5取余数
            System.out.println("晒网");

        }else{
            System.out.println("打鱼");
        }

写法2

public class Test {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println("请分别输入年,月,日:");
        int year= input.nextInt();
        int month= input.nextInt();
        int day= input.nextInt();
        int [] months={31,28,31,30,31,30,31,31,30,31,30,31};----------利用数组
        if ((year%4==0&&year%100!=0)||year%400==0){
            months[1]=29;}-------------如果是闰年修改数组下标为1的值
        int date=0;
        for(int i=0;i<month-1;i++){
        date+=months[i];
            System.out.println(date);
        }
        System.out.println(date);
        for (int i=2000;i<year;i++){
            if ((year%4==0&&year%100!=0)||year%400==0){-------判断是否闰年
                date+=366;
            }else {
                date+=365;
            }
        }
        date+=day;
        System.out.println(date);
        if (date%5<=3&&(date%5!=0)){--------------取余5
            System.out.println(year+"年"+month+"月"+day+"日"+"在打渔");
        }else{
            System.out.println(year+"年"+month+"月"+day+"日"+"在晒网");
        }
    }
}
 

练习题2

faibonacci(费波那契)数列的前几个数分别为0,1,1,

2,3,5,……。从第3 项开始,每一项都等于前两项的和。

读入一个整数n,编程求出此数列的前n 项。

注意:这里的数列是从0 开始的。

解题思路:第三项永远等于前两项相加,即num3=num1+num2  ,当到第四项时将num2的值赋值给num1,将num3的值赋值给num2 通过循环,构成这个数列

 Scanner input=new Scanner(System.in);
        System.out.println("请输入一个数:");
        int n=input.nextInt();
        int num1=0,num2=1;
        for(int i=1;i<=n;i++){
            if (i==1){
                System.out.println("第1位数字是0");
            }else if (i==2){
                System.out.println("第2位数字是1");
            }else{
                int num3=num1+num2;
                num1=num2;
                num2=num3;
                System.out.println("第"+i+"位数字是"+num3);

练习题3

解题思路:即打出一个等腰三角形,再想办法把*换成数字 

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println("请输入一个数字:");
        int n=input.nextInt();
        for (int i=1;i<=n;i++){----------控制行
            for (int j =n; j>=i;j--){
                System.out.print(" ");--------控制空格数
            }for (int k=1;k<=2*i-1;k++){
                System.out.print(i);-------------控制字符
            }
            System.out.println();
        }
    }
}

break、continue、return

break  跳出所在的循环,

continue 跳出本次循环,

return 跳出方法

输入5个人的成绩,如果负数则提示有误,结束程序,5个 成绩都正确输入则打印平均分

int sum=0;
Scanner input=new Scanner(System.in);
for (int i = 0; i < 5; i++) {
    System.out.println("请输入成绩:");
    int score= input.nextInt();
    sum+=score;
    if (score<0){
        System.out.println("输入有误程序结束");
        break;

    }if (i==6)----------这个判断条件要理解为什么是6  因为如果上面循环全都正确break不会执行最后执行的是i++,如果第五次输入有误,则break跳出循环,不会执行i++
        System.out.println("平均分"+sum/5);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值