练习题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);