用Java编写的关于if-else语句和循环语句的题目

import java.util.Scanner;
/*
题目的要求是:求一元二次方程的根
第一步确定一元二次方程的表达式:a*x^2+b*x+c=0
第二步确定一元二次方程跟的情况
第三步:判断,判断的条件为——b*b-4*a*c
第四步:如果判断的条件大于0,有两个根
                    小于0,无实数解
                    等于0,有两个相同的解
第五步:编写代码
 */
class Demo01{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        System.out.print("Enter a, b, c:");//输入一元二次方程的三个参数
        double a=input.nextDouble();
        double b=input.nextDouble();
        double c=input.nextDouble();
        double x,y;//两个未知变量
        /*
        if-else语句
         */
        if((b*b-4*a*c)>0){
            x=(-b+Math.pow((b*b-4*a*c),0.5))/2*a;
            y=(-b-Math.pow((b*b-4*a*c),0.5))/2*a;
            System.out.println("x=" + x + " , " + "y=" + y);
        } else if((b*b-4*a*c)==0){
            x=(-b+Math.pow((b*b-4*a*c),0.5))/2*a;
            y=x;
            System.out.println("x=" + x + " , " + "y=" + y);
        }else{
            System.out.println("无实数解");
        }

    }
}

运行结果:

PS F:\JavaSE\Day03> javac Demo01.java
PS F:\JavaSE\Day03> java Demo01
Enter a, b, c:4 2 5
无实数解

import java.util.Scanner;
/*
题目要求;知道当天为星期几,再输入多少天之后为星期几
第一步:题目要求0表示的是星期日,1、2、3、4、5、6个表示当天为星期几
第二步:如果今天是0,并且输入的还是7的倍数,那么这些天之后还是0
        如果今天是1,则就是1加上做输入的天数再对7取余,那么这些天之后就是取余之后的数
 */
class Demo03{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        System.out.print("Enter today's day:");//输入今天日期的数字
        int num1=input.nextInt();
        System.out.print("Enter the number of days elapsed since today:");//提示用户输入今天之后的天数
        int num2=input.nextInt();
        for(int i=0;i<=6;i++){
            /*
            if条件语句
             */
            if(num1==0){
                System.out.println("几天之后为:星期"+num2%7);
                break;
            }
            if(num1>=1&&num1<=6){
                if(num2>=7){
                    System.out.println("几天之后为:星期"+num1);
                    break;
                }else if(num2==7-num1){
                    System.out.println("几天之后为:星期日");
                    break;
                }else{
                    num2=num2+num1;
                    if(num2>=7){
                        System.out.println("几天之后为:星期"+num2%7);
                        break;
                    }else{
                        System.out.println("几天之后为:星期"+num2);
                        break;
                    } 
                }
            }
           
        }
    }
}

运行结果:

Enter today's day:4
Enter the number of days elapsed since today:56
几天之后为:星期4

import java.util.Scanner;
/*题目要求:输入一个数字,判断该数字是否为回文数
回文数——就是从左往右,再从右往左数值的大小不变
第一步:先输入一个数,随便输入一个数,不管该数为几位数
第二步:首先得确定该数是几位数——while(num!=0){
                                    循环体num/10
                                    count++;记录数值的位数
                                }
第三步:如何判断该数(123)为回文数----先确定该数的反序数;321
        a=num%10  个位=3            ((个位)*10+十位)*10+百位     以此类推
        num=num/10
        num%10      十位=2
        num=num/10
        num%10      百位=1
        num=num/10
第四步:编写代码
*/
class Demo04{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        System.out.print("Enter a three-digit integer:");
        int num=input.nextInt();
        int temp1=num,temp2=num;//暂存输入的数
        int sum=0;//存放反序数
        /*
        if((num%10)==(num/100)){
            System.out.println(num+" is a palindrome.");
        }else{
            System.out.println(num+" is not a palindrome.");
        }
        */
        int count=0;//记录该数的位数
        while(num!=0){
            num=num/10;
            count++;
        }
        //求输入数的数的反序数
        for(int i=1;i<=count;i++){
            sum=sum*10+temp1%10;
            temp1=temp1/10;
        }
        //用反序数与输入的数作比较
        if(temp2==sum){
            System.out.println(temp2+" is a palindrome.");
        }else{
            System.out.println(temp2+" is not a palindrome.");
        }

    }
}

运行结果:

Enter a three-digit integer:121
121 is a palindrome.

import java.util.Scanner;
/*
题目要求:采拳游戏
石头     0       剪刀      1        布       2
系统产生的随机数——————调用数学函数Math.random();该函数产生的是0到1.0的随机数,而且默认的是double型
因此必须得强制进行数据类型的转化
第一步:确定用户赢的可能————用户赢
        用户0  系统1
        用户1  系统2
        用户2  系统0
第二步:如果用户与系统相同——————平手
第三步:其余系统赢
第四步:编写代码
 */
class Demo06{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
            System.out.print("scissor(0) ,rock(1) ,paper(2):");
            int num1=input.nextInt();
            int num2=(int)(Math.random()*3);//系统所产生的随机数
            if(num1==num2){
                System.out.println("平手");
            }else if(num1<num2){
                System.out.println("你赢了");
            }else if(num1==2&&num2==0){
                System.out.println("你赢了");
            }else{
                System.out.println("你输了");
            }
    }
}

运行结果:

scissor(0) ,rock(1) ,paper(2):2
你赢了

import java.util.Scanner;
/*
题目要求:求两点之间的距离

第一步:明确两点之间的距离公式————Math.pow((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2),0.5);
第二步;确定条件——如果两点之间的距离大于半径,即在圆外,反之,在圆内。
第三步:写代码
 */
class Demo08{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        System.out.print("Enter a point with two coordinates:");//输入一个坐标点
        double x=input.nextDouble();
        double y=input.nextDouble();
        if(Math.pow((x*x+y*y),0.5)<=9){//判断条件
            System.out.println("Point (" + x + "," + y + ") is in the circle.");
        }else{
            System.out.println("Point (" + x + "," + y + ") is not in the circle.");
        }
    }
}

运行结果:

Enter a point with two coordinates:2 5
Point (2.0,5.0) is in the circle.

 

import java.util.Scanner;
/*
题目要求:根据输入的行数,进而打印如下图形:先打印五行——
空格数:1   2   3   4   
                        1                       1
                    2   1   2                   2
                3   2   1   2   3               3
            4   3   2   1   2   3   4           4
        5   4   3   2   1   2   3   4   5       5
........
经上面的分析可得:该图形总共有5行: ————每一行都是由空格和具体的数字所组成。

                空格数是随着行数的增加而减一,因此该代码可写成:
                for(int i=1;i<=5;i++){//i表示的是所打印的行数
                    for(int k=1;k<=5-i;k++){//k表示所打印的空格数
                        System.out.print("  ");
                    }
                }


                由上面可知,每一行的空格已打印,但是每一行的数字存在什么规律,以及每一行数字所要打印的个数:
        1   2   3   4   
1                       1                        1
3                   2   1   2                    2
5               3   2   1   2   3                3
7            4   3   2   1   2   3   4           4
9        5   4   3   2   1   2   3   4   5       5

        -4  -3  -2  -1  0   1   2   3   4           x-(0)       1
                                                    x-(-1~1)    3
                                                    x-(-2~2)    5
                                                    x-(-3~3)    7
                                                    x-(-4~4)    9
                                                    
........

因此由上面分析得每一行所打印数字的个数为1-i ~ i-1
        并且每一行所对应的数值为坐标的绝对值加一------因此代码可写为:
        for(int m=1-i;m<=i-1;m++){
            System.out.print(Math.abs(m)+1);
        }
[注:再下来就是格式的要求——由于每一行所打印的数值所占的大小为两个空格大小,因此就有输出的格式要求——————代码就可改为:
        System.out.printf("%2d",Math.abs(m)+1);
]
切记:每一行打印完之后必须换行——System.out.println();

最后如果改成输入多少行就打印多少行,则只需改代码中的数字五变成一个变量。
 */
class Demo14{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        System.out.print("Enter the number of lines:");
        int num=input.nextInt();
        for(int i=1;i<=num;i++){
            for(int j=1;j<=num-i;j++){
                System.out.print("  ");
            }
            for(int k=1-i;k<=i-1;k++){
                System.out.printf("%2d",(Math.abs(k)+1));
            }
            System.out.println();
        }
    }
}

 运行结果:

Enter the number of lines:5
         1
       2 1 2
     3 2 1 2 3
   4 3 2 1 2 3 4
 5 4 3 2 1 2 3 4 5

 

/*
题目要求:总共打印8行,用五行分析一下解题思路吧;打印如下图形:
空格数:1   2   3   4   
                        1                       1
                    1   2   1                   2
                1   2   4   2   1               3
            1   2   4   8   4   2   1           4
        1   2   4   8  16   8   4   2   1       5
........
经上面的分析可得:该图形总共有5行: ————每一行由空格和具体的数字组成。
                空格数是随着行数的增加而减一,因此该代码可写成:
                for(int i=1;i<=5;i++){//i表示的是所打印的行数
                    for(int k=1;k<=5-i;k++){//k表示所打印的空格数
                        System.out.print("  ");
                    }
                }


                由上面可知,每一行的空格已打印,但是每一行的数字存在什么规律,以及每一行数字所要打印的个数:
        1   2   3   4   
1                        1                       1
2                    1   2   1                   2
3                1   2   4   2   1               3
4            1   2   4   8   4   2   1           4
5        1   2   4   8  16   8   4   2   1       5

        2^0 2^1 2^2 2^3 2^4 2^3 2^2 2^1 2^0
        -4  -3  -2  -1  0   1   2   3   4           x-(0)       1
                                                    x-(-1~1)    3
                                                    x-(-2~2)    5
                                                    x-(-3~3)    7
                                                    x-(-4~4)    9
                                                    
........

因此由上面分析得每一行所打印数字的个数为1-i ~ i-1
        并且每一行随打印的数值都是2的次幂,次幂的规律而是从0~4~0
    第五行———— 所对应的坐标的绝对值与行数差了一个1
    第四行———— 所对应的坐标的绝对值与行数差了一个1
    第三行———— 所对应的坐标的绝对值与行数差了一个1
    .......以此类推
    因此在坐标的绝对值的基础上再加一个1与行数相等,正它们的差刚好是所对应每一行所要打印的第一个数值的次幂数,即2^(坐标的绝对值的基础上再加一个1与行数的差)
    
    ------因此代码可写为:
        for(int m=1-i;m<=i-1;m++){
            System.out.print(Math.abs(m)+1);
        }
[注:再下来就是格式的要求——由于每一行所打印的最高位数值所占的大小为三个空格大小,因此就有输出的格式要求——————代码就可改为:
        System.out.printf("%3.0f",Math.pow(2,i-1-Math.abs(k)));

特别提醒:为什么格式输出是%3.0f,因为Math.pow()——所执行的结果直接为double型,所以为%f,至于4,就是所输出的值所占的空格大小。
]


最后如果改成输入多少行就打印多少行,则只需改代码中的数字五变成一个变量。
*/
class Demo16{
    public static void main(String[] args){
        for(int i=1;i<=5;i++){//i表示的是行数
            for(int j=1;j<=5-i;j++){
                System.out.print("    ");
            }
            for(int k=1-i;k<=i-1;k++){
                System.out.printf("%4.0f",Math.pow(2,i-1-Math.abs(k)));
            }
            System.out.println();
        }
    }
}

 运行结果:

              1
           1  2  1
        1  2  4  2  1
     1  2  4  8  4  2  1
  1  2  4  8 16  8  4  2  1

未完待续············

发布了8 篇原创文章 · 获赞 6 · 访问量 2491

猜你喜欢

转载自blog.csdn.net/Tough_dxx/article/details/104228426