Java基础——【习题一】流程控制练习题

标签: 流程控制练习题  for循环  if else语句  while语句  switch语句

【习题一】流程控制练习题

1、要求用户输入一个年份,判断并输出该年份是闰年还是平年

提示:判断闰年的条件为:(year%4==0&&year%100!=0) ||(year%400==0)

考察点:闰年的判断条件、条件分支流程(if else)

package t1;
import java.util.Scanner;
public class TestYear{
		public static void main (String []args){
		System.out.print("请输入年份:");
		Scanner sc=new Scanner(System.in);
		int i=sc.nextInt();				
		//读入数据
		if((i%4==0&&i%100!=0)||(i%400==0)){
		//布尔表达式表示年份模4=0且模100不等于0是闰年或者年份模400等于0是闰年
			System.out.println(i+"是闰年!"); 
			//打印结果 i是闰年!
		}else{
			
			System.out.println(i+"是平年!");
			//否则打印结果 i是平年!
		}
		
		}
		
		
	   /**
		如果是整百年(如2000,1700)要被400整除才是闰年,否则为平年(2000闰年,1700平年);如果是非整百年(如2008,2009),只要被4整除就是闰年,不能被4整除为平年(2008闰年,2009平年)。
	     闰年的2月有29天,平年的2月有28天。 
	     闰年一年有366天,平年一年又365天。后边有一个 0 或者没有0的年份除以四,如果除尽了 ,就是闰年,后边有两个或者三个0的,都除以四百,能除尽了是闰年
	     比如1600年,就是除以四百,1900年也是除以四百,但是1600能除尽,1900不能除尽,所以1600是闰年。

	    */



}


2、要求用户输入两个整数,判断第一个整数是否是第二个整数的倍数。

提示:使用运算符%

    考察点:模%if语句

package t1;
import java.util.Scanner;
public class TestModel{
	public static void main (String []args){
		Scanner sc=new Scanner(System.in);
		//读入数据
		System.out.print("请输入第一个整数:");
		int i=sc.nextInt();
		//输入第一个整数i
		System.out.print("请输入第二个整数:");
		int j=sc.nextInt();
		//输入第二个整数j
		if(i%j==0){
			//判断i Mol j 是否等于0,等于0,输出i是j的i/j倍!
			System.out.println(i+"是"+j+"的"+i/j+"倍!");
		}else{
			//否则输出i不是j的倍数!
			System.out.println(i+"不是"+j+"的"+"倍数!");
		}
	}

}



3、要求用户输入一个年份和一个月份,判断(要求使用嵌套的ifelseswitch分别判断一次)该年该月有多少天。

考察点:if elseswitch、闰年的判断条件

package t1;
import java.util.Scanner;
public class TestDay{
	public static void main (String []args){
		Scanner sc=new Scanner(System.in);
		//读入数据
		System.out.print("请输入年份:");
		int i=sc.nextInt();
		//输入年份i
		System.out.print("请输入月份:");
		int j=sc.nextInt();
		//输入月份j
		if((i%4==0&&i%100!=0)||(i%400==0)){
			if(j==2){
				System.out.println(i+"年"+j+"月有29天!");
			}else if(j==4||j==6||j==9||j==11){
				System.out.println(i+"年"+j+"月有30天!");
			}else{
				System.out.println(i+"年"+j+"月有31天!");
			}
			
		}else{
			if(j==2){
				System.out.println(i+"年"+j+"月有28天!");
			}else if(j==4||j==6||j==9||j==11){
				System.out.println(i+"年"+j+"月有30天!");
			}else{
				System.out.println(i+"年"+j+"月有31天!");
			}
			
		}
		System.out.print("请输入年份:");
		int i1=sc.nextInt();
		//输入年份i1
		System.out.print("请输入月份:");
		int j1=sc.nextInt();
		//输入月份j1
		switch(j1){
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:System.out.println(i1+"年"+j1+"月有31天!");break;
			case 4:
			case 6:
			case 9:
			case 11:System.out.println(i1+"年"+j1+"月有30天!");break;
			case 2:if((i%4==0&&i%100!=0)||(i%400==0)){
					System.out.println(i1+"年"+j1+"月有29天!");
			}else{
				System.out.println(i1+"年"+j1+"月有28天!");
			}
			break;
			default:System.out.println("输入有误!");break;
					
			
		}
		
		
	}
	/**
	1、3、5、7、8、10、12,31天永不差
	4、6、9、11,30天
	2月(闰年29天,平年28天计算)
	一年365天
	闰年一年366天
	*/

}



4、要求用户输入一个学生的分数(1~100),使用switch结构判断该分数属于什么等级(ABCDF)。

提示:switch(score/10)

   考察点:switch语句、int

package t1;
import java.util.Scanner;
public class TestScore{
	public static void main(String []args){
		System.out.print("请输入你的分数(0~100):");
		Scanner sc=new Scanner(System.in);//读入数据	
		int i=sc.nextInt();
		switch(i/10){//整型变量/10=整数
			case 10:if(i>100){
				System.out.println("你的成绩输入有误!");
					}break;
			case 9:System.out.println("你的成绩是A,优秀!");break;
			case 8:System.out.println("你的成绩是B,良好!");break;
			case 7:System.out.println("你的成绩是C,良!");break;
			case 6:System.out.println("你的成绩是D,及格!");break;
			case 5:
			case 4:System.out.println("你的成绩是E,加油啊!");break;
			case 3:
			case 2:
			case 1:
			case 0:System.out.println("你的成绩是F,该努力了!");break;
			default:System.out.println("你的成绩输入有误!");break;
			
		}
	}


}



5、使用while循环求1~100以内所有奇数的和。

   考察点:while语句

package t1;
public class TestWhile{
	public static void main(String []args){
		int i,sum;			//定义两个整型变量i,sum
		i=1;				//初始化变量i,初始值为1
		sum=0;				//初始化变量sum,初始值为0
		while(i<100){
			sum=sum+i;		//sum=1+3+5+……99
			i=i+2;			//保证加数均为奇数
			
		}
		System.out.println("1~100所有奇数的和为:"+sum);
			
	}
	
}



6、使用while循环求式子2+22+222+2222+22222的和。p=p*10+2;

   考察点:while语句

package t1;
public class TestWhile2{
	public static void main(String []args){
		int i,sum;//定义变量i,sum
		i=2;//初始化变量i
		sum=0;//初始化变量sum
		while(i<22222){
			sum=sum+i*10+2;
			i=i*10+2;
		}
		System.out.println(sum);
		
			
	}
	
}


7请编程验证一下“角谷猜想”:对任意的自然数,若是奇数,就对它乘以31;若是偶数就对它除以2;这样得到一个新数,再按上述奇数、偶数的计算规则进行计算,一直进行下去,最终将得到1

如对自然数11按上述规则依次得到34175226134020105168421

    要求用户输入一个自然数(正整数),然后编程输出依次变换最终得到1的过程。

提示:对自然数n

  do{

  if(){n=n*3+1}else{}

  }while(n!=1);

考察点:do { }while( );语句

package t1;
import java.util.Scanner;
public class TestDoWhile{//角谷猜想
	public static void main (String []args){
		Scanner sc=new Scanner(System.in);
		//读入数据
		System.out.print("请输入一个自然数:");
		int i=sc.nextInt();
		do{
			if(i%2==1){
					i=i*3+1;
				}else{
					i=i/2;
				}
			System.out.print(i+"、");
	
		}while(i!=1);

	}
}




 

8、判断并输出500以内既能够被3整除又能够被6整除的整数。

考察点:for循环、if语句

package t1;
public class Test10{
	public static void main(String []args){
		for(int i=1;i<500;i++){					//for循环1~499
		if((i%3==0)&&(i%6==0)){					//满足条件
				System.out.print(i+" ");
			}
			
		}
	}

}

 

9使用for循环的嵌套编程输出如下图形:

*                  *

***              *** 

*****          *****   

*******      *******

*********  *********

考察点:for循环的嵌套

package t1;
public class Test11{
	public static void main(String []args){
		int n = 10 ;
		for(int i=1;i<=n;i++){
			//第一次循环
			for(int j=1;j<=i*2-1;j++){
				System.out.printf("*");
			}
			//第二次循环
			for(int j=1;j<=(n-i)*4+1;j++){
				System.out.print(" ");
			}
			//第三次循环
			for(int j=1;j<=i*2-1;j++){
				System.out.print("*");
			}
			
			System.out.println();
		}
	}
}


10、使用for循环的嵌套编程输出如下图形

    *

   ***

  *****

 *******

*********

 *******

  *****

   ***

    *

提示:可把图形分为上下两部分分别输出

考察点:for循环的嵌套

package t1;
public class Test12{
	public static void main(String [] args){//分上下两部分,每部分分块打印图形
	
		//上部分
		int n = 5 ;//图形行数
		for(int i=1;i<=n;i++){
			//第一次循环,打印三角
			for(int j=1;j<=n-i;j++){
				System.out.print(" ");
			}
			//第二次循环,打印中间三角
			for(int j=1;j<=i*2-1;j++){
				System.out.print("*");
			}
			//第三次循环和第一次循环一样
			for(int j=1;j<=n-i;j++){
				System.out.print(" ");
			}
			
			
			
			System.out.println();
		}
		//下部分
		int m = 5;
		for(int i=1;i<=m;i++){
			//第一次循环
			for(int j=1;j<=i;j++){
				System.out.print(" ");
			}
			//第二次循环
			for(int j=1;j<=2*(m-i)-1;j++){
				System.out.print("*");
			}
			//第三次循环
			for(int j=1;j<=i;j++){
				System.out.print(" ");
			}
			System.out.println();//换行
		}
	}
}



11搬砖问题:36块砖,36人搬,男人搬4块,女人搬3块,两个小孩抬1块。

要求一次搬完,问需要男人、女人、小孩各几人?

考察点:for循环的嵌套

package t1;
public class Test13{
	public static void main(String []args){//for循环嵌套
		for(int n=0;n<=9;n++){ //假设全部是男人,需要9人
			for(int m=0;m<=12;m++){ //假设全部是女人,需要12人
				for(int x=0;x<=36;x+=2){//假设全部是小孩,最多36个,两个小孩抬一块砖,一次加二
					if((4*n+3*m+x/2==36)&&(n+m+x==36)){//找到关系式36块砖,36个人搬
						System.out.println("男人:"+n+"人,女人:"+m+"人,小孩:"+x+"个。");
						
					}
				}
			}
		}
	
	
	
	}
}


版权声明:本文为zzj_csdn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zzj_csdn/article/details/77171116