1. 程式人生 > >Java基礎——【習題一】流程控制練習題

Java基礎——【習題一】流程控制練習題

【習題一】流程控制練習題

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+"個。");
						
					}
				}
			}
		}
	
	
	
	}
}