选择结构类习题
题目分析:分析这道题目的关键是判别式(delt=b*b-4*a*c)的取值决定,如果delt>0则有两个不一样的值;若delt=0,有两个一样的值,若delt<0则方程无解
import java.util.*;
class test1{
public static void main(String[] args){
//提示用户输入a,b,c创建Scanner函数
Scanner s=new Scanner(System.in);
System.out.print("输入a,b,c的值");
double a=s.nextDouble();
double b=s.nextDouble();
double c=s.nextDouble();
//创建z=b*b-4ac;
double z=b*b-4*a*c;
if(z>0){
double x1=(-b+Math.pow(z,0.5))/(2*a);
double x2=(-b-Math.pow(z,0.5))/(2*a);
System.out.printf("x1=%.2f,x2=%.2f",x1,x2);
}else if(z==0){
double x=(-b-Math.pow(z,0.5))/(2*a);
System.out.printf("x=%.2f",x);
}else{
System.out.println("此方程无解");
}
}
}
题目分析:首先分析题目可以发现(今天代表的星期数+未来的天数)%7,得数为0则为周日,1-为周一,2-为周二.......6-为周六 注:要定义字符串!!!,用字符串输出今天和未来的星期数
import java.util.*;
class test3{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("今天是星期数:");
int today=s.nextInt();
System.out.print("未来的天数:");
int future=s.nextInt();
//futureDay代表的是未来的星期数
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.printf(todayStr+";"+futureDayStr);
}
}
题目分析:回文数就是不管从前往后还是从后往前数字都是一样的,我们可以把这个数字先%(取余)将各位数找出来,然后再将这个数/10,就可得到除各位以外的其他数字......这样依次运算,就可以将这个数的每位数找出来,然后进行反序拼接,看得到的新数是否与原来的数字相等,若相等,则是回文数,否则,则不是回文数。
下面我们以12345
12345 54321
12345%10=5 12345/10=1234 5*10000+4*1000+3*100+2*10+1
1234%10=4 1234/10=123 (5*1000+4*100+3*10+2)*10+1
123%10=3 123/10=12 ((5*100+4*10+3)*10+2)*10+1
12%10=2 12/10=1 (((5*10+4)*10+3)*10+2)*10+1
1%10=1 1/10=0 ((((0*10+5)*10+4)*10+3)*10+2)*10+1由上面54321的排列我们可以找到以下规律:
sum=0
sum=sum*10+5; //5
sum=sum*10+4; //54
sum=sum*10+3; //543
sum=sum*10+2; //5432
sum=sum*10+1; //54321
import java.util.*;
class test4{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("请输入一个数");
int num=s.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;
num/=10;
if(sum==temp){
System.out.println("是回文");
}else{
System.out.println("不是回文");
}
}
}
题目分析:在解决题目之前,我先说个函数,创建随机数可以用这两个函数1.Math.random(),这个函数它输出的是double类型且输出的值大于等于0.0且小于1.0,2.在java.util中random中的nextInt(n),它的取值在0(包括0)和n之间且不包括n。注:在使用2方法时必须创建random 将用户输入的数字所代表的含义与电脑产生随机数所代表的含义相比较,根据数字所代表的含义判断是否用户赢,若用户赢则输出用户赢,若电脑赢则输出用户输,若两者相同,则输出为平局,具体代码如下:
import java.util.*;
class test6{
public static void main(String[] args){
//提示用户输入
Scanner s=new Scanner(System.in);
System.out.print("请输入0剪刀 1石头 2布");
int user=s.nextInt();
//创建random方法
Random r=new Random();
int com=r.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月则将月份+12;年份-1即可
import java.util.*;
class demo7{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("请输入年份:");
int y=s.nextInt();
System.out.print("请输入月份:");
int m=s.nextInt();
System.out.print("请输入日期:");
int q=s.nextInt();
//对特殊的1月和2月进行处理
if(m==1||m==2){
m+=12;
y-=1;
}
int h;
h=(q+26*(m+1)/10+y%100+(y%100)/4+(y/100)/4+5*(y/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;
}
}
}
题目分析:判断点是否在三角形内,首先先将三角形所在的x,y轴的范围表示出来,由题目可得直角三角形所在的x=200,y=100;所以先取大范围(x>=0&&x<=200&&y>=0&&y<=100),得到这个范围后可发现得到的是一个矩形又发现在这个矩形中在三角形斜边所在这条线的下面则说明点在三角形内,在其上面则说明不在三角形内,根据三角形点的坐标可以得到斜边的方程为y=-0.5x+100;当y<=-0.5x+100时则说明在三角形内,否则在三角形外
import java.util.*;
class demo9{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("输入点的坐标");
double x=s.nextDouble();
double y=s.nextDouble();
//先大致判断点的范围
if(x>=0&&x<=200&&y>=0&&y<=100){
//在精确判断坐标的范围
if(y<=-0.5*x+100){
System.out.println("该点在三角形内");
}else{
System.out.println("该点在三角形外");
}
}else{
System.out.println("该点在三角形外");
}
}
}
题目分析:由题目说,要看两个矩形是否重叠,则要算出来小矩形在大矩形内部,外部的临界条件,为此,我画出了如下图所示,中间第二大矩形代表的是题目中给出的矩形,在它内部四周的小矩形则代表的是,小矩形在大巨星内部的临界条件;外部四周的小矩形则代表的是在它外边的临界条件;图中最中间的矩形代表的是在矩形内部临界条件下的小矩形中心所连接组成的矩形,最大的矩形则代表的是在其外部临界条件下的小矩形中心所连接而成的矩形;----右下图可知,再其内部的临界条件是(x>x-(h1-h2)/2|&&x<x+(h1-h2)/2&&y>y1-(w1-w2)/2&&y<y1+(w1-w2)/2),在其外部的临界条件是(x<x-(h1+h2)/2&&x>x+(h1+h2)/2&&y<y1-(w1+w2)/2&&y>y1+(w1+w2)/2)除了这两种情况外,两个矩形是相交的
import java.util.*;
class demo10{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("请输入x1,y1,w1,h1");
System.out.print("请输入x2,y2,w2,h2");
double x1=s.nextDouble();
double y1=s.nextDouble();
double w1=s.nextDouble();
double h1=s.nextDouble();
double x2=s.nextDouble();
double y2=s.nextDouble();
double w2=s.nextDouble();
double h2=s.nextDouble();
//在内
double inMinx=x1-(w1-w2)/2;
double inMiny=y1-(h1-h2)/2;
double inMaxx=x1+(w1-w2)/2;
double inMaxy=y1+(h1-h2)/2;
//在外
double outMinx=x1-(w1+w2)/2;
double outMiny=y1-(h1+h2)/2;
double outMaxx=x1+(w1-w2)/2;
double outMaxy=y1+(h1+h2)/2;
if(x2>=inMinx&&x2<=inMaxx&&y2>=inMiny&&y2<=inMaxy){
System.out.println("在内");
}else if(x2<outMinx||x2>outMaxx||y2<outMiny||y2>outMaxy){
System.out.println("在外");
}else{
System.out.println("相交");
}
}
}