第三章习题总结

Demo 01

解答:

数据:  a  b  c  delt  r1  r2

步骤:

  1. 提示用户输入abc三个参数
  2. 计算delt=b*b-4*a*c
  3. 判断delt的值  (delt>0,输出两个解;delt=0,输出一个解;delt<0,无实数解)
import java.util.Scanner;
class  Demo03_01{
    public static void main(String[] args){
        //1.
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入a,b,c:");
        double a=scanner.nextDouble();
        double b=scanner.nextDouble();
        double c=scanner.nextDouble();
        //2.
        double delt=b*b-4*a*c;
        //3.
        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("无实数解!");
        }
    }
}

Demo 02

  1.  

解答:

数据: a b c d e f  ad-bc x y

步骤:

  1. 提示用户输入 a b c d e f
  2. 计算ad-bc
  3. 判断ad-bc是否等于零
  4. ad-bc=0则报告信息"The eqestion has no solution" 否则带入算式中计算 x y 的值 输出结果
import java.util.Scanner;
class Demo02{
    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 z = a*d - b*c;
        if(z==0){
            System.out.println("The equation has no solution");
        }else{
            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);
        }

 

Demo 03

解答:

数据:

  1. 今天是周几  未来的天数  未来的周几  (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;
class Demo03_03{
    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);
    }
}


Demo 04


解答:

数据: 程序随机产生两位数com  用户输入两位数usr

步骤:

  1. 提示用户输入两位数  
  2. 与程序随机产生的两位数对比 
  3. 不同条件输出不同结果
import java.util.Random;
import java.util.Scanner;
class Demo05{
    public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入a,b:");
    int a = scanner.nextInt();
    int b = scanner.nextInt();
    Random random=new Random();
    int c = random.nextInt(10);
    int d = random.nextInt(10);
    

    if(a==c||b==d){
        System.out.println("恭喜你,一等奖10000$");
    }else if(a==d||b==c){
        System.out.println("恭喜你,二等奖3000$");
    }else if(c==a||c==b||d==a||d==b){
        System.out.println("恭喜你,三等奖1000$");
       
    }else{
         System.out.println("很抱歉,你没有中奖!");
    }
    }
   
}

题中运用到随机生成数与三目运算符

 

 

Demo 05

解答:

数据:h(一个星期中的某一天)   q(某月的第几天)   m(月份)  j(世纪数  |year/100|)  k(该世纪的第几年 year%100)

步骤

  1. 提示用户输入相关数据
  2. 带入到算式中进行运算
  3. 输出结果
import java.util.Scanner;
class Demo05{
    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;
        }
    }
}

题中特殊要求对 13  14 进行特殊处理应注意到以及switch语句的使用

Demo 06

解答:

数据:用户输入的坐标点(x1,y1)

步骤:

  1. 提示用户输入坐标点(x1,y1)
  2. 先大致判断一下坐标的范围
  3. 再精确判断坐标的范围
  4. 输出判断结果

几何图示:

红色边框为最开始的大致判断范围   蓝色区域是精确判断范围

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

Demo 07

解答:

数据:两个矩形中点坐标(x1,y1)(x2,y2)高 h1  h2  宽 w1  w2 

步骤:

  1. 提示用户输入数据
  2. 寻找出判断条件进行判断
  3. 输出判断结果

几何图示

import java.util.Scanner;
class Demo07{
    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("小矩形和大矩形相交!");
        }
    }
}

此类几何图形题应找到极限值来确定判断条件 最好先进行画图梳理逻辑思路

 

Demo 08

解答:

数据:输入 i

步骤:

  1. 提示用户输入 i
  2. 数据带入算式进行运算(算式的正确表达)
  3. 输出结果
import java.util.Scanner;
class Demo08{
    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....
    }
}

Demo 09

解答:

数据: 用户输入 十进制整数(int) 输出的二进制

步骤:

  1. 提示用户输入十进制数据
  2. 运用短除法不断对二取余
  3. 倒序输出结果
import java.util.Scanner;
class Demo9{
    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);
    }
}

此题中关于倒序输出字符算需用到binStr语句,应掌握此应用

Demo 10

解答:

数据: 用户输入的整数序列  max(存放最大值)  count(计数)

步骤:

  1. 提示用户输入整数序列
  2. 依次存放入max 下一数字与max比较 
  3. num<max 舍去 ;num > max  则替换num==max count重置1 ;num==max count++;
  4. 输出运算结果
import java.util.Scanner;
class Demo10{
    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);
    }
}
发布了7 篇原创文章 · 获赞 2 · 访问量 154

猜你喜欢

转载自blog.csdn.net/weixin_45914614/article/details/104238766