【习题一】流程控制练习题
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、要求用户输入一个年份和一个月份,判断(要求使用嵌套的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(); //输入年份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结构判断该分数属于什么等级(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,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、请编程验证一下“角谷猜想”:对任意的自然数,若是奇数,就对它乘以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~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+"个。"); } } } } } }