Java第三章练习

谁说胖子不能爱 提交于 2020-02-09 18:14:05

3.1解一元二次方程

/*
数据:a,b,c,判别式Δ=b^2-4ac,实根r1和r2
指令:输入 计算判别式 判别实根个数 计算实根 输出结果
步骤:
    1.提示用户输入a、b和c的值。
    2.根据b^2-4ac的判别式来计算一元二次方程的实根个数,并将实根个数输出。
    3.通过一元二次方程的求根公式计算一元二次方程的实根的值,并将其输出。
*/


import java.util.Scanner;

class Demo03_01{
    public static void main(String[] args){
        //1.
        System.out.print("Enter a, b, c: ");
        Scanner input = new Scanner(System.in);
        double a = input.nextDouble();
        double b = input.nextDouble();
        double c = input.nextDouble();
        //2.
        double delta = b * b - 4 * a * c;
        //3.
        if (delta > 0){
            double r1 = ( - b + Math.pow(delta, 0.5)) / (2 * a);
            double r2 = ( - b - Math.pow(delta, 0.5)) / (2 * a);
            System.out.print("The equation has two roots " + r1 + " and " + r2);
        }
        else if (delta == 0){
            double r = (-b) / (2 * a);
            System.out.print("The equation has one root " + r);
        }
        else if (delta < 0){
            System.out.print("The equation has no real roots");
        }
    }
}

3.2求解线性方程

 

/* 
数据:a,b,c,d,e,f,解x和y
指令:输入 计算ad-bc 判断是否有解 计算解 输出结果
步骤:
1.提示用户输入 a、b、c、d、e 和f。
2.进行ad-bc是否为0的条件判断,判断方程式是否有解
3.根据求解公式计算方程式的解并显示
4.显示方程式的结果
*/


import java.util.Scanner;

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

 3.3找到将来的星期

/* 
数据:今天是周几 今天之后的天数 将来是周几
指令:输入
步骤:
1.提示用户输入今天是周几
2.提示用户输入今天之后的天数
3.计算将来是周几公式如下:
    将来是周几 = (今天是周几 + 今天之后的天数) % 7
4.将计算出来的数字转换为 "周几" 字符串
5.将结果输出
*/


import java.util.Scanner;

class Demo03_03{
    public static void main(String[] args){
        //1.
        Scanner input = new Scanner(System.in);
        System.out.print("今天是周几:");
        int today = input.nextInt();
        //2.
        System.out.print("今天之后的天数:");
        int future = input.nextInt();
        //3.
        int futureDay = (today + future) % 7;
        //4.
        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 = "周六";
        }
        //5.
        System.out.print("今天是" + todayStr + "将来是" + futureDayStr);
    }
}

 3.4回文数字

/* 
数据:输入的数字 对输入数字的备份 输入数字的逆序
指令:输入 循环计算 输出
步骤:
1.提示用户输入一个数字
2.将输入的数字进行备份
3.对输入的数字进行逆序的计算
    sum = sum * 10 + num % 10;
    num /= 10;
4.输出结果
*/


import java.util.Scanner;

class Demo03_04{
    public static void main(String[] args){
        //1.
        System.out.print("请输入一个数:");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        //2.
        int numBackup = num;
        //3.
        int sum=0;
        while (num != 0){
            sum = sum * 10 + num % 10;
            num /= 10;
        }
        //4.
        if (sum == numBackup){
            System.out.print("该数是回文");
        }
        else{
            System.out.print("该数是不回文");
        }
    }
}

3.5彩票

/* 
数据:随机两位数 输入的两位数 个位 十位
指令:输入 产生随机数 计算 进行匹配 输出
步骤:
1.提示用户输入一个两位数
2.使用Random类的nextInt()方法产生一个随机两位数:nextInt(90)+10 区间:[0,90) -> [10,100)
3.分别计算输入数和随机数的个位、十位
                个位    十位
        输入数    a       b
        随机数    x       y
4.进行条件判断,输出结果
    4.1 a==x&&b==y             奖金10 000美元
    4.2 a==y&&b==x             奖金 3 000美元
    4.3 a!=x&&a!=y&&b!=x&&b!=y 没有中奖
    4.4 else                   奖金 1 000美元
*/


import java.util.Scanner;
import java.util.Random;

class Demo03_05{
    public static void main(String[] args){
        //1.
        System.out.print("请输入一个两位数:");
        Scanner input = new Scanner(System.in);
        int ab = input.nextInt();
        //2.
        Random random = new Random();
        int xy = 64;
        //int xy = random.nextInt(90) + 10;
        //3.
        int a = ab / 10 % 10;
        int b = ab % 10;
        int x = xy / 10 % 10;
        int y = xy % 10;
        //4.
        if(a == x && b == y){
            System.out.print("10 000");
        }
        else if(a == y && b == x){
            System.out.print("3000");
        }
        else if(a != x && a != y && b != x && b != y){
            System.out.print("0");
        }
        else{
            System.out.print("1000");
        }
        System.out.println();
        System.out.print(xy);
    }
}


3.6剪刀石头布

/* 
Math.random() 随机数区间[0,1.0)
Random方法nwxtInt(n) 随机区间0到n-1的整数
数据:随机产生数字 用户输入数字 数字范围0(剪刀)1(石头)2(布)
指令:输入 随机产生数 将数字与字符匹配 判断 输出
步骤:
用户赢 usr com ((com+1)%3==usr)
        0   2     3        0 
        1   0     1        1  
        2   1     2        2
1.提示用户随机输入一个数
2.创建Random对象,使用nextInt()方法随机产生数
3.将数与字符匹配
4.判断输赢,并输出结果
*/

import java.util.Random;
import java.util.Scanner;

class Demo03_06{
    public static void main(String[] args){
        //1.
        System.out.print("随机输入一个数 剪刀 0 石头 1 布 2 :");
        Scanner input = new Scanner(System.in);
        int usr = input.nextInt();
        //2.
        Random random = new Random();
        int com = random.nextInt(3);
        //3.
        String usrStr = "";
        String comStr = "";
        switch (usr){
            case 0:
                usrStr = "剪刀";
                break;
            case 1:
                usrStr = "石头";
                break;
            case 2:
                usrStr = "布";
                break;
        }
        switch (com){
            case 0:
                comStr = "剪刀";
                break;
            case 1:
                comStr = "石头";
                break;
            case 2:
                comStr = "布";
                break;
        }
        //4.
        if (usr == com){
            System.out.printf("平局 计算机是%s,你是%s",comStr,usrStr);
        }
        else if((com+1) % 3 == usr){
            System.out.printf("你赢了 计算机是%s,你是%s",comStr,usrStr);
        }
        else{
            System.out.printf("你输了 计算机是%s,你是%s",comStr,usrStr);
        }
    }
}

3.7某天是星期几

/* 
数据:年year 月m 日q 星期几h 世纪数j 世纪的第几年k 
指令:输入 计算 switch判断 输出
步骤:
1.提示用户输入 年 月 日
2.如果是1,2月,将月份+12,年份-1
3.根据公式计算
4.使用switch判断星期几
5.输出结果
*/


import java.util.Scanner;

class Demo03_07{
    public static void main(String[] args){
        //1.
        Scanner input = new Scanner(System.in);   
        System.out.print("输入年:");
        int year = input.nextInt();
        System.out.print("输入月:");
        int m = input.nextInt();
        System.out.print("输入日:");
        int q = input.nextInt();
        //2.
        switch (m){
            case 1:
                m = 13;
                year--;
                break;
            case 2:
                m = 14;
                year--;
                break;
        }
        //3.
        int j = year / 100;
        int k = year % 100;
        int h = (q + 26 * (m + 1) / 10 + k + k / 4 + j / 4 + 5 * j) % 7;
        //4.
        String weekStr = "";
        switch(h)
        {
            case 0:
                weekStr = "星期六";
                break;
            case 1:
                weekStr = "星期天";
                break;
            case 2:
                weekStr = "星期一";
                break;
            case 3:
                weekStr = "星期二";
                break;
            case 4:
                weekStr = "星期三";
                break;
            case 5:
                weekStr = "星期四";
                break;
            case 6:
                weekStr = "星期五";
                break;
        }
        //5.
        System.out.print("是" + weekStr);
    }
}

 

3.8点是否在圆内

/* 
数据:点(a,b) 圆心(0,0) 半径10 输入的点(x,y) 点到圆心的距离
指令:输入 计算 判断位置 输出
步骤:
1. 提示输入点的位置
2.计算点到圆心的距离
3.通过距离和半径的比较得到位置
4.输出结果
*/


import java.util.Scanner;

class Demo03_08{
    public static void main(String[] args){
        //1.
        System.out.print("输入一个点(x,y):");
        Scanner input = new Scanner(System.in);
        double x = input.nextDouble();
        double y = input.nextDouble();
        //2.
        double a = 0;
        double b = 0;
        double distance=Math.sqrt(Math.pow(x-a,2)+Math.pow(y-b,2));
        //3.
        if(distance < 10){
            System.out.print("点在圆内");
        }
        else if(distance == 10){
            System.out.print("点在圆上");
        }
        else if(distance > 10){
            System.out.print("点在圆外");
        }
    }
}

3.9点是否在三角形内

/* 
数据:x坐标 y坐标 关系y=(-100/200)*x+100
指令:输入 比对 输出
步骤:
1.提示用户输入一个点
2.判断点的位置 两个条件 0<x<200 0<y<100
3.输出结果
*/


import java.util.Scanner;

class Demo03_09{
    public static void main(String[] args){
        //1.
        System.out.print("输入一x坐标和y坐标:");
        Scanner input = new Scanner(System.in);
        double x = input.nextDouble();
        double y = input.nextDouble();
        double f = (-100.0 / 200.0) * x + 100;
        //2.
        if(0 <= x && x <= 200){
            if(0 <= y && y <= f){
                System.out.print("点在三角形内");
            }
            else{
                System.out.print("点在三角形外");
            }
        }
    }
}

3.10两个矩形

/* 
数据:矩形中点x坐标 y坐标 宽度 高度
指令:
步骤:
1.提示用户输入两个矩形中点x坐标和y坐标以及他们的宽度和高度
2.如果 Math.abs(x2-x1) < (width1+width2)/2
    且 Math.abs(y2-y1) < (height1+height2)/2
    说明第二个在第一个内或者和第一个重合
        在这个基础上
        如果 Math.abs(x2-x1) > (width1-width2)/2
          且 Math.abs(y2-y1) > (height1-height2)/2
        第二个就与第一个重叠
*/


import java.util.Scanner;

class Demo03_10{
    public static void main(String[] args){
        //1.
        Scanner input = new Scanner(System.in);
        System.out.print("第一个矩形的x坐标y坐标宽度和高度:");
        double x1 = input.nextDouble();
        double y1 = input.nextDouble();
        double width1 = input.nextDouble();
        double height1 = input.nextDouble();
        System.out.print("第二个矩形的x坐标y坐标宽度和高度:");
        double x2 = input.nextDouble();
        double y2 = input.nextDouble();
        double width2 = input.nextDouble();
        double height2 = input.nextDouble();
        //2.
        if(Math.abs(x2-x1) < (width1+width2)/2 && Math.abs(y2-y1) < (height1+height2)/2){
            if(Math.abs(x2-x1) > (width1-width2)/2 && Math.abs(y2-y1) > (height1-height2)/2){
                System.out.print("第二个矩形和第一个重叠");
            }
            else{
                System.out.print("第二个矩形在第一个矩形内");
            }
        }
        else{
            System.out.print("第二个矩形在第一个矩形外");
        }
    }
}

3.11统计正数和负数个数并计算平均值

/* 
数据:读入的数 读入的个数 和 正数的个数 负数的个数
指令:
步骤:
1. 提示用户输入几个数并以0为止
2. 以读到0为止的循环
    2.1 读到的数大于0 正数个数加一
    2.2 读到的数小于0 负数个数加一
    2.3 求读到数的和
3. 输出结果
*/


import java.util.Scanner;

class Demo03_11{
    public static void main(String[] args){
        //1.
        Scanner input = new Scanner(System.in);
        System.out.print("输入几个数,以0为结束");
        int i = 0;
        int j = 0; //计数器 正数的个数i 负数的个数j
        double sum = 0; //求和用 
        int a = 0; //临时存每一个数
        //2.
        while( (a = input.nextInt()) != 0)
        {
            if(a > 0){
                ++i;        //2.1
            }else if(a < 0){
                ++j;        //2.2
            }
            sum = sum + a;  //2.3
        }
        //3.
        if(i == 0 && j == 0){
            System.out.print("还没有输入数字");
        }
        else{
            System.out.print("正数有" + i + "个,负数有" + j + "个,和为" + sum + "平均值为" +sum/(i+j));
        }
    }
}

3.12求最大公约数

/* 
数据:n1 n2 循环初始化k gcd
指令:输入 循环 分支 输出
步骤:
1.提示用户输入两个整数
2.求最大公约数
    循环:
        1.初始化 k=2
        2.继续条件 k大于n1或n2
        3.循环体 判断是否是公约数
        4.周期 k++
3.输出
*/


import java.util.Scanner;

class Demo03_12{
    public static void main(String[] args){

        Scanner input = new Scanner(System.in);
        System.out.print("输入两个整数:");
        int n1 = input.nextInt();
        int n2 = input.nextInt();
        int max = n1 > n2 ? n1 : n2; 
        int gcd = 1;

        for(int k = 2;k <= max;k++){
            if(n1%k==0 && n2%k==0){
                gcd = k;
            }
        }

        System.out.print("最大公约数为:" + gcd);

    }
}

3.13找出一个整数的因子

/* 
数据:输入的数n 因子i
指令:输入 循环 分支 输出
步骤:
1.提示用户输入一个整数
2.n能被i整除时i就是一个因子
3.输出
循环终止条件是 n=1
*/


import java.util.Scanner;

class Demo03_13{
    public static void main(String[] args){
        //1.
        System.out.print("请输入一个整数");
        Scanner input = new Scanner(System.in);
        //2.
        int n = input.nextInt();
        int i = 2; 
        while (n > 1) {
            if (n % i == 0) {
                n = n / i;
                System.out.print(i + ".");
            }
            else {
                i++;
            }
        }
    }
}

3.14显示金字塔

/* 
分析循环输出n行
分成两部分输出
第一部分是倒三角      第二部分            i   j(空格)   k
********                1               1   2*(5-1)  1
******                2 1 2             2   2*(5-2)  -2 1 2
****                3 2 1 2 3           3   2*(5-3)  -3 -2 1 2 3
**                4 3 2 1 2 3 4         4   2*(5-4)  -4 -3 -2 1 2 3
                5 4 3 2 1 2 3 4 5       5   2*(5-5)  -5 -4 -3 -2 1 2 3 4 5
                                        n   2*(n-i)  -i -i+1 -i+2 …… 1 2 …… i-1 i
*/


import java.util.Scanner;

class Demo03_14{
    public static void main(String[] args){

        Scanner input = new Scanner(System.in);
        System.out.print("输入一个1~15的整数");
        int n = input.nextInt();
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n-i;j++){
                System.out.print("  ");
            }
            for(int k=-i;k<=i;k++){
                if(k!=-1&&k!=0){
                    System.out.print(" "+Math.abs(k));
                }
            }
            System.out.println();
        }
    }
}

3.15使用循环语句打印四个图案



class Demo03_15{
    public static void main(String[] args){
        for(int i=1;i<=6;i++){
            for(int j=1;j<=i;j++){
                System.out.print(j + " ");
            }
            System.out.println();
        }
        System.out.println();
        System.out.println();
        for(int i=6;i>=1;i--){
            for(int j=1;j<=i;j++){
                System.out.print(j + " ");
            }
            System.out.println();
        }
        System.out.println();
        System.out.println();
        for(int i=1;i<=6;i++){
            for(int j=1;j<=6-i;j++){
                System.out.print("  ");
            }
            for(int k=-i;k<=i;k++){
                if(k<0){
                    System.out.print(" "+Math.abs(k));
                }
            }
            System.out.println();
        }
        System.out.println();
        System.out.println();
        for(int i=6;i>=1;i--){
            for(int j=1;j<=6-i;j++){
                System.out.print("  ");
            }
            for(int j=1;j<=i;j++){
                System.out.print(j + " ");
            }
            System.out.println();
        }
    }
}

3.16打印金字塔形的数字

class Demo03_16{
    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;k<=i;k++){
                if(k!=-1&&k!=0){
                    int x = Math.abs((Math.abs(k)-i));
                    System.out.printf( "%4d",(int)Math.pow(2,x));
                }
            }
            System.out.println();
        }
    }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!