Java习题三

1.(代数:解一元二次方程)可以使用下面的公式求一元二次方程ax^2+bx+c=0的两个根: 
       

java 多元一次方程 java 二元一次方程_Math

         b^2-4ac称作一元二次方程的判别式。如果它是正值,那么一元二次方程就有两个实数根。如果它为0,方程式就只有一个根。如果它是负值,方程式无实根。
         编写程序,提示用户输入a、b和c的值,并且显示基于判别式的结果。如果这个判别式为正,显示两个根。如果判别式为0,显示一个根。否则,显示“The equation has no real roots" (该方程式无实数根)。
         注意:可以使用Math.pow(x,0.5) 来计算根号x。

  • 解题思路:按题目要求,先要输入三个数,然后根据题目中给的公式进行运算,通过判别式可以知道到有三种情况,用if语句进行判别,再进行最后的运算,输出结果
import java.util.Scanner;
class  Demo01{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入a,b,c:");    //提示输入a,b,c
        double a=scanner.nextDouble();    
        double b=scanner.nextDouble();
        double c=scanner.nextDouble();    //将输入的值赋给a,b,c
        double delt=b*b-4*a*c;    //计算出判别式的值
        if(delt>0){           //当判别式的值大于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){    //当判别式的值为0时
            double r=(-b-Math.sqrt(delt))/(2*a);
            System.out.printf("r=%.2f",r);    //输出一个值
        }else{    //当判别式的值小于0时
            System.out.println("无实数解!");
        }
    }
}

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

  • 解题思路:一周有七天,根据题目星期天为0,周一为1......周六为6,那么假如下礼拜的礼拜天=7,7%7等于0,再往后星期六=8,那么8%7=1.........一次类推,可以得出公式"(今天的周几+未来的天数)%7=未来的周几"
import java.util.Scanner;
class Demo02{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("今天是周几:");    //提示输入今天周几
        int today=scanner.nextInt();    //将输入的值赋给today
        System.out.print("未来的几天:");    //提示输入未来几天
        int future=scanner.nextInt();    //将输入的值赋给future
        int futureDay=(today+future)%7;    //用公式计算出结果

        String todayStr="";
        String futureDayStr="";    //设置两个字符型变量
        
        if(today==0){            //用if判断给todayStr赋值
            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){        //用if语句给futureDay赋值
            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);     //最终输出todayStr和futureDay的值
    }
}

3.(回文数字)编写一个程序,提示用户输人一个三位的整数,然后确定它是否回文数字。当从左到右,以及从右到左都是一样的话, 这个数字称为回文数。下面是程序的一个运行示例:

  • 解题思路:用户输入一个数,然后将此数反转过来,再判断这个数字和它数字顺序反转后的数字是否一样即可
import java.util.Scanner;
class Demo03{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");    //提示输入数字
        int num=scanner.nextInt();    //先将输入的数赋给num,假如输入的是12345
        int temp=num;                //再将num赋给temp
        int sum=0;                //设置一个整型sum,它将是temp的反序
        sum=sum*10+num%10;        //sum乘10,num取10的余数,那么假设的值sum=5
        num/=10;                   //10去整除num,假设的num=1234
        sum=sum*10+num%10;        //sum=5*10+1234%10=50+4=54
        num/=10;                    //num=123
        sum=sum*10+num%10;        //sum=543
        num/=10;                //num=12
        sum=sum*10+num%10;        //sum=5432
        num/=10;                //num=1
        sum=sum*10+num%10;        //sum=54321
        num/=10;                //num=0
        sum=sum*10+num%10;        //num=54321
        num/=10;
        if(sum==temp){            //if判断输入数字和它的反序是否相等
            System.out.println("是回文");
        }else{
            System.out.println("不是回文");
        }
    }
}

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

提示:如果一个点到(0, 0)的距离小于或等于半径(10),那么该点就在圆内,计算距离的公式是根号下(x1-x2)^2+(y1-y2)^2

  • 解题思路:用户输入一个坐标,然后根据公式计算出它和原点的距离,如果:距离>10 则是圆外;距离=10 圆上;距离<10 圆内
import java.util.Scanner;
class Demo04{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入坐标点:");    //提示用户输入
        double x=scanner.nextDouble();    
        double y=scanner.nextDouble();    //将输入的值分别赋给x和y
        double xo=0;
        double yo=0;    //定义原点的x和y坐标
        double radius=10;    //半径为10
        double distance=Math.sqrt(Math.pow(x-xo,2)+Math.pow(y-yo,2));    //根据公式算出两点间距离
        if(distance>radius){        //用if进行判断
            System.out.println("点在圆外");
        }else if(distance==radius){
            System.out.println("点在圆上");
        }else{
            System.out.println("点在圆内");
        }
    }
}