【習題一】流程式控制制練習題
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();//輸入第一個整數iSystem.out.print("請輸入第二個整數:");int j=sc.nextInt();//輸入第二個整數jif(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、要求使用者輸入一個年份和一個月份,判斷(要求使用嵌套的if…else和switch分別判斷一次)該年該月有多少天。
考察點:if else、switch、閏年的判斷條件
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();//輸入年份iSystem.out.print("請輸入月份:");int j=sc.nextInt();//輸入月份jif((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();//輸入年份i1System.out.print("請輸入月份:");int j1=sc.nextInt();//輸入月份j1switch(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結構判斷該分數屬於什麼等級(A、B、C、D、F)。
提示: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,sumi=1;//初始設定變數i,初始值為1sum=0;//初始設定變數sum,初始值為0while(i<100){sum=sum+i;//sum=1+3+5+……99i=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,sumi=2;//初始設定變數isum=0;//初始設定變數sumwhile(i<22222){sum=sum+i*10+2;i=i*10+2;}System.out.println(sum);}}
7、請編程驗證一下“角穀猜想”:對任意的自然數,若是奇數,就對它乘以3加1;若是偶數就對它除以2;這樣得到一個新數,再按上述奇數、偶數的計算規則進行計算,一直進行下去,最終將得到1。
如對自然數11,按上述規則依次得到34、17、52、26、13、40、20、10、5、16、8、4、2、1。
要求使用者輸入一個自然數(正整數),然後編程輸出依次變換最終得到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~499if((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+"個。");}}}}}}