java习题

1、编写程序,显示以下公式的结果
(9.5 x 4.5 - 2.5 x 3)/(45.5 - 3.5)
/*
软件:数据 指令
写软件的目的,无非就是想让我们的计算机帮助我们解决一些问题
首先,我们必须得直到整个问题的一个求解步骤
其次,将这个步骤用相应的编程语言来体现出来
最终,交给计算机去执行即可
当我们在做题的时候 先找问题当中的 数据 指令 分清解决步骤
建议类名和源代码文件名一致
想要执行一个程序 那么就得告诉计算机从这个程序的哪个部分先开始
程序的开始 指的就是 主函数 程序入口

代码可读性——压缩代码 为了节省源代文件的大小 在Web上比较常见 js文件
关键字
class 表示的是一个类
public 表示的是公开的权限
static 表示的是函数的类型
void 表示的是函数的返回值类型
特点:在我们VSCode中 关键字都是全小写的
String System 严格来说它们不是关键字 是Java自带类的名称 也不能随意使用
特点:首字母大写的单词

public class XT1 {
    public static void main(String[] args) {
        System.out.println((9.5 * 4.5 - 2.5 * 3) / (45.5 - 3.5));
    }
}
0.8392857142857143

2、(以英里计的平均速度)假设一个跑步者45分钟30秒内跑了14公里。便携仪个程序显示以每小时多少英里为单位的平均速度值。(注意,1英里等于1.6公里)

public class XT2 {
    public static void main(String[] args) {
        System.out.println("平均速度值为" + (14.0 / 1.6) / ((45.0 * 60 + 30) / (60 * 60)) + "英里每小时");
    }
}

3.(人口估算)美国人口调查局基于以下假设进行人口估算:

每7秒有一个人诞生
每13秒有一个人死亡
每45秒有一个移民迁入

编写一个程序,显示未来5年的每年的人口数。假设当前的人口是312032486,每年有365天。提示:java中,两个证书相除,结果还是整数,小树部分被去掉。例如,5/4等于1(而不是1.25),10/4等于2(而不是2.5)。如果想得到有小树部分的精确结果,进行处罚运算的两个值之一必须是一个具有小数点的数值。例如,5.0/4等于1.25,10/4.0等于2.5。

public class XT3{
    public static void main(String[] args) {
        System.out.println(312032486 + (5 * 365 * 24 * 60 * 60 / 7) - (5 * 365 * 24 * 60 * 60 / 13) + (5 * 365 * 24 * 60 * 60 / 45));
    }
}

4.(以公里计的平均速度)假设一个跑步者1小时40分钟35秒内跑了24英里。编写一个程序显示以每小时多少公里为单位的平均速度值。(注意,1英里等于1.6公里)

public class XT4 {
    public static void main(String[] args) {
        System.out.println("平均速度值为" + (24 * 1.6) * (60 * 60) / (60 * 60 + 40 * 60 + 35) + "公里每小时");
    }
}

5.代数:求解2 x 2线性方程)可以使用Cramer规则解下面的2 x 2线性方程组:
java习题_第1张图片

`public class Training1_13 {
    public static void main(String[] args) {
        double a = 3.4;
        double b = 50.2;
        double e = 44.5;
        double c = 2.1;
        double d = 0.55;
        double f = 5.9;
        System.out.println("x = " + (e * d - b * f) / (a * d - b * c));
        System.out.println("y = " + (a * f - e * c) / (a * d - b * c));
    }
}`

6.(将摄氏温度转换为华氏温度)编写程序,从控制台读入double型的摄氏温度,然后将其转换成为华氏温度,并且显示结果。转换公式: 华氏温度 = (9/5) * 摄氏温度 + 32

*
/*数据:摄氏温度 华氏温度
指令:输入 按照公式计算 输出
步骤:
1.提示用户输入摄氏温度
2.利用已知公式将摄氏温度转换为华氏温度
3.将摄氏温度和华氏温度输出
Scanner 扫描仪扫描器
        是一个Java自带的一个类 主要负责的就是数据输入的问题
        对于内存而言 数据的输入来源有很多
        1.可以是从硬盘上读取数据
        2.可以是从互联网上读取数据
        3.可以是从输入设备(键盘)读取数据
        nextByte()
        nextShort()
        nextInt()       常用
        nextFloat()
        nextDouble()    常用

String/System -> 开学学校给你们发的书
Scanner -> 图书馆里面的书*/

import java.util.Scanner;
public class XT6{
    public static void main(String[] args){
        //类名 变量名=new 类名();
        System.out.print("请输入摄氏温度:");//提示用户输入摄氏温度
        Scanner scanner=new Scanner(System.in);
        double cel=scanner.nextDouble();
        //2.利用已知公式将摄氏温度转换为华氏温度
        double fah=cel * 9 / 5 + 32;
        //3.将摄氏温度和华氏温度输出
        System.out.println("摄氏温度" + cel + ",是华氏温度" + fah);    
    }
}

7.(计算圆柱体的体积)编写程序,读入圆柱体的半径和高,并使用下列公式计算圆柱的体积:

面积=半径* 半径 * p
体积= 面积*高
*
/*数据:半径 高 圆周率 面积 体积
指令:输入 计算 输出
步骤:
1.提示用户输入半径和高
2.按照公式计算底面积
3.按照公式计算体积
4.输出
*/
import java.util.Scanner;
public class XT7{
    public static void main(String[] args){
        System.out.print("请输入半径和高:");//1.提示用户输入半径和高
        Scanner scanner = new Scanner(System.in);
        double radius = scanner.nextDouble();
        double length = scanner.nextDouble();
        //2.按照公式计算底面积
        double area = radius * radius * 3.1415926;
        //3.按照公式计算体积
        double volume = area * length;
        //4.
        System.out.println("圆柱体的体积为"+volume);
    }
}
  1. (求一个整數各位數的和)编写程序,读取一个在 0 和 1000 之间的整数,并将该整数的各位数字相加。例如:整数是 932 , 各位数字之和为 14。
/*数据:输入的一个数字 个位 十位 百位
指令:取余 自除过滤数字 
步骤:
1.提示用户输入一个数字(3位数之内)
2.分解数字 统一按照3位数的长度分解
    123%10 ~    3   a
    123/10 ~ 12
    12%10  ~    2   b
    12/10  ~ 1
    1%10   ~    1   c 
3.将分解数来的数字相加即可
*/
import java.util.Scanner;
public class XT8{
    public static void main(String[] args){
        System.out.print("请输入一个数字:");//提示用户输入一个数字(3位数之内)
        Scanner scanner = new Scanner(System.in);
        int number = scanner.nextInt();
        //2.分解数字 统一按照3位数的长度分解
        int a=number%10;    //得到的是个位
        number/=10;
        int b=number%10;    //得到的是十位
        number/=10;
        int c=number%10;    //得到的是百位
        //3.将分解数来的数字相加
        int sum=a+b+c;
        System.out.println(sum);
    }
}

9.System类中的方法 currentTimeMillis 返回从 GMT 1970 年 1 月 1 日 00:00:00 开始到当前时刻的毫秒数.可以使用这个方法获取当前时间,然后按照如下步骤计算出当前的秒数、分钟数和小时数:

1 ) 调用 System.currentTimeMillisO 方法获取 1970 年丨月 1 日午夜到现在的毫秒数(例 如:1203183086328 毫秒),并存放在变童 totalMilliseconds 中。
2 ) 通过将总毫秒数 totalMilliseconds 除以 1000 得到总秒数 totalSeconds (例如:120B183086328 毫秒 /1000=1203183068 秒)。
3 ) 通过 totalSecondsX60 得到当前的秒数(例如:lMSlHO68 秒%60=8,这个值就是当前秒数)。
4 ) 通过将 totalSeconds 除以 M得到总的分钟数 totalMinutes (例如:lWU83。68秒 /60=20053051分钟)。
5 ) 通过 totalMinutesX60 得到当前分钟数(例如:20053051分钟%60=31, 这个值就是
当前分钟数)。
6 ) 通过将总分钟数 totalMinutes 除以 60 获得总的小时数 totalHours (例如:MOSSOSl分钟 /60=334217 小时)。
7 ) 通过 t0talH0UrSX24 得到当前的小时数(例如:33«17 小时%24=17, 该值就是当前小时数)

public class XT9 {
    public static void main(String[] args) {
        // 开发一个一GMT(格林威治标准时间)来显示当前时间的程序
        // 1:调用System.currentTimeMillis()方法获取1970年1月1日午夜到现在的毫秒数,
        // 并存放在变量totalMilliseconds中。
        // 2:通过将总毫秒数totalMilliseconds/1000得到总秒数toalSteconds。
        // 3:通过totalSeconds%60得到当前的秒数currentSecond。
        // 4:通过totalSeconds/60得到总分钟数totalMinutes。
        // 5:通过totalMinutes%60得到当前的分钟数currentMinute。
        // 6:通过totalMinutes/60得到总小时数totalHours。
        // 7:通过totalHours%24得到当前的小时数currentHour

        // 获取从GMT1970年1月1日00:00:00开始到现在的总毫秒数
        long totalMilliseconds = System.currentTimeMillis();
        // 获取从GMT1970年1月1日00:00:00开始到现在的总秒数
        long totalSeconds = totalMilliseconds / 1000;
        // 获取当前秒数
        long currentSecond = totalSeconds % 60;
        // 获取总分钟数
        long totalMinutes = totalSeconds / 60;
        // 获取当前分钟数
        long currentMinute = totalMinutes % 60;
        // 获取总小时数
        long totalHours = totalMinutes / 60;
        // 获取当前小时数
        long currentHour = totalHours % 24;
        // 打印当前时间
        System.out.println("当前时间是:" + currentHour + ":" + currentMinute + ":" + currentSecond + " GMT");
        System.out.println(totalSeconds);
        System.out.println(currentSecond);
        System.out.println(totalMinutes);
        System.out.println(currentMinute);
        System.out.println(totalHours);
        System.out.println(currentHour);
    }

}

10.上述给出了显示当前格林威治时间的程序。修改这个程序,提示用户输入相 对于 GMT 的时区偏移量,然后显示在这个特定时区的时间。

/*数据:输入的一个偏移量
指令:显示、计算、输出
*/
import java.util.Scanner;
public class XT10{
    public static void main(String[] args){
        System.out.print("请输入时区:");
        Scanner scanner=new Scanner(System.in);
        int offset=scanner.nextInt();
        //总毫秒数
        long totalMillis=System.currentTimeMillis();
        //总秒数
        long totalSeconds=totalMillis/1000;
        //总分钟数
        long totalMinutes=totalSeconds/60;
        //总小时数
        long totalHours=totalMinutes/60;
        
        //当前小时数 
        long currentHour=(totalHours+offset)%24;
        //当前分钟数
        long currentMinute=totalMinutes%60;
        //当前秒数
        long currentSecond=totalSeconds%60;

        System.out.println(currentHour+":"+currentMinute+":"+currentSecond);
    }
}
  1. (财务应用程序:复利值)假设你每月向银行账户存100美元,年利率为5%,那么每月利率是 0.05/12=0.004 17。

    第一个月之后,账户上的值就变成:
    100 * (1 + 0.00417) = 100.417
    第二个月之后,账户上的值就变成:
    (100 + 100.417) * (1 + 0.00417) = 201.252
    第三个月之后,账户上的值就变成:
    (100 + 201.252) * (1 + 0.00417) = 302.507
    依此类推。编写程序显示六个月后账户上的钱数。

/*数据:输入一个数字
指令:输入、计算、输出
*/
import java.util.Scanner;
public class XT11 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入你的每月存款金额:");//输入数字
        double amount = in.nextDouble();
        double rateOfMonth = 1 + 0.00417;//利率
        double totalOfMonth1 = amount * rateOfMonth;//第一个月后的钱数
        double totalOfMonth2 = (amount + totalOfMonth1) * rateOfMonth;//第二个月后的钱数
        double totalOfMonth3 = (amount + totalOfMonth2) * rateOfMonth;//第三个月后的钱数
        double totalOfMonth4 = (amount + totalOfMonth3) * rateOfMonth;//第四个月后的钱数
        double totalOfMonth5 = (amount + totalOfMonth4) * rateOfMonth;//第五个月后的钱数
        double totalOfMonth6 = (amount + totalOfMonth5) * rateOfMonth;//第六个月后的钱数
        System.out.println("6个月后账上余额为:" + totalOfMonth6);//输出
    }
}

12.java习题_第2张图片


import java.util.Scanner;
public class XT 12{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        //1.提示用户输入第一个坐标 两个值
        System.out.print("请输入第一个坐标:");
        double x1=scanner.nextDouble();
        double y1=scanner.nextDouble();
        
        //2.提示用户输入第二个坐标 两个值
        System.out.print("请输入第二个坐标:");
        double x2=scanner.nextDouble();
        double y2=scanner.nextDouble();
        
        //3.计算两点之间的距离
        //Math.pow(a,b) a^b
        double distance=Math.pow(Math.pow(x2-x1,2)+Math.pow(y2-y1,2),0.5);
        System.out.println(distance);
    }
}

13
java习题_第3张图片

import java.util.Scanner;
public class XT13{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入三个点的坐标:");

        double x1=scanner.nextDouble();
        double y1=scanner.nextDouble();

        double x2=scanner.nextDouble();
        double y2=scanner.nextDouble();

        double x3=scanner.nextDouble();
        double y3=scanner.nextDouble();

        double side1=Math.pow(Math.pow(x1-x2,2)+Math.pow(y1-y2,2),0.5);
        double side2=Math.pow(Math.pow(x1-x3,2)+Math.pow(y1-y3,2),0.5);
        double side3=Math.pow(Math.pow(x2-x3,2)+Math.pow(y2-y3,2),0.5);
    
        double s=(side1+side2+side3)/2;

        double area=Math.pow(s*(s-side1)*(s-side2)*(s-side3),0.5);

        //System.out.println(area);
        System.out.printf("area=%.2f\n",area);
    }
}

14
java习题_第4张图片

/*
数据:a b c delt r1 r2
步骤:
1.提示用户输入abc三个参数
2.计算delt=b*b-4*a*c
3.判断delt的值
    3.1 delt>0
        输出两个解
    3.2 delt==0
        输出一个解
    3.3 delt<0
        无实数解
*/
import java.util.Scanner;
public class  XT14{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in); //1.提示用户输入abc三个参数
        System.out.print("请输入a,b,c:");
        double a=scanner.nextDouble();
        double b=scanner.nextDouble();
        double c=scanner.nextDouble();
        //2.计算delt=b*b-4*a*c
        double delt=b*b-4*a*c;
        //3.判断delt的值
        if(delt>0){
            double r1=(-b+Math.sqrt(delt))/(2*a);
            double r2=(-b-Math.sqrt(delt))/(2*a);
            System.out.printf("r1=%.2f,r2=%.2f",r1,r2);
        }else if(delt==0){
            double r=(-b-Math.sqrt(delt))/(2*a);
            System.out.printf("r=%.2f",r);
        }else{
            System.out.println("无实数解!");
        }
    }
}

15.如题5,编写程序,提示用户输入a,b,c,d,e,f,然后显示结果,若ad-bc=0,则输出此方程无解


import java.util.*;

public class XT15 {
	public static void main(String[] args) {
		double a, b, c, d, e, f, x, y, discriminant;
		
		System.out.print("Enter a, b, c, d, e, f:");
		Scanner input = new Scanner(System.in);
		a = input.nextDouble();
		b = input.nextDouble();
		c = input.nextDouble();
		d = input.nextDouble();
		e = input.nextDouble();
		f = input.nextDouble();
		
		
		discriminant = a * d - b * c;
		
		if(discriminant != 0)
		{
			x = (e * d - b * f) / discriminant;
			y = (a * f - e * c) / discriminant;
			System.out.println("x is " + x +" and y is " + y);
		}
		else
		{
			System.out.println("The equation has no solution");
		}
		
		input.close();
	}
}

16.(给出将来的日期)编写一个程序,提示用户输入代表今天日期的数字(周日为0,周一为1,……,周六为6)。同时,提示用户输入一个今天之后的天数,作为代表将来某天的数字,然后显示这天是星期几。

/*
数据:今天的周几 未来的天数 未来的周几
      (0+12)%7=5
      (4+4)%7=1
      (今天的周几+未来的天数)%7=未来的周几
      1月1日是周一 1%7=1
      1 2 3 4 5 6 7
      8 9 10 11 12 13 14
      15 16 17 18 19 20
      1月20日 20%7=6
步骤:
1.输入今天是周几
2.输入未来的几天
3.打印未来的几天是周几
*/
import java.util.Scanner;
public class XT16{
    public static void main(String[] args){
        //1.
        Scanner scanner=new Scanner(System.in);
        System.out.print("今天是周几:");
        int today=scanner.nextInt();
        //2.
        System.out.print("未来的几天:");
        int future=scanner.nextInt();
        //3.
        int futureDay=(today+future)%7;

        String todayStr="";
        String futureDayStr="";
        
        if(today==0){
            todayStr="周日";
        }else if(today==1){
            todayStr="周一";
        }else if(today==2){
            todayStr="周二";
        }else if(today==3){
            todayStr="周三";
        }else if(today==4){
            todayStr="周四";
        }else if(today==5){
            todayStr="周五";
        }else if(today==6){
            todayStr="周六";
        }

        if(futureDay==0){
            futureDayStr="周日";
        }else if(futureDay==1){
            futureDayStr="周一";
        }else if(futureDay==2){
            futureDayStr="周二";
        }else if(futureDay==3){
            futureDayStr="周三";
        }else if(futureDay==4){
            futureDayStr="周四";
        }else if(futureDay==5){
            futureDayStr="周五";
        }else if(futureDay==6){
            futureDayStr="周六";
        }
        System.out.println("今天是"+todayStr+",未来的日子是"+futureDayStr);
    }
}

17.回文数字)编写一个程序,提示用户输入一个三位的整数,然后确定它是否是回文数。如果一个数字从左到右以及从右到左都是一样的,这个数字称为回文数。负数的处理和正数一样。

/*
12345
12345%10=5 12345/10=1234
1234%10=4  1234/10=123
123%10=3   123/10=12
12%10=2    12/10=1
1%10=1     1/10=0
54321
5*10000+4*1000+3*100+2*10+1
(5*1000+4*100+3*10+2)*10+1
((5*100+4*10+3)*10+2)*10+1
(((5*10+4)*10+3)*10+2)*10+1
((((0*10+5)*10+4)*10+3)*10+2)*10+1

sum=0
sum=sum*10+5;   //5
sum=sum*10+4;   //54
sum=sum*10+3;   //543
sum=sum*10+2;   //5432
sum=sum*10+1;   //54321

*/
import java.util.Scanner;
public class XT17{
    public static void main(String[] args){
        //1.输入一个数字
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int num=scanner.nextInt();
        int temp=num;
        //2.拼接出该数字的反序
        int sum=0;
        sum=sum*10+num%10;
        num/=10;
        sum=sum*10+num%10;
        num/=10;
        sum=sum*10+num%10;
        num/=10;
        sum=sum*10+num%10;
        num/=10;
        sum=sum*10+num%10;
        num/=10;
        sum=sum*10+num%10;
        num/=10;
        if(sum==temp){
            System.out.println("是回文");
        }else{
            System.out.println("不是回文");
        }
    }
}

18。(游戏:彩票)修改程序清单3-8,产生两位整数的彩票。程序提示用户输入一个两位整数,然后依照下面判定用户是否赢得奖金:

  1. 如果用户输入的所有数包括顺序完全匹配彩票数字,奖金是10000美元。
  2. 如果用户输入的所有数匹配彩票的所有数字,奖金是3000美元。
  3. 如果用户输入的其中一个数匹配彩票号码中的一个数,奖金是1000美元。
/*数据:随机产生三位数,随机数与用户输入的数进行比较
随机数
    Math.random() *90+10
    Random nextInt(90)+10
调用这个方法会返回一个双精度的随机值 d 且满足 0.0 <=d < 1.0。这样,(1nt)(Math.rando«()*l0) 会返回一个随机的一位整数 (即0到9之间的数)
指令:计算用户输入的数的十位和个位,,计算随机生成数的十位和个位,比较
*/
import java.util.*;

public class XT18{
	public static void main (String[] args){
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个两位数:");//输入用户的两位数
		int use = scanner.nextInt();
		Random random =new Random();
		int com =random.nextInt(90)+10;//产生随机数,范围10~99
		int a,b,c,d;
		a=use/10;//用户输入数的十位赋值给a
		b=use%10;//用户输入数的个位赋值b
		c=com/10;//随机数的十位赋值给c
		d=com%10;//随机数的个位赋值d
		if(use==com) {
			System.out.print("中奖,奖金为10000美元");
		}//输出结果1
		else if (use==d*10+c) {
			System.out.print("中奖,奖金为3000美元");
		}//输出结果2
		else if (a==c||a==d||b==c||b==d) {
			System.out.print("中奖,奖金为1000美元");
		}//输出结果3
}
}

19.(游戏:剪刀、石头、布)编写可以玩流行的剪刀-石头-布游戏的程序。(剪刀可以剪布,石头可以砸剪刀,而布可以包石头。)程序提示用户随机产生一个数,这个数为0、1或者2,分别表示石头、剪刀和布。程序提示用户输入值0、1或者2,然后显示一条消息,表明用户和计算机谁赢了游戏,谁输了游戏,或是打成平手。

/*
数据:电脑随机产生的一个数字com 用户输入的一个数字usr
    0 1 2
    剪刀 石头 布
步骤:
1.提示用户输入一个数字
2.计算机随机产生一个数字
3.将两个数字进行对比,分输赢
    平局  com==usr
    用户赢 usr=0 com=2 | usr=1 com=0 | usr=2 com=1
    用户输 剩下的都是用户输

随机数
    Math.random() [0,1.0)*3 -> [0,3.0)->(int)[0,3.0)
    Random nextInt(n)
*/
import java.util.*;
public class XT19{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);//1.提示用户输入一个数字
        System.out.print("请输入 剪刀0 石头1 布2:");
        int usr=scanner.nextInt();
        //2.计算机随机产生一个数字
        Random random=new Random();
        int com=random.nextInt(3);

        String usrStr="";
        String comStr="";
        switch(usr){
            case 0: //if usr==0
                usrStr="剪刀"; 
                break;
            case 1:// if usr==1
                usrStr="石头";
                break;
            case 2:// if usr==2
                usrStr="布";
                break;
        }
        switch(com){
            case 0: 
                comStr="剪刀"; 
                break;
            case 1:
                comStr="石头";
                break;
            case 2:
                comStr="布";
                break;
        }
        //3.将两个数字进行对比,分输赢
        if(usr==com){
            System.out.printf("用户是%s,电脑是%s,平局",usrStr,comStr);
        }else if(usr==0&&com==2 || usr==1&&com==0 || usr==2&&com==1){
            System.out.printf("用户是%s,电脑是%s,用户赢",usrStr,comStr);
        }else{
            System.out.printf("用户是%s,电脑是%s,用户输",usrStr,comStr);
        }
    }
}

20.(科学:某天是星期几)泽勒一致性是由克里斯汀\LARGE \cdot泽勒开发的用于计算某天是星期几的算法。这个公式是:

h = (q+(26(m+1)/10+k+k/4+j/4+5/j))%7

其中:

h是一个星期中的某一天(0为星期六;1为星期天;2为星期一;3为星期二;4为星期三;5为星期四;6为星期五)。
q是某月的第几天。
m是月份(3为三月,4为四月,……,12为十二月)。一月和二月分别记为上一年的13和14月。
j是year/100。
k是该世纪的第几年(即year%100)。

注意:公式中的除法执行一个整数相除。编写程序,提示用户输入年、月、和该月的哪一天,然后显示它是一周中的星期几。

import java.util.Scanner;
public class XT20{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //1.先输入年份
        System.out.print("请输入年份:");
        int year=scanner.nextInt();
        //2.输入月份 1月 2月分别用13 14代替 同时year-1
        System.out.print("请输入月份:");
        int month=scanner.nextInt();
        //3.输入日期
        System.out.print("请输入日期:");
        int day=scanner.nextInt();

        //4.对特殊的1月和2月做处理
        if(month==1||month==2){
            month+=12;
            year-=1;
        }
        //5.套公式
        int h=(day+26*(month+1)/10+year%100+year%100/4+year/100/4+5*year/100)%7;
        
        switch(h){
            case 0:
                System.out.println("是周六");
                break;
            case 1:
                System.out.println("是周日");
                break;
            case 2:
                System.out.println("是周一");
                break;
            case 3:
                System.out.println("是周二");
                break;
            case 4:
                System.out.println("是周三");
                break;
            case 5:
                System.out.println("是周四");
                break;
            case 6:
                System.out.println("是周五");
                break;
        }
    }
}

21.几何:点是否在圆内?)编写程序,提示用户输入一个点(x, y),然后检查这个点是否在以原点(0,0)为圆心、半径为10的圆内。例如:(4,5)是圆内的一点,而(9,9)是圆外的一点

/*
数据:圆的圆心 圆的半径 点的坐标 距离
步骤:
1.提示用户输入点的坐标
2.计算点到圆心之间的距离
3.判断距离和半径之间的关系
    距离>半径   点在圆外
    距离==半径  点在圆上
    距离<半径   点在圆内
*/
import java.util.Scanner;
public class XT21{
    public static void main(String[] args){
        //1.提示用户输入点的坐标
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入坐标点:");
        double x=scanner.nextDouble();
        double y=scanner.nextDouble();
        //2.计算点到圆心之间的距离
        double xo=0;
        double yo=0;
        double radius=10;
        double distance=Math.sqrt(Math.pow(x-xo,2)+Math.pow(y-yo,2));
        //3.判断距离和半径之间的关系
        if(distance>radius){
            System.out.println("点在圆外");
        }else if(distance==radius){
            System.out.println("点在圆上");
        }else{
            System.out.println("点在圆内");
        }
    }
}

22.(几何:点是否在三角形内?)假设一个平面上有一个直角三角形。编写程序,提示用户输入一个点的x坐标和y坐标,然后判断这个点是否在该三角形内
java习题_第5张图片

import java.util.Scanner;
public class XT22{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //1.提示用户输入一个点的坐标
        System.out.print("请输入一个坐标:");
        double x=scanner.nextDouble();
        double y=scanner.nextDouble();
        //2.先大致判断一下坐标的范围
        //3.再精确的判断坐标的范围
        if(x>=0&&x<=200&&y<=-0.5*x+100){
            System.out.println("点再三角形内");
        }else{
            System.out.println("点再三角形外");
        }
    }
}

23.几何:点是否在矩形内?编写程序。提示用户输入点(x,y),然后检测该点是否在以原点(0,0)为中心、宽为10、高为5的矩形中。例如:(2,2)在矩形内,而(6,4)在矩形外

import java.util.Scanner;
public class XT23{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //1.先输入大矩形的中心,宽和高
        System.out.print("请输入第1个矩形的信息:");
        double x1=scanner.nextDouble();
        double y1=scanner.nextDouble();
        double w1=scanner.nextDouble();
        double h1=scanner.nextDouble();
        //2.再输入小矩形的中心,宽和高
        System.out.print("请输入第2个矩形的信息:");
        double x2=scanner.nextDouble();
        double y2=scanner.nextDouble();
        double w2=scanner.nextDouble();
        double h2=scanner.nextDouble();

        double inXMin=x1-(w1-w2)/2;
        double inXMax=x1+(w1-w2)/2;
        double inYMin=y1-(h1-h2)/2;
        double inYMax=y1+(h1-h2)/2;

        double outXMin=x1-(w1+w2)/2;
        double outXMax=x1+(w1+w2)/2;
        double outYMin=y1-(h1+h2)/2;
        double outYMax=y1+(h1+h2)/2;
        if(x2>=inXMin&&x2<=inXMax&&y2>=inYMin&&y2<=inYMax){
            System.out.println("小矩形在大矩形里面!");
        }else if(x2<=outXMin||x2>=outXMax||y2<=outYMin||y2>=outYMax){
            System.out.println("小矩形在大矩形外面!");
        }else{
            System.out.println("小矩形和大矩形相交!");
        }
    }
}

24.(统计正教和负數的个教然后计算这些教的平均值)编写程序,读人未指定个数的整数,判断读人的正数有多少个,读入的负数有多少个,然后计算这些输人值的总和及其平均值(不对 0 计数)。当输人为 0时,表明程序结束。将平均值以浮点数显示。

import java.util.Scanner;
/* 
输入一个数字
再判断数字是否为0
如果为0则退出
不是则继续
*/
public class XT24{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        double sum=0;  //总和
        int positives=0;    //正数的个数
        int negatives=0;    //负数的个数
        System.out.print("请输入若干数字:");
        while(true){//进入循环
            int num=scanner.nextInt();
            if(num!=0){
                sum+=num;
                if(num>0){
                    positives++;
                }else{
                    negatives++;
                }
            }else{
                break;  //跳出当前循环
            }
        }   
        if(positives+negatives==0){
            System.out.println("没有其他数字的输入,除了0");
        }else{
            System.out.println("正数的个数"+positives);
            System.out.println("负数的个数"+negatives);
            System.out.println("总和"+sum);
            System.out.println("平均值"+sum/(positives+negatives)); 
        }
    }
}

在这里插入图片描述

import java.util.Scanner;
public class XT25{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //1.输入两个数字
        System.out.print("请输入两个数字:");
        int n1=scanner.nextInt();
        int n2=scanner.nextInt();
        int gcd=1;
        for(int i=n1<n2?n1:n2;i>=1;i--){
            if(n1%i==0&&n2%i==0){
                gcd=i;
                break;
            }
        }
        System.out.println(gcd);

    }
}

26.(找出一个整数的因子)编写程序,读入一个整数,然后以升序显示它的所有最小因子。例如,若输人的整数是 120, 那么输出就应该是:2,2, 2, 3, 5。

/* 
120 2~120 ->2
60  2~60  ->2
30  2~30  ->2
15  2~15  ->3
5   2~5   ->5
1   
*/
import java.util.Scanner;
public class XT26{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int num=scanner.nextInt();
        while(true){
            for(int i=2;i<=num;i++){
                if(num%i==0){
                    System.out.print(i+" ");
                    num=num/i;
                    break;
                }
            }
            if(num==1){
                break;
            }
        }
    }
}

java习题_第6张图片

/*
 4  3  2  1 2 3 4
-3 -2 -2  0 1 2 3
第4行 x∈[-3,3] y=|x|+1
第5行 x∈[-4,4] y=|x|+1
*/
import java.util.Scanner;
public class XT27{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入行数:");
        int line=scanner.nextInt();
        for(int i=1;i<=line;i++){
            for(int k=1;k<=(line-i);k++){
                if(line<10){
                    System.out.print("  ");
                }else{
                    System.out.print("   ");
                }
            }
            for(int x=-(i-1);x<=i-1;x++){
                if(line<10){
                    System.out.printf("%-2d",Math.abs(x)+1);
                }else{
                    System.out.printf("%-3d",Math.abs(x)+1);
                }
            }
            System.out.println();
        }
    }
}

此题用到了for循环以及它的嵌套循环,最重要的是对数字金字塔如何从中间分开,然后左右两边打印数字。利用绝对值的特性对数字进行打印。第一个for循环是打印每行的数字,第二个for循环是打印每行的空格数,最后一个for循环比较难,打印的是数字。因为绝对值中,比如输入7,它的最后一行应该是-7到7,但是-7到7中间会有一个零,所以得想办法将零去掉,最简单的就是让它从-6到6打印,最后再加1,不仅将零去掉,而且不影响它第七行的数字。

java习题_第7张图片

利用绝对值
*/
public class XT28{
    public static void main(String[] args){
        for(int i=1;i<=8;i++){      //行
            for(int j=1;j<=8-i;j++){
                System.out.print("    ");
            }
            for(int k=-(i-1);k<=i-1;k++){       //列的次方输出
                System.out.printf("%4.0f",Math.pow(2,i-1-Math.abs(k)));
            }
            System.out.println();
        }
    }
}

这道题和之前的题一样,最重要的还是在最后一个for循环的打印。从题中可以看出来每行数字都是2^(i-1),然后把中间看作是分割线,这样又会利用到绝对值。从第三个for循环来看,最大是2的7次方,但是有八行,所有我们可以将for循环里面的k定义为 -(i-1),比如,当i为8时,k=-7,所以下面的i-1-Math.abs(k)就可以控制幂了。

你可能感兴趣的:(java习题)