流程控制练习题
基础题
-
int a = 10, b = 20;
boolean ret = a++ > --b & --a == b++ || a++ < --b;System.out.println("ret = " + ret + "; a = " + a + "; b = " + b);
首先把一元运算符都计算出来 并且记录好ab的值;再看其他的 比如短路或 可以决定则不要再看 10 > 19 & 10 == 19 || 10 < 19 a=11;b=19 真 则为真
-
判断一个数字是不是水仙花数
public class condition_2 { public static void main(String[] args) { int num = 370, sum = 0; int a,b,c; // num先取出各个位,并且乘以自己的三次再相加;判断是不是和num相等即可 a = num / 100; b = num / 10 % 10; c = num % 10; sum = (int)Math.pow(a, 3)+(int)Math.pow(b, 3)+(int)Math.pow(c, 3); if(num == sum) System.out.println("num = " + num + "是水仙花数"); else System.out.println("num = " + num + "不是水仙花数"); } }
-
判断一个字符是不是英文字母. 如果是, 大小写反转输出; 如果不是, 输出"不是字母"即可
public class condition3 { public static void main(String[] args) { char c1= 'F'; if(c1 >= 'a' && c1 <= 'z') System.out.println(c1 -= 32); else if(c1 >= 'A' && c1 <= 'Z') System.out.println(c1 += 32); else System.out.println("不是字母"); } }
-
已知成绩可以分为以下几个级别:
(-infinity, 0) : 错误成绩
[0, 60) : 不及格
[60, 80) : C
[80, 90) : B
[90, 100] : A
(100, infinity) : 错误成绩
设计程序, 实现效果
public class condition4 { public static void main(String[] args) { int score = 60; if(score < 0 || score > 100) System.out.println("错误成绩"); else if(score < 60 ) System.out.println("不及格"); else if(score < 80 ) System.out.println("C"); else if(score < 90 ) System.out.println("B"); else if(score < 100 ) System.out.println("A"); } }
-
设计一段程序, 输出四个数字中的最大值
//9.25 初版 public class condition_5 { public static void main(String[] args) { int[] num = {2,15,12,17}; int numax; if(num[0] > num[1]) numax = num[0]; else numax = num[1]; if(numax < num[2]) numax = num[2]; if(numax < num[3]) numax = num[3]; System.out.println(numax); } } //9.26_11:50 用三目 int num1 = num[0] > num[1] ? num[0] : num[1]; int num2 = num[2] > num[3] ? num[2] : num[3]; int numax = num1 > num2 ? num1 : num2; System.out.println(numax) //9.26_14:00 三目改良版 int nummax = 0; for(int i = 0 ; i < 4 ; i++) { nummax = nummax > num[i] ? nummax : num[i]; } System.out.println(nummax);
-
设计一段程序, 输出两个数字差的绝对值
public class condition_6 { public static void main(String[] args) { int num1 = 10,num2 = 5; System.out.println(num2 > num1 ? num2 - num1 : num1 - num2);
-
输入两个数字, 按照从小到大的顺序输出
public class condition_7 { public static void main(String[] args) { int num1 = 10,num2 = 5; if(num1 > num2) System.out.println(num1 + " > " + num2); else System.out.println(num2 + " < " + num1); } }
-
输入三个数字, 按照从小到大的顺序输出
public class condition_8 { public static void main(String[] args) { int a = 2,b = 1, c = 10,t; if(a > b) { t = a; a = b; b = t; } if(a > c) { t = a; a = c; c = t; } if(b > c) { t = b; b = c; c = b; } System.out.println(a + " > " + b + " > " + c); } }
-
输入三个数字, 输出最大值和最小值
public class condition_9 { public static void main(String[] args) { int a = 2,b = 1, c = 10,t; if(a > b) { t = a; a = b; b = t; } if(a > c) { t = a; a = c; c = t; } if(b > c) { t = b; b = c; c = b; } System.out.println("MAX = " + a + " MIN = " + c); } }
-
输入一个年份, 判断是平年还是闰年
public class condition_10 { // 闰年:能被4整除但是不能被100整除;或者能被400整除的年份 public static void main(String[] args) { int year = 2005; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) System.out.println(year + "年是闰年!"); else System.out.println(year + "年不是闰年!"); } }
-
输入一个字符, 判断该字符是大写字母, 还是小写字母, 还是数字
public class condition_11 { public static void main(String[] args) { char c1 = 'a'; if (c1 >= 'a' && c1 <= 'z') System.out.println("是小写字母"); else if (c1 >= 'A' && c1 <= 'Z') System.out.println("是大写字母"); else if (c1 >= '0' && c1 <= '9') System.out.println("是数字"); } }
-
输入一个月份, 输出这个月份是哪一个季度
public class condition_11 { public static void main(String[] args) { int month = 1; if (month >= 1 && month <= 3) System.out.println(month + "月属于一季度"); else if (month >= 4 && month <= 6) System.out.println(month + "月属于二季度"); else if (month >= 7 && month <= 9) System.out.println(month + "月属于三季度"); else if (month >= 10 && month <= 12) System.out.println(month + "月属于四季度"); } }
增强题
-
输出一个时间的下一秒, 例如: 18:00:47 -> 18:00:48 19:59:58 -> 20:00:00 23:59:59 -> 00:00:00
int s , m , h ,time = 0; h = 12; m = 10; s = 20; time = s + m * 60 + h * 60 * 60; time++; h = time / 3600; m = (time - h * 3600) / 60; s = (time - h * 3600) % 60; System.out.println(h + " : " + m + " : " + s);
-
计算今天是今年的第几天, 考虑到平年还是闰年
int year,month,day,num; year = 2019; month = 9; day = 26; num = day; boolean flagyear = false; if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) flagyear = true ; //思路:计算已经过去的月份的天数总和;再加上当前月份的天数 switch (month) { case 12: num += 30; case 11: num += 31; case 10: num += 30; case 9: num += 31; case 8: num += 31; case 7: num += 30; case 6: num += 31; case 5: num += 30; case 4: num += 31; case 3: num += flagyear ? 29 : 28 ; case 2: num += 31; } System.out.println(num);
-
判断一个数字是不是回文数
// 9.25_19:30 初版 int numb = 123321; int a1,a2,b1,b2,c1,c2; a1 = numb / 100000; b1 = numb / 10000 % 10; c1 = numb / 1000 % 10; c2 = numb / 100 % 10; b2 = numb / 10 % 10; a2 = numb % 10; if(a1 == a2 && b1 == b2 && c1 == c2) System.out.println(numb + "是一个回文数"); else System.out.println(numb + "不是一个回文数"); //9.26_正确版 int num = 12345; /* 12345 -> 5 -> /10 1234 1234 -> 4 -> 拼到5的后面 -> /10 123 123 -> 3 -> 拼到54的后面 -> /10 12 */ int num_bak = num, result = 0; //如果一个变量没有赋初始值 是不能使用的 while(num_bak != 0){ //1.得到当前的余数 int last = num_bak % 10; //2.将余数拼接到结果中 result = result * 10 +last; //3.将num_bak除10,去除最后一位 num_bak /= 10; } if(num == result) System.out.println("YES"); else System.out.println("NO");
-
输出斐波那契数列的前50位
double pre = 1, res = 1, temp = 0; for (int i = 1; i <= 50; i++) { if (i == 1 || i == 2) { System.out.println(res); } else { temp = res; res = pre + res; pre = temp; System.out.println(res); } }
尽量做
-
在屏幕上输出10行内容,每行的内容都是“*”。
for(int i = 0;i < 10;i++) System.out.println("*");
-
在屏幕上输出10行内容,每行的内容都是“*****”。
for(int i = 0;i < 10;i++){ for(int j = 0;j < 5;j++) System.out.print("*"); System.out.println(); }
-
在屏幕上输出10行内容,每行的内容都不一样,第1行一个星号,第2行2个星号,依此类推第10行10个星号。
for(int i = 0;i < 10;i++) { for(int j = 0;j < i+1 ;j++) System.out.print("*"); System.out.println(); }
-
在屏幕上输出10行内容,每行的内容都是“1”。
for(int i = 0;i < 10;i++) System.out.println("1");
-
在屏幕上输出10行内容,每行的内容都不一样,第1行输出“1”,第 2行输出“2”,依此类推第10行输出“10”。
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
-
计算10个99相加后的值并输出。
int num = 0; for(int i = 0;i < 10;i++) { num += 99; } System.out.println(num);
-
计算从1加到100的值并输出。
int num = 0; for(int i = 0;i <= 100;i++) { num += i; } System.out.println(num);
-
计算10的阶乘(1x2x3x4x5x6x7x8x9x10) 。
int num = 1; for(int i = 1;i <= 10;i++) { num *= i; } System.out.println(num);
-
计算2的20次方。
int num = 1; for(int i = 1;i <= 20;i++) { num *= 2; } System.out.println(num);
-
计算从1到1000以内所有奇数的和并输出。
int num = 0; for(int i = 1;i <= 1000;i++) { if(i % 2 != 0) num += i; } System.out.println(num);
-
计算从1到1000以内所有能被3或者17整除的数的和并输出。
int num = 0; for(int i = 1;i <= 1000;i++) { if(i % 2 == 0 || i % 17 == 0) num += i; } System.out.println(num);
-
计算从1到1000以内所有能同时被3,5和7整除的数的和并输出
int num = 0; for(int i = 1;i <= 1000;i++) { if(i % 3 == 0 && i % 5 == 0 && i % 7 == 0) num += i; } System.out.println(num);
if (i % 3 == 0 && i % 5 == 0 && i % 7 == 0)
-
计算1到100以内能被7或者3整除但不能同时被这两者整除的数的个数。
int num = 0; for(int i = 1;i <= 100;i++) { if(i % 3 == 0 || i % 7 == 0) if(i % 3 ==0 && i % 7 ==0) num += i; } System.out.println(num);
if (i % 7 == 0 || i % 3 == 0 && (i % 7 == 0 && i % 3 == 0))
-
计算1到100以内能被7整除但不是偶数的数的个数。
int count = 0; for(int i = 1;i <= 100;i++) { if(i % 7 == 0 && i % 2 != 0) count++; } System.out.println(count);
if (i % 7 == 0 && i % 2 != 0)
-
计算从1到100之间临近两个整数的合并依次输出。比如第一次输出3(1+2),第二次输出5(2+3),最后依次输出199(99+100)。
int sum = 0; for(int i = 1;i < 100;i++) { sum = i + i+1; System.out.println(sum); }
-
判断n是不是一个质数(质数是只能被1和它自身整除的数)。
int n = 11; boolean flag = true ; for(int i = 2;i < n;i++) { if(n % i == 0) { flag = false; break; } } if(flag) System.out.println(n + "是质数"); else System.out.println(n + "不是质数");
-
将某个8位的整数所有位的数值加在一起并输出。
int num1 = 12345678; int a,b,c,d,e,f,g,h; a = num1 / 10000000; b = num1 / 1000000 % 10; c = num1 / 100000 % 10; d = num1 / 10000 % 10; e = num1 / 1000 %10; f = num1 / 100 % 10; g = num1 / 10 % 10; h = num1 % 10; System.out.println(a + b + c + d + e + f + g + h);
-
给定一个n位的整数,将该数位逆置,例如给定12345变成54321,12302变成20321
int num1 = 12345; int num2 = 0; while (num1 != 0){ num2 = num1 % 10; num1 = num1 / 10; System.out.print(num2); }
-
输出1000以内所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身。
int sum = 0; int a,b,c; for (int i = 100 ;i <= 999 ;i++){ a = i / 100; b = i / 10 % 10; c = i % 10; sum = (int)Math.pow(a, 3)+(int)Math.pow(b, 3)+(int)Math.pow(c, 3); if(i == sum) System.out.println(sum); }
-
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多米
double meter = 0, height = 100; for (int i = 0;i < 10; i++) { meter += 2 * height ; height /= 2; } System.out.println(meter -100);
-
打印输出乘法口诀表(直角三角形)
for(int i = 1;i<10 ;i++) { for(int j = 1; j <= i;j++) System.out.print(i + "×" + j + "=" + i*j + " "); System.out.println(); }
-
图形打印:
***** **** *** ** * // 1 for (int i = 1; i <= 5; i++) { for(int j = 5; j >= i; j--) System.out.print("*"); System.out.println(); } 12345 1234 123 12 1 // 2 for (int i = 0; i <= 5; i++) { for(int j = 1; j <= 5 - i; j++) System.out.print(j); System.out.println(); } * ** *** **** ***** // 3 for (int i = 1; i <= 5; i++) { for(int j = 1; j <= 5 - i; j++) System.out.print(" "); for(int k = 1; k <= i ;k++) System.out.print("*"); System.out.println(); } ***** **** *** ** * // 4 for (int i = 0; i < 5; i++) { for(int k = 0; k < i; k++) System.out.print(" "); for(int j = 0; j < 5 - i; j++) System.out.print("*"); System.out.println(); } * *** ***** ******* ********* // 5 for (int i = 1; i <= 5; i++) { for(int j = 1; j <= 5 - i; j++) System.out.print(" "); for(int k = 1; k <= i ;k++) System.out.print("*"); for(int h = 1; h < i ;h++) System.out.print("*"); System.out.println(); } * *** ***** ******* ********* ******* ***** *** * // 6 for (int i = 1; i <= 5; i++) { for(int j = 1; j <= 5 - i; j++) System.out.print(" "); for(int k = 1; k <= i ;k++) System.out.print("*"); for(int h = 1; h < i ;h++) System.out.print("*"); System.out.println(); } for(int i = 1;i < 5;i++) { for(int j = 1; j <= i; j++) System.out.print(" "); for(int k = 1; k <= 5 - i ;k++) System.out.print("*"); for(int h = 1; h < 5 - i ;h++) System.out.print("*"); System.out.println(); } ***** ***** ***** ***** ***** // 7 for (int i = 1; i <= 5; i++) { for(int j = 1; j <= 5 - i; j++) System.out.print(" "); for(int k = 1; k <= 5 ;k++) System.out.print("*"); System.out.println(); } ABCDE BCDEF CDEFG DEFGH EFGHI // 8 for (int i = 0; i < 5; i++) { char c1 = (char) ('A' +i); for(int k = 1; k <= i;k++) System.out.print(" "); for(int j = 0; j < 5; j++) { System.out.print((char)(c1+j)); } System.out.println(); } ABBBB AABBB AAABB AAAAB AAAAA // 9 public void Print (int n) { for(int i = 0;i < n; i++) { for(int j = 0;j <n-1-i;j++) System.out.print(" "); for(int k = 0; k <= i ;k++) System.out.print("A"); for(int h = 0; h <= n-1-i;h++) System.out.print("B"); System.out.println(); } }
增强题
-
求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字(1-9之间)计算的数据的个数是5。例如2+22+222+2222+22222求和
int n = 5,a = 2; int res = a; int sum = 0; int n1 = n; while (n1 != 1) { res = res * 10 + a; sum = res + sum ; n1--; } System.out.println(sum + a);
-
已知 abc+cba=1333, 其中的a,b,c均为一位数,编写一个程序,求出a,b,c分别代表什么数字
int a , b , c ; int num1,num2; for (a = 1 ; a <= 9 ; a++) for (b = 1 ; b <= 9 ; b++) for (c = 1 ; c <= 9 ; c++) { num1 = a * 100 + b * 10 + c; num2 = c * 100 + b * 10 + a; if(num1 + num2 == 1333) { System.out.println("a = " + a + " " + "b = " + b + " " + "c = " + c); } }
-
使用递归计算1+2+3+…+100
public class task4 { public static int Cacl(int n) { if (n == 1) return 1; else return n + Cacl(n-1); } public static void main(String[] args) { System.out.println(Cacl(100)); } }
-
使用递归输出斐波那契数列前20位
public class task5 { public static int fbn(int n) { if (n == 1 || n == 2) return 1; else return fbn(n-1) + fbn(n-2); } public static void main(String[] args) { for (int i = 1;i <= 20 ;i++) System.out.println(fbn(i)); } }