java学习第三章及习题

                                   第三章.流程控制语句

  一.顺序结构

顺序结构是代码从主函数开始从上到下执行。

二.选择结构

1. if语句

if语句的基本格式为这样:

if()
{

}else 
{

}

它的执行过程是,如果if表达式里面的结果为true,那么执行下面那个大括号的语句。如果if表达式的结果为假,那么执行else语句。

例如:

int a = 1;
if(a == 1)
{
System.out.prntln("为真");
}else 
{
System.out.prntln("为假");
}

我们令a=1,if语句的条件是a=1是否为真,所以if条件是真的,我们执行下面大括号的代码,运行结果为:为真

if 语句还可以写为单 if形式:

if()
{
}

如果if中条件为真,那么执行大括号里面的代码,如果if语句为假,那么忽略本条代码。

if语句还有一种形式为if语句的嵌套:

if ()
{
    if ()
        {
        }
    else 
        {
        }
}

这种形式是如果if条件为真,那么执行括号里面的if,如果里面的if为真,那么执行下面的语句,如果里面的if为假,那么执行下面的else语句。

if语句还有if -if else - else形式,具体代码如下:

if()
{
}
else if ()
{
}
else 
{
}

它的执行过程是这样的,如果if表达式为真,则执行下面括号里面的代码,如果所有if语句的表达式都为假,那么他会执行最后一个else的代码。

2.switch语句

switch语句用法和if语句基本相同,在选择比较多的时候使用。

它的形式如下:

switch(变量){
    case 值1:
          执行语句1;
          break;
    case 值2:
          执行语句2;
          break;
    case 值3:
          执行语句3;
          break;
    default:
          执行语句;
          break;
}

switch的变量支持整数和字符以及字符串 ,但是不支持长整型。

它的执行情况是这样的:如果变量的值为下面哪一个的数值,那么就会执行哪个值后面对应的语句,如果都不满足的时候就会执行最后一个default后面的语句。

在使用switch语句的时候,如果不需要执行完这个case后继续执行下去,那么一定要在执行语句后面加一个break;来终止switch语句的执行。 

三.循环结构

循环的存在是为了把一些复杂的运算交给计算机,简化代码,也减少了代码长度。

我们常用的循环有for循环 while循环 do-while循环 、

1.for循环

for循环是这样的:for(初始条件;循环条件;每次循环执行的条件)

for循环中间的两个相隔的均为分号,不是逗号。

 for循环的具体结构如下:

for(int a = 0;a<5;a++)
{
System.out.println(a);
}

我们的运行过程为:开始定义一个变量a等于0,过如果a<5时执行下面的语句,每次执行完毕后执行a++语句。

那么我们的运行结果为:0 1 2 3 4

for循环也可以初始化多个变量,每次执行完毕后执行多个语句,例如这样:

for (int i = 0,int j = 0;i<5;i++,j++)
{
System.out.println(i+" " +j);
}

这样写就初始化了两个变量 i 和 j,每次循环执行的语句是i++和j++。

那么运行结果是这样的:0 0 1 1 2  2 3 3 4 4

for循环怎么写一个无限循环的代码呢?我们可以通过这样:

for(;;)
{
System.out.println("无限循环");
}

这样可以发现我们系统中会无限制地输出这四个字。

for循环可以没有初始条件,也可以没有循环条件,也可以没有循环内容。

for 循环在Java中应用十分广泛,也十分有趣。

例如,我们需要打印这个图案:

 

我们需要一个嵌套循环,第一个循环控制行数,第二个循环控制每一行的内容,我们可以让用户输入一个数字,为打印的行数,然后我们进行打印。里面有三个循环,第一个循环控制左边的空格数量,第二个循环控制左边的数字,第三个循环控制右边的数字。例如:

import java.util.*;
public class ti314 {

	public static void main(String[] args) {
		Scanner in = new Scanner (System.in);
		int n = in.nextInt();
		for (int i = 1 ;i<=n;i++)
		{
			for (int j = n-i;j>0;j--)
			{
				System.out.print("  ");
			}
			for (int k = i ;k>=1;k--)
			{
				System.out.printf("%d ",k);
			}
			for (int h = 2;h<=i;h++)
			{
				System.out.printf("%d ",h);
			}
			System.out.println();
		}
	}

}

这样我们的程序就实现了。那如果我们需要打印这样一个图案呢?

java学习第三章及习题_第1张图片

和上面的代码一样,先控制行数,再打印每一行的内容,需要一个嵌套的循环。我们的代码可以这样写:

public class ti31501 {

	public static void main(String[] args) {
		for(int i = 5 ;i>=0;i--)
		{
			for (int j = 1;j<=6-i;j++)
			{
				System.out.print(j);
			}
			System.out.println();
		}
			
	}
}

如果我们需要打印这样的图案呢?

java学习第三章及习题_第2张图片

这个图案和上一个的区别是前面多了一个空格的打印,我们需要增加一个循环来控制里面的空格多少。

public class ti31504 {

	public static void main(String[] args) {
		for (int i =0;i<6;i++)
		{
			for (int k = 1;k

2.while 循环

while循环分为两种,一种是 do{事情}while(条件),这种循环的特点是循环至少执行一次,另一种循环是while(条件){事情},这种循环的特点是如果不满足条件可能进不去循环。在使用中我们可以根据自己的需要来选择哪种循环。

while循环在任何条件下和for循环都是可以互换的。

while-do循环样例:

int i = 0 ;
int sum = 0;
while (i != 5)
{
i++;
sum += i ;
}
System.out.println(sum);

程序是这样执行的:开始判断i不等于5,进入循环,每次i自增1,然后与sum相加,当i等于4的时候,与sum相加,下一轮循环i变为了5,继续与sum相加,下一次循环条件不满足,结束循环。这就是一个从1到5的和。最后输出结果。

do-while循环样例:

int i = 0 ;
int sum = 1;
do{
i++;
  }while(sum==0)
System.out.println(i);
 

这个情况就显而易见了,通过我们的输出结果可以看到,do-while循环他不管循环条件是什么,他都至少循环一次,开始sum的值不满足循环条件,但是通过结果看到i的值变成了1,说明循环执行了一次。

while循环中循环条件是一个条件表达式,他返回的结果一定是一个真或者假,所以我们在循环中也可以这样写:

while(true)
    {
    System.out.println("无限循环");
    }

通过结果我们可以发现这个是一个无限循环的代码。因为循环条件是循环执行的条件true。

练习题

1.

这个题我们需要先让用户输入abc的数值,因为输入和计算结果均有小数,所以我们定义它们采用double类型,输入后,我们先潘敦啊他们的b^2-4ac是否大于或者等于或者小于0,如果小于零直接输出没有实数根,如果等于零,我们输出他的一个实数根,如果大于零,我们输出他的两个实数根。

import java.util.Scanner;
public class ti31 {

	public static void main(String[] args) {
		System.out.println("Enter a,b,c");//提示用户输入
		double a,b,c;//定义
		Scanner in = new Scanner(System.in);
		a = in.nextDouble();//读取数据
		b = in.nextDouble();
		c = in.nextDouble();
		double d = b*b-4*a*c;//计算看有几个实数根
		double e = -b+Math.pow(d, 0.5);
		double f = -b-Math.pow(d, 0.5);
		if (d<0) //判断
			System.out.println("No real roots");
		if (d==0)
			System.out.println("have one root:"+e/2*a);
        if (d>0)System.out.println("have two root:"+e/2*a+" and "+f/2*a);

	}

}

java学习第三章及习题_第3张图片

这个题和上面的题目基本一致,先提示用户输入,然后计算是否有解,套入题中的数字,如果没有解,直接输出没有解,如果有的话,套入题中的公式计算,最后输出。因为读入和输出的均为小数,所以我们需要用double来定义他们。

import java.util.Scanner;
public class ti32 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Enter a,b,c,d,e,f");//提示用户输入
		double a,b,c,d,e,f;//定义
		Scanner in = new Scanner(System.in);
		a = in.nextDouble();//读取所有数据
		b = in.nextDouble();
		c = in.nextDouble();
		d = in.nextDouble();
		e = in.nextDouble();
		f = in.nextDouble();
		if (a*d-b*c == 0)//判断是否有解
		{
		  System.out.println("方程式无解");
		}
		//如果有解输出
		else 
		{
			double q = a * d - b * c;
			double x = (e * d - b * f)/q;
			double y = (a*f-e*c)/q;
			System.out.println("x = "+x+" y = "+y);
		}
	}

}

3.java学习第三章及习题_第4张图片

这个题我们首先让用户输入一个数字代表今天星期几,然后再让用户输入一个数字,代表几天后,然后还需要一个变量为几天后的星期。我们用用户输入的数字加上当前日期然后对7取余货的当前的日期。然后定义两个字符串,把每一个数字代表的星期加入,最后输出结果。

import java.util.Scanner;
public class ti33 {

	public static void main(String[] args) {
		Scanner in = new Scanner (System.in);
		System.out.print("今天是周几?0为周日...");//提示用户输入
		int today = in.nextInt();
		System.out.print("输入未来几天?");//提示用户输入
		int future = in.nextInt();
		int futureday = (today+future)%7;//获取未来几天的星期
		String todaystr = "";//定义今天的星期,将数字转换为星期
		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 = "周六";
		String futerstr = "";//定义未来的星期,将数字转换为星期
		if (futureday == 0 ) futerstr = "周日";
		else if (futureday == 1)futerstr = "周一";
		else if (futureday == 2)futerstr = "周二";
		else if (futureday == 3)futerstr = "周三";
		else if (futureday == 4)futerstr = "周四";
		else if (futureday == 5)futerstr = "周五";
		else if (futureday == 6)futerstr = "周六";
		//系统输出结果
		System.out.print("今天是"+todaystr+" "+future+"天后是"+futureday);
		
	}

}

java学习第三章及习题_第5张图片

这个题因为题目中说是一个三位数,看他是不是回文数字,我们先提示用户输入,然后读取一个数字,我们只需要看这个数字的第一位和第三位是否相等即可,我们将读取的数字取余,比如999得到9,然后除以10,得到99,再除以10得到9,我们只需要知道第一个9和最后一个9是否相等就可以知道是不是回文数字。

import java.util.Scanner;
public class ti34 {

	public static void main(String[] args) {
		Scanner in = new Scanner (System.in);
		System.out.println("输入三位数字");//提示用户输入
		int a,b,c,num,k;//定义变量
		k = in.nextInt();//读取数字
		num = k;//将数字备份
		a = num%10;//取余
		num/=10;//除以10
		b = num%10;//
		num/=10;//
		c = num%10;//取余
		if (a==c)//看是否相等
			System.out.println(k+"是回文数字");//输出结果
		else System.out.println(k+"不是回文数字");
		

	}

}

java学习第三章及习题_第6张图片

这个题目首先系统生成一个随机两位数,然后提示用户输入,然后将用户输入和系统生成的数字进行比对。由于考虑到彩票第一位数字可能是0,所以生成10以内的数字的时候,我们需要将这个数字第一位当作0。最后输出结果。

import java.util.Scanner;
public class ti35 {

	public static void main(String[] args) {
		Scanner in = new Scanner (System.in);
		int num=(int)(Math.random()*100);//取一个随机数
		System.out.println("输入两位数字");//提示用户输入
		int c;
		int k = 0;
		c = in.nextInt();//用户输入的数字
		int e,f;
		if (c<0) //如果是10以内的第一位是0
		{
			e = 0;
			f = c;
		}
		else 
		{
			f = c%10;
			c/=10;
			e = c;
		}//进行第一位和第二位数字的赋值
		int a,b;
		if (num<10)
		{
			a = 0;
			b = num;
		}
		else 
		{
			b 	 = num%10;
			num/=10;
			a = num;
		}
		if (a==e&&b==f) 
			System.out.println("10000");//一等奖
		else if (a == f &&b==e)
			System.out.println("3000");//二等奖
		else if (a==e||a==f||b==e||b==f)
			System.out.println("1000");//三等奖
		else 
			System.out.println("没中奖");
	}

}

java学习第三章及习题_第7张图片

这个题首先系统随机产生一个0-2的随机数,分别代表石头剪刀布,我们提示用户输入,用户输入之后,我们进行判断,采用if嵌套的形式,比较麻烦,但是简单,输出结果。

import java.util.*;

public class ti36 {

	public static void main(String[] args) {
		Random random=new Random();//定义随机数对象
		int a = random.nextInt(3);//产生2以内的随机数
		Scanner in  = new Scanner (System.in);
		System.out.println("输入0/1/2分别代表石头剪刀布");//提示用户输入
		int b = in.nextInt();//读取数据
		if (a==0)
		//判断哪个人赢了
		{
			if (b==0)
				System.out.println("我是石头你是石头平了");
			if (b==1)
				System.out.println("我是石头你是剪刀你输了");
			if (b==2)
				System.out.println("我是石头你是布你赢了");
		}
		if (a==1)
		{
			if (b==0)
				System.out.println("我是剪刀你是石头你赢了");
			if (b==1)
				System.out.println("我是剪刀你是剪刀平了");
			if (b==2)
				System.out.println("我是剪刀你是布你输了");
		}
		if (a==2)
		{
			if (b==0)
				System.out.println("我是布你是石头你输了");
			if (b==1)
				System.out.println("我是布你是剪刀你赢了");
			if (b==2)
				System.out.println("我是布你是布平了");
		}

	}

}

这个题很简单,先提示用户输入,如果用户输入的月份是1,那么把用户输入的年份减一,月份变为13,如果用户输入的月份是2,那么年份减1,月份变为14,然后带入题目中的公式,就是最后的结果。

import java.util.*;
public class ti37 {

	public static void main(String[] args) {
		int h;
		System.out.print("输入年 月 该月第几天");//提示用户输入
		Scanner in = new Scanner (System.in);
		int year = in.nextInt();//定义数据
		int m = in.nextInt();
		int q = in.nextInt();
		if (m == 1) //特殊情况,年份减1,月份边=变13
		{
			year--;
			m = 13;
		}
		if (m == 2) //特殊情况,年份减1,月份边=变14
		{
			year--;
			m = 14;
		}
		int j = year/100;
		int k = year%100;
		h = (q+26*(m+1)/10+k+k/4+j/4+5*j)%7;//代入公式
		if (h==0)System.out.println("周六");//将数字变为星期几
		else if (h==1)System.out.println("周天");
		else if (h==2)System.out.println("周一");
		else if (h==3)System.out.println("周二");
		else if (h==4)System.out.println("周三");
		else if (h==5)System.out.println("周四");
		else System.out.println("周五");
		

	}

}

 

java学习第三章及习题_第8张图片

这个题先提示用户输入,在读取数字,采用double定义,然后计算和圆心的距离,利用图中的公式,需要用到math.pow函数。最后计算出和圆心的距离,和半径进行比较即可。

import java.util.*;
public class ti38 {
	public static void main (String [] args) {
		Scanner in = new Scanner (System.in);
		System.out.println("输入坐标点");//提示用户输入
		double x = in.nextDouble();//读取坐标
		double y = in.nextDouble();
		double xo = 0;//定义圆心
		double yo = 0;
		double radius = 10;//定义半径
		//计算距离
		double distance =Math.sqrt( Math.pow(x-xo, 2)+Math.pow(y-yo, 2));
		if (distance == radius) //距离相等
			System.out.println("在圆上");
		else if (distance > radius) //在圆外
			System.out.println("在圆外");
		else //在圆内
			System.out.println("在圆内");
		
		
	}
}

9. 

java学习第三章及习题_第9张图片

这道题是一个简单的线性规划题,需要判断点是不是在三角形内,我们已知三角形的边长,即可求出斜边的方程式,然后输入点,判断这个点所对应的x值对应的y值是否小于该点的y值,如果小于,则在三角形内,如果大于,则在三角形外。在这之前可以先进性粗略地判断,看x或者y是否越界。

java学习第三章及习题_第10张图片

import java.util.Scanner;
class Demo03_09{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
       //提示用户输入一个点的坐标
        System.out.print("请输入一个坐标:");
        double x=scanner.nextDouble();
        double y=scanner.nextDouble();
        //大致判断一下坐标的范围
        //再精确的判断坐标的范围
        if(x>=0&&x<=200&&y<=-0.5*x+100){
            System.out.println("点再三角形内");
        }else{
            System.out.println("点再三角形外");
        }
    }
}

java学习第三章及习题_第11张图片

这道题首先判断小正方形在大正方形内和在打正方形外的临界值,然后判断和临界值的大小情况,其余的为和打正方形相交。

java学习第三章及习题_第12张图片

        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("小矩形和大矩形相交!");
        }
    }
}

11.java学习第三章及习题_第13张图片

这个题目思路很简单,需要一个循环,每一次用户输入的时候,判断一下用户输入的是几,如果用户输入的是0,则结束循环,如果用户不输入0,则循环一直进行,每次循环判断这个数字是否小于0,小于0定义的负数变量加一,不是,定义的正数变量加一,然后用一个变量计算总和。最后全部输出即可。输出平均数用double输出。

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

java学习第三章及习题_第14张图片

这个题需要知道最大公约数怎么求,最大公约数需要从1开始,到这两个数字最小的那一个,每次将这两个数字除以对应的值,循环每一轮这个值加一,最后得到的数字就是最大公约数。

import java.util.Scanner;
class Demo03_12{
    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=1;i--){//判断是都可以整除
            if(n1%i==0&&n2%i==0){
                gcd=i;
                break;
            }
        }
        System.out.println(gcd);

    }
}

这个题目首先得读懂题目的意思,例如输入120,从2开始找可以整出的最小数,120/2=60,60/2=30,30/2=15,15/3=5,5/5=1.

则输出22235.我们需要一个循环,每次寻找可以整除的数字,找到了跳出循环,进行下一轮循环。

import java.util.Scanner;
class Demo03_13{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");//提示输入
        int num=scanner.nextInt();
        while(true){、、每次从2开始判断 如果可以整除,就整出结束这轮循环。
            for(int i=2;i<=num;i++){
                if(num%i==0){
                    System.out.print(i+" ");
                    num=num/i;
                    break;
                }
            }
            if(num==1){
                break;
            }
        }
    }
}

java学习第三章及习题_第15张图片

这个题目是一个嵌套的循环,首先我们要找到规律。先外层循环控制行数,内层循环找规律,从最后一行看,7654321234567,这个好像可以用一个递增数的绝对值来解决。分析规律后,我们可以写出代码。
 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();
        }
    }
}

java学习第三章及习题_第16张图片

这里有四个图案。我们只需要找出规律很容易写出来。

丢I个:两层循环,第二层循环每次的数字从1开始到行数的值,每输出一行换行即可。

第二个:这个和第一个是相反的,我们需要i的值从6开始,然后和第一个一样,输出一行换行。

第三个:这个题目首先输出空格,空格的个数可以观察规律,每一行空格的个数是6-行数,很容易写出循环。然后第二层循环j的值从行数开始每次减一。第四个思路和第三个相同。

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();
        }
    }
}

16.java学习第三章及习题_第17张图片

这个题目首先观察规律,需要两个循环,外面的控制行数,里面的是从二的零次方开始到行数减一次方再到二的零次方。
第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)));
                  //pow 是double类型,需要转换成int
            }
            System.out.println();
        }
    }
}

 这个题需要输出2-1000之间所有素数,我们需要知道如何判断素数。我们需要一个循环,从2开始到他自己的前一个数字,一直取余,如果有哪个数字取余位0,则不为素数,否则位素数。知道这个之后我们只需要用一个外层循环就可以了。最后输出结果即可。

import java.util.*;
public class ti317 {
	public static void main(String []args) {
		int k = 0;//判断是否为素数一句
		
		for (int i = 2;i<=1000;i++)//1999次循环
		{
			int a = 0;
			for (int j = 2;j

java学习第三章及习题_第18张图片

这个题目很简单,只需要设定一个sum,为派的数值,然后设定一个double类型的k=1,每次k=-k实现式子的一正一反,然后一直循环下去即可看到最接近派的值。


public class ti318 {

	public static void main(String[] args) {
		double p;
		double k = 1.0;//实现一加一减
		double m = 1.0;
		double sum = 0 ;//计算总和
		for (int i = 1;;i++)
		{
			m = k/(2*i-1);
			k=-k;//取反
			sum+=m;
			System.out.println(sum*4);

		}
		//System.out.println(sum*4);

	}

}

java学习第三章及习题_第19张图片

这个题目和上一个题目一样,一直相加即可,设置个循环,初始值为1,每次加i/i!即可,利用math.pow计算阶乘,最后每10000个输出一次结果。

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);
    }
}

首先我们要知道闰年的算法。

1.公历闰年判定遵循的规律为:四年一闰、百年不闰、400年再闰。

2.公历闰年的精确计算方法:普通年能被四整除且不能被100整除的为闰年。

然后对100取余位0的让他对4取余,为0则为闰年。否则对4取余位0对100取余不为0时闰年。


public class ti320 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
				//1.公历闰年判定遵循的规律为:四年一闰、百年不闰、400年再闰。
				//2.公历闰年的精确计算方法:普通年能被四整除且不能被100整除的为闰年。		int num = 0;
		for (int i =101;i<=2100;i++)
			{	
			if (i%100==0)
			{
				if (i%400==0)
				{
					System.out.print(i+" ");
					num++;
				}
			}
			else 
			{
				if (i%4==0 && i%100!=0)
				{
					System.out.print(i+ " ");
					num++;
				}
			}
				}
		System.out.println();
		System.out.print(num);
	}

}

这个题目很简单,只要从1开始对这个数字取余,等于0的加到定义的sum里面,然后最后循环到这个数字前一个数字,循环结束判断是否相加等于这个数字,等于输出即可。

import java.util.*;
public class ti321 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for (int i = 1;i<=10000;i++)
		{
			int sum = 0;
			for (int j = 1;j

这个题目只要对前面那个程序加一个循环,多定义两个变量,分别为人和计算机赢的次数,只要有一个等于2就结束循环。

import java.util.Random;
import java.util.Scanner;
public class ti322 {
	public static void main(String[] args) {
		Random random=new Random();//定义随机数对象//产生2以内的随机数
		Scanner in  = new Scanner (System.in);
		int p = 0 ;
		int c = 0;
		while (p!=2&&c!=2) 
		{
			int a = random.nextInt(3);
		System.out.println("输入0/1/2分别代表石头剪刀布");//提示用户输入
		int b = in.nextInt();//读取数据
		if (a==0)
		//判断哪个人赢了
		{
			if (b==0)
				{System.out.println("我是石头你是石头平了");}
			if (b==1)
				{System.out.println("我是石头你是剪刀你输了");
				c++;}//谁赢了就给睡加一
			if (b==2)
				{System.out.println("我是石头你是布你赢了");
				p++;}
		}
		if (a==1)
		{
			if (b==0)
				{System.out.println("我是剪刀你是石头你赢了");
				p++;}//谁赢了就给睡加一
			if (b==1)
				System.out.println("我是剪刀你是剪刀平了");
			if (b==2)
				{System.out.println("我是剪刀你是布你输了");
				c++;}
		}
		if (a==2)
		{
			if (b==0)
				{System.out.println("我是布你是石头你输了");
				c++;}
			if (b==1)//谁赢了就给睡加一
				{System.out.println("我是布你是剪刀你赢了");
				p++;}
			if (b==2)
				System.out.println("我是布你是布平了");
		}
	}
		if (c==2) 
			System.out.println("最后计算机赢了");
		else System.out.println("最后你赢了");
					
					

	}

}

这个题只用一个数组,然后每次用数字对2取余得到的数字放入数组即可,取余后再将这个数字除以二,只要这个数字位0了,循环结束,再对数组进行逆序输出即可,

import java.util.*;
public class ti323 {

	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		int a = in.nextInt();
		int[] num = new int[99];//定义数组放值
		int i ;
		for ( i = 0;a!=0;i++)
		{
			num[i] = a%2;//取余计算二进制
			a/=2;//除以二
		}
		//数组逆序输出
		for (int j = i-1;j>=0;j--)
		{
			System.out.print(num[j]);
		}
		
		
	}

}

24. 

java学习第三章及习题_第20张图片

这道题需要记录用户输入的数字,把最大值初始化为0,后面输入的数字等于最大值就给计数器加一,小于不用管,大于就把计数器初始化为1,然后最大值替换即可。最后输出结果。

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();//循环读取数字 0结束
            if(num==0){
                break;
            }else if(num>max){
                max=num;
                count=1;
            }else if(num==max){
                count++;
            }
        }
        System.out.println("max="+max+",count="+count);
    }
}

 

你可能感兴趣的:(java学习第三章及习题)