Java习题三
1.(代数:解一元二次方程)可以使用下面的公式求一元二次方程ax^2+bx+c=0的两个根:
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("点在圆内");
}
}
}