W1D3作业

流程控制练习题


基础题

  1. 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
                             真 则为真
    
  2. 判断一个数字是不是水仙花数

    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 + "不是水仙花数");
    	}
    }
    
  3. 判断一个字符是不是英文字母. 如果是, 大小写反转输出; 如果不是, 输出"不是字母"即可

    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("不是字母");
    	}
    }
  4. 已知成绩可以分为以下几个级别:

    (-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");
    	}
    }
    
  5. 设计一段程序, 输出四个数字中的最大值

    //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);
    
  6. 设计一段程序, 输出两个数字差的绝对值

    public class condition_6 {
    
    public static void main(String[] args) {
    	int num1 = 10,num2 = 5;
    	System.out.println(num2 > num1 ? num2 - num1 : num1 - num2);
  7. 输入两个数字, 按照从小到大的顺序输出

    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);	
    	}
    }
  8. 输入三个数字, 按照从小到大的顺序输出

    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);
    		}
    }
  9. 输入三个数字, 输出最大值和最小值

    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);
    		}
    }
  10. 输入一个年份, 判断是平年还是闰年

    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 + "年不是闰年!");
    	}
    }
  11. 输入一个字符, 判断该字符是大写字母, 还是小写字母, 还是数字

    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("是数字");
    	}
    }
  12. 输入一个月份, 输出这个月份是哪一个季度

    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 + "月属于四季度");
    	}
    }
增强题
  1. 输出一个时间的下一秒, 例如: 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);
  2. 计算今天是今年的第几天, 考虑到平年还是闰年

    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);
  3. 判断一个数字是不是回文数

    // 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");
  4. 输出斐波那契数列的前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);
    	}
    }
    
尽量做
  1. 在屏幕上输出10行内容,每行的内容都是“*”。

    for(int i = 0;i < 10;i++)
    	System.out.println("*");
  2. 在屏幕上输出10行内容,每行的内容都是“*****”。

    for(int i = 0;i < 10;i++){
    	for(int j = 0;j < 5;j++) 
    		System.out.print("*");
    	System.out.println();
    	}
  3. 在屏幕上输出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();
    }
  4. 在屏幕上输出10行内容,每行的内容都是“1”。

    for(int i = 0;i < 10;i++)
    	System.out.println("1");
  5. 在屏幕上输出10行内容,每行的内容都不一样,第1行输出“1”,第 2行输出“2”,依此类推第10行输出“10”。

for (int i = 1; i <= 10; i++) {
	System.out.println(i);
}
  1. 计算10个99相加后的值并输出。

    int num = 0;
    for(int i = 0;i < 10;i++) {	
    	num += 99; 	
    }
    System.out.println(num);
  2. 计算从1加到100的值并输出。

    int num = 0;
    for(int i = 0;i <= 100;i++) {	
    	num += i; 	
    }
    System.out.println(num);
  3. 计算10的阶乘(1x2x3x4x5x6x7x8x9x10) 。

    int num = 1;
    for(int i = 1;i <= 10;i++) {	
    	num *= i; 	
    }
    System.out.println(num);
  4. 计算2的20次方。

    int num = 1;
    for(int i = 1;i <= 20;i++) {	
    	num *= 2; 	
    }
    System.out.println(num);
  5. 计算从1到1000以内所有奇数的和并输出。

    int num = 0;
    for(int i = 1;i <= 1000;i++) {	
    	if(i % 2 != 0)
    		num += i;
    }
    System.out.println(num);	
  6. 计算从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);
  7. 计算从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)

  8. 计算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. 计算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)

  2. 计算从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);		
    }
    
  3. 判断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 + "不是质数");
    
  4. 将某个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);
    
  5. 给定一个n位的整数,将该数位逆置,例如给定12345变成54321,12302变成20321

    int num1 = 12345;
    int num2 = 0;
     while (num1 != 0){
         num2 = num1 % 10;
         num1 = num1 / 10;
         System.out.print(num2);
     }
  6. 输出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);
    }
    
  7. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多米

    double meter = 0, height = 100;
    for (int i = 0;i < 10; i++) {
        meter += 2 * height ;
        height /= 2;
    }
    System.out.println(meter -100);
    
  8. 打印输出乘法口诀表(直角三角形)

    for(int i = 1;i<10 ;i++) {
        for(int j = 1; j <= i;j++) 
            System.out.print(i + "×" + j + "=" + i*j + "  ");
        System.out.println();
    }
    
  9. 图形打印:

    *****
    ****
    ***
    **
    *
    // 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();
        }
    }
增强题
  1. 求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);
  2. 已知 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);
    
                }
            }
    
  3. 使用递归计算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));
    	}
    }
    
  4. 使用递归输出斐波那契数列前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));
    	}
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值