Java第三章练习题

 

分析

数值:a b c delt 解

步骤:

1、提示输入a b c

2、计算delt的值

3、利用公式求方程的解

import java.util.Scanner;

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

    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入a b c的值:");
    double a = scanner.nextDouble();
    double b = scanner.nextDouble();
    double c = scanner.nextDouble();

    double delt=b*b-4*a*c;

    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("无实属根!");
    }
}
}

分析

数值:方程组中的常数 x值 y值 a*d-b*c

步骤:

1、提示用户输入abcdef的值

2、根据公式计算x y值

3、计算a*d-b*c值

4、根据a*d-b*c值打印结果

import java.util.Scanner;
class Demo3_2{
    public static void main(String[] args){

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入a,b,c,d,e,f的值:");
        double a = scanner.nextDouble();
        double b = scanner.nextDouble();
        double c = scanner.nextDouble();
        double d = scanner.nextDouble();
        double e = scanner.nextDouble();
        double f = scanner.nextDouble();

        double x = (e*d-b*f)/(a*d-b*c);
        double y = (a*f-e*c)/(a*d-b*c);
        double i = a*d-b*c;
        if(i == 0){
            System.out.print("方程式无解");
        }else{
            System.out.printf("x=%.2f,y=%.2f",x,y);
        }
    }
}

分析:

数值:今天是周几 未来几天后 

步骤:

1、提示输入今天是周几

2、提示输入未来几天后

3、根据公式计算未来几天后是周几

4、将数值周几改成字符输出

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入今天是周几:");
        int today = scanner.nextInt();
        System.out.println("未来几天后:");
        int future = scanner.nextInt();

        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="周六";
        }
    
        switch(futureDay){
            case 0:
            futureDayStr="周日";
            break;
            case 1:
            futureDayStr="周一";
            break;
            case 2:
            futureDayStr="周二";
            break;
            case 3:
            futureDayStr="周三";
            break;
            case 4:
            futureDayStr="周四";
            break;
            case 5:
            futureDayStr="周五";
            break;
            case 6:
            futureDayStr="周六";
            break;
        }
        System.out.println("今天是"+todayStr+"未来"+future+"天后是"+futureDayStr);
    }   
}     

分析:

数值:输入一个数字 求出的反序数字

步骤:

1、提示用户输入一个数字

2、利用取余和除运算求各个位上的数字

3、求出反序数字

4、用反序数字和该数字比较

5、相等则是回文,否则不是

import java.util.Scanner;
class Demo3_4{
    public static void main(String[] args){

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个三位数字");
        int num = scanner.nextInt();
        int temp=num;
        int sum = 0;
        sum = sum*10+num%10;
        num/=10;
        sum = sum*10+num%10;
        num/=10;
        sum = sum*10+num%10;

        if(sum==temp){
            System.out.println("这个数字是回文数字!");
        }else{
            System.out.println("这个数字不是回文数字!");
        }

    }
}

分析:

数值:一个随机的两位数 用户输入的一个两位数 将电脑和用户的两位数字拆分后得到的数字

步骤:

1、让程序随机的产生一个两位数

2、提示用户输入一个两位数

3、将电脑和用户的两位数字拆分

4、进行数字对比

5、打印结果

import java.util.*;

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

        Random random = new Random();
        int com = random.nextInt(90)+10;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个两位整数:");
        int user = scanner.nextInt();

        int a = com % 10;
        int b = com / 10;
        int c = user % 10;
        int d = user / 10;

        if(com==user){
            System.out.print("恭喜您,获得奖金10000美元!");
        }else if(a==d&&b==c){
            System.out.print("恭喜您,获得奖金3000美元!");
        }else if(a==c || a==d || b==c || b==d){
            System.out.print("恭喜您,获得奖金1000美元!");
        }else{
            System.out.print("很遗憾,您未中奖!");
        }

    }
}

分析:

数值:用户输入一个0-2的整数 电脑随机产生一个0-2的整数 剪刀0 石头1 布2

步骤:

1、提示用户输入0-2的一个整数

2、电脑随机产生一个0-2的整数

3、对比两个数字,比较输赢

平局  com==user

    用户赢 user=0 com=2 | user=1 com=0 | user=2 com=1

    用户输 剩下的都是用户输

import java.util.Scanner;
import java.util.Random;
class Demo3_6{
    public static void main(String[] args){

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入:剪刀0,石头1,布2:");
        int user = scanner.nextInt();

        Random random = new Random();
        int com = random.nextInt(3);

        String userStr ="";
        String comStr ="";

        switch(user){
            case 0:
                userStr="剪刀";
                break;
            case 1:
                userStr="石头";
                break;
            case 2:
                userStr="布";    
                break;
        }
            
        switch(com){
            case 0:
                comStr="剪刀";
                break;
            case 1:
                comStr="石头";
                break;
            case 2:
                comStr="布";    
                break;
        }    
    if(user==com){
        System.out.printf("用户是%s,电脑是%s,平局",userStr,comStr);
    }else if(user==0&&com==2 || user==1&&com==0 || user==2&&com==1){
        System.out.printf("用户是%s,电脑是%s,用户赢",userStr,comStr);
    }else{
        System.out.printf("用户是%s,电脑是%s,用户输",userStr,comStr);
    }

    }
}

分析:

数值:输入的年、月、日   星期几

步骤:

1、提醒用户输入年月日

2、根据题意对1、2月份进行处理

3、根据公式计算

4、用文字打印输出结果

import java.util.Scanner;
class Demo03_07{
    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;
        }
    }
}

分析:

数值:圆心坐标 圆的半径 输入点的坐标

步骤:

1、提示用户输入一个点的坐标

2、计算该点到圆心的距离

3、对比该距离个圆半径的大小

4、输出该点的位置

import java.util.Scanner;
class Demo3_8{
    public static void main(String[] args){

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个点的坐标x y:");
        double x = scanner.nextDouble();
        double y = scanner.nextDouble();

        double x0 = 0;
        double y0 = 0;
        double radius = 10;
        double distance = Math.sqrt(Math.pow((x0-x),2)+Math.pow((y0-y),2));

        if(distance==radius){
            System.out.print("点在圆上");
        }else if(distance>radius){
            System.out.print("点在圆外");
        }else{
            System.out.print("点在圆内");
        }

    }
}

import java.util.Scanner;
class Demo03_09{
    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("点再三角形外");
        }
    }
}

import java.util.*; 
class Demo3_10{    
    public static void main(String[] args){         
        Scanner scanner = new Scanner(System.in);         
        System.out.print("请输入第一个矩形的中心点坐标x,y和长,高:");         
        double x1 = scanner.nextDouble();         
        double y1 = scanner.nextDouble();         
        double w1 = scanner.nextDouble();         
        double h1 = scanner.nextDouble();         
        System.out.print("请输入第二个矩形的中心点坐标x,y和长,高:");         
        double x2 = scanner.nextDouble();         
        double y2 = scanner.nextDouble();         
        double w2 = scanner.nextDouble();         
        double h2 = scanner.nextDouble();         
        //计算第二个矩形中心点的范围         
        double inMinX = x1-(w1-w2)/2;         
        double inMaxX = x1+(w1-w2)/2;         
        double inMinY = y1-(h1-h2)/2;         
        double inMaxY = y1+(h1-h2)/2;         
        double outMinX = x1-(w1+w2)/2;         
        double outMaxX = x1+(w1+w2)/2;         
        double outMinY = y1-(h1+h2)/2;         
        double outMaxY = y1+(h1+h2)/2;         
        //判断是否在内或外或嵌套         
        if(x2>=inMinX&&x2<=inMaxX&&y2>=inMinY&&y2<=inMaxY){             
            System.out.println("在内");         
            }else if(x2>=outMaxX||x2<=outMinX||y2>=outMaxY||y2<=outMinY){             
                System.out.println("在外");         
                }else{             
                    System.out.println("嵌套");        
             }     
         } 
     }

分析:

步骤:

1、输入一个数字
2、再判断数字是否为0
3、如果为0则退出,不是则继续

import java.util.Scanner;
class Demo3_11{
    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;
class Demo03_12{
    /* 
    21  42
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16~21
    3 7
    */
    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);

    }
}

分析:

/*
 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;
class Demo03_14{
    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();
        }
    }
}

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("==========");
        for(int i=1;i<=6;i++){
            for(int j=1;j<=7-i;j++){
                System.out.print(j+" ");
            }
            System.out.println();
        }
        System.out.println("==========");
        for(int i=1;i<=6;i++){
            for(int k=1;k<=6-i;k++){
                System.out.print("  ");
            }
            for(int j=i;j>=1;j--){
                System.out.print(j+" ");
            }
            System.out.println();
        }
        System.out.println("==========");
        for(int i=1;i<=6;i++){
            for(int k=1;k<=i-1;k++){
                System.out.print("  ");
            }
            for(int j=1;j<=7-i;j++){
                System.out.print(j+" ");
            }
            System.out.println();
        }
    }
}

分析:

/*
第4行  
         1  2  4 8 4 2 1
         0  1  2 3 2 1 0
      x -3 -2 -1 0 1 2 3
第5行
        1 2 4 8 16 8 4 2 1
        0 1 2 3 4  3 2 1 0
    x  -4-3-2-1 0  1 2 3 4
*/


class Demo03_16{
    public static void main(String[] args){
        for(int i=1;i<=8;i++){
            for(int k=1;k<=8-i;k++){
                System.out.print("    ");
            }
            for(int x=-(i-1);x<=i-1;x++){
                System.out.printf("%4d",(int)Math.pow(2,i-1-Math.abs(x)));
            }
            System.out.println();
        }
    }
}
/*
对于打印一些对称性的三角形图案或者是类似的问题
尽量向绝对值考虑
*/

分析:


什么是素数 就是除了1和其本身之外 没有其他的数字可以整除的
num
2 ~ m ~ num-1 找到一个数字 如果这个数字m num%m==0 num不是素数
如果一个都没有找到的话 这个数字是素数

 


class Demo03_17{
    public static void main(String[] args){
        int count=0;  //当前素数的个数
        boolean flag=true;
        for(int num=2;num<=1000;num++){
            for(int m=2;m<=num-1;m++){
                if(num%m==0){
                    flag=false;
                    break;
                }
            }
            if(flag){
                count++;
                System.out.print(num+" ");
                if(count%8==0){ //8 16 24 32
                    System.out.println();
                }
            }
            flag=true;
        }
    }
}
/*
int num=10;
        boolean flag=true;  //默认这个数字是素数
        for(int m=2;m<=num-1;m++){
            if(num%m==0){//说明num不是素数
                flag=false;//此时不是素数
                break;
            }
        }
        //如果for正常执行完毕 都没有找到 是素数
        // System.out.println("是素数");
        //重点就在于 for是如何退出的
        //如果for是break出来的 -> 不是素数
        //如果for是正常执行完毕的->是素数
        if(flag){
            System.out.println("是素数");
        }else{
            System.out.println("不是素数");
        }
*/

import java.util.Scanner;
class Demo03_18{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int imax=scanner.nextInt();
        double sum=0;
        double flag=1;
        for(int i=1;i<=imax;i++){
            //sum+=Math.pow(-1.0,i+1);/(2*i-1);
            sum+=flag/(2*i-1);
            flag=-flag;
        }
        double pi=sum*4;
        System.out.println(pi);
        // 累乘 Math.pow(-1.0,i+1) for -1*-1*-1....
    }
}

 

import java.util.Scanner;
class Demo03_19{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int imax=scanner.nextInt();
        double e=1;
        double item=1.0;
        for(int i=1;i<=imax;i++){
            item=item*i;    //n!=(n-1)*n;
            e+=1/item;
        }
        System.out.println(e);
    }
}

class Demo03_20{
    public static void main(String[] args){
        int count=0;
        for(int i=101;i<=2100;i++){
            if(i%4==0&&i%100!=0 || i%400==0){
                count++;
                System.out.print(i+" ");
                if(count%10==0){
                    System.out.println();
                }
            }
        }
        System.out.println("\n闰年一共"+count+"个");
    }
}

class Demo03_21{
    public static void main(String[] args){
        //6 : 1 2 3 4 5 6
        //28: 1 2 4 7 14 
        //n : 1 ~ n/2
        int sum=0;
        for(int n=2;n<=10000;n++){   
            for(int i=1;i<=n/2;i++){
                if(n%i==0){
                    sum+=i;
                }
            }
            if(n==sum){
                System.out.println("完全数"+n);
            }
            sum=0;
        }
    }
}

import java.util.*;
class Demo03_22{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        Random random=new Random();
        int usrWin=0;
        int comWin=0;
        while(true){
            System.out.print("请输入剪刀0 石头1布2:");
            int usr=scanner.nextInt();
            int com=random.nextInt(3);
            String usrStr = "";
            String comStr = "";
            switch(usr){
                case 0:
                    usrStr = "scissor"; 
                    break;
                case 1:
                    usrStr = "rock";
                    break;
                case 2:
                    usrStr = "paper";
                    break;
            }
            switch(com){
                case 0: 
                    comStr = "scissor"; 
                    break;
                case 1:
                    comStr = "rock";
                    break;
                case 2:
                    comStr = "paper";
                    break;
            }
            if(usr==com){
                System.out.printf("The computer is %s.you are %s too.It is a draw\n",comStr,usrStr);
            }else if(usr==0&&com==2 || usr==1&&com==0 || usr==2&&com==1){
                System.out.printf("The computer is %s.you are %s.You won\n",comStr,usrStr);
                usrWin++;
            }else{
                System.out.printf("The computer is %s.you are %s.You lost\n",comStr,usrStr);
                comWin++;
            }
            if(usrWin==2||comWin==2){
                break;
            }
        }
        if(usrWin==2){
            System.out.println("最终玩家赢!");
        }else{
            System.out.println("最终电脑赢!");
        }
    }
}

分析:
12/2 6 ~ 0
6/2  3 ~ 0
3/2  1 ~ 1
1/2  0 ~ 1
1100


import java.util.Scanner;
class Demo03_23{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int num=scanner.nextInt();
        String binStr="";
        while(true){
            binStr=num%2+binStr;//"1100"
            num/=2;
            if(num==0){
                break;
            }
        }
        System.out.println(binStr);
    }
}

import java.util.Scanner;
class Demo03_24{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int num=0;
        int max=0;
        int count=0;
        System.out.print("请输入数字:");
        while(true){
            num=scanner.nextInt();
            if(num==0){
                break;
            }else if(num>max){
                max=num;
                count=1;
            }else if(num==max){
                count++;
            }
        }
        System.out.println("max="+max+",count="+count);
    }
}

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值