4.多重循环、方法、递归作业及答案

多重循环、方法、递归作业及答案

  • 选择题

1.

分析下面的Java多重循环代码片段,编译运行后的输出结果是(  D  。(选择一项)

for (int i = 0; i < 6; i++) {

    int k = ++i;

    while (k < 5) {

       System.out.print(i);

       break;

    }

}

A.

024

B.

02

C.

123

D.

13

2.

给定如下Java代码,编译运行的结果是(  A  )。(选择一项)

public class Test {

         public static void main(String[] args) {

                   int sum=0;

                   for(int i=1;i<10;i++){

                            do{

                                     i++;

                                     if(i%2!=0)

                                               sum+=i;

                            }while(i<6);

                   }

                   System.out.println(sum);

         }

}

A

8

B.

15

C.

24

D.

什么也不输出

3.

Javamain方法的返回值是(  D  )。(选择一项)

A

String

B.

int

C.

char

D.

void

4.

Java的程序类中如下方法定义正确的是(  AD  )。(选择两项)

A

public int ufTest(int num){

                   int sum=num+100;

                   return sum;

}

B.

public String ufTest(int num){

                   int sum=num+100;

                   return sum;

}

C.

public void ufTest(int num){

                   int sum=num+100;

                   return sum;

}

D.

public float ufTest(int num){

                   int sum=num+100;

                   return sum;

}

5.

以下关于方法调用的代码的执行结果是 B  。(选择一项)

public class Test {

    public static void main(String args[]) {

       int i = 99;

       mb_operate(i);

       System.out.print(i + 100);

    }

    static void mb_operate(int i) {

       i += 100;

    }

}

A.

99

B.

199

C.

299

D.

99100

6.

下面(  BD   )方法是public void example(){…}的重载方法。(选择二项)

A

private String example(){…}

B.

public int example(String str){…}

C.

public void example2(){…}

D.

public int example(int m,float f){…}

7.

以下选项中添加到代码中横线处会出现错误的是( BD  )。(选择二项)

public class Test {

         public float aMethod(float a, float b) {

                   return 0;

         }

                                       

}

A

public float  aMethod(float a, float b, float c) {

                   return 0;

}

B.

public float  aMethod(float c, float d) {

                   return 0;

}

C.

public int  aMethod(int a, int b) {

         return 0;

}

D.

private int  aMethod(float a, float b) {

         return 0;

}

  • 判断题
  1. 多重循环是指一个循环体内又包含另一个完整的循环结构。外层循环变量变化一次,内层循环变量要从头到尾变化一遍。(

2.定义方法时的参数称为实在参数,调用方法时的参数称为形式参数。(  X  )

3.调用方法时,要求实参和形参的个数相同,类型匹配。(

4.判断方法重载的依据是方法名相同,参数不同。(

5.程序调用自身的编程技巧称为递归。递归的特点是编程简单并且节省内存。(  X  )

6.任何可用递归解决的问题也能使用循环解决,递归既花时间又耗内存,在要求高性能的情况下尽量避免使用递归。(

  • 简答题
    1. 在多重循环中,如何在内层循环中使用break跳出外层循环。

   (1)正常情况下,break只是跳出内层循环    (2)可以使用带标签的break,相当于goto,但是不建议使用这种方法,因为跳多了出不来。

答:在内层循环中标记break跳出操作,即:break flag;再用flag标记外层循环。

2.方法重载的定义、作用和判断依据

定义:一个类中含两个以上同名的方法,他们之间就构成重载

特点:

(1)必须是两个以上同名的方法
(2)方法之间的参数组合必须不同(参数的数目不同或者参数的类型不同)
(3)方法的返回值不能作为判断方法之间是否构成重载的依据

答:当我们要实现的功能一样,只是参数不同的时候(类型,顺序,个数),我们将方法的名字可以起成一样的名字,这种现象叫做方法的重载。 重载作用:就是实现功能一样;判断方法的重载依据:方法名相同,参数不同。

3.递归的定义和优缺点

是一种直接或者间接地调用自身算法的过程。在计算机编写程序中, 递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易 于理解。

递归算法解决问题的特点:

(1) 递归就是在过程或函数里调用自身。

(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

(3) 递归算法解题通常显得很简洁,但运行效率较低。所以一般不提倡用递 归算法设计程序。

(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存 储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

答:定义:直接或间接调用自己本身的函数;优点:结构清晰、可读性强;缺点:运行效率低,耗费计算时间与存储空间。

  • 编码题
    1. 打印九九乘法表

public class MultiTable {

       public static void main(String[] args) {

              for (int i = 1; i <= 9; i++) {

                     for (int j = 1; j <= i; j++) {

                            // 不换行打印数据

                            System.out.print(i + " * " + j + " = " + i * j + "\t");

                     }

                     // 打印完一行进行换行

                     System.out.println();

              }

       }

}

2.判断1-100之间有多少个素数并输出所有素数。(将判断一个数是否是素数的功能提取成方法,在循环中直接调用即可)

              public class PrimeNum {

       public static void main(String[] args) {

              int count = 0;

              for (int j = 1; j <= 100; j++) {

                     if (isPrime(j)) {

                            System.out.print(j + " ");

                            count++;

                            if (count % 8 == 0) {

                                   System.out.println();

                            }

                     }

              }

       }

       private static boolean isPrime(int n) {

              boolean flag = true; // flag:返回值默认true,表示是素数

              if (n == 1)

                     flag = false;

              else {

                     for (int i = 2; i <= Math.sqrt(n); i++) {

                            if (n % i== 0) {

                                   flag = false;

                                   break;

                            }

                     }

              }

              return flag;

       }

}

3.输入三个班,每班10个学生的成绩,求和并求平均分

import java.util.Scanner;

public class StuScoreCalc {

       public static void main(String[] args) {          

              Scanner sc = new Scanner(System.in);         

              for(int i = 1;i<=3;i++){

                     //输入每个班成绩并求和

                     System.out.println("请输入第"+i+"个班的成绩");

                     double sum = 0;

                     for(int j=0;j<10;j++){

                            System.out.println("   请输入第"+(j+1)+"个学生成绩:");

                            double score  = sc.nextDouble();

                            System.out.println(score);

                            sum += score;

                     }

                     //求平均分

                     double avg = sum / 10;

                     //输出结果

                     System.out.println(""+i+"个班学生总分:"+sum+" 平均分:"+avg);              }

       }     

}

4.编写递归算法程序:一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求数列的第40位数是多少。

public class TestSum{

       public static void main(String[] args) {

              System.out.println(sum(40));

       }

       public static long sum(int n) {

              if (n <= 0) {

                     return 0;

              } else if (n == 1 || n == 2) {

                     return 1;

              } else {

                     return sum(n - 1) + sum(n - 2);

              }

       }

}

  • 可选题
    1. 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

public class Prog3{

       public static void main(String[] args){

              for(int i=100;i<1000;i++){

                     if(isLotus(i))

                        System.out.print(i+" ");

              }

              System.out.println();

       }

       //判断水仙花数

       private static boolean isLotus(int lotus){

              boolean flag=false;

              int a = lotus % 10;

              int b = lotus / 10 % 10;

              int c = lotus / 100 % 10;

              if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == lotus) {

                     flag = true;

              }

              return flag;

       }

}

2.定义方法:打印指定行和列的矩形

public class TestRect {

       public static void main(String[] args) {

              // 调用printStr方法

              printStr(5, 4, "*");

       }

       public static void printStr(int rows, int columns, String str) {

              for (int i = 0; i < rows; i++) {

                     for (int j = 0; j < columns; j++) {

                            System.out.print(str);

                     }

                     System.out.println();

              }

       }

}

3.编写Java程序,实现接收用户输入的正整数,输出该数的阶乘。要求:限制输入的数据在1-10之间,无效数据进行提示,结束程序。要求使用递归和循环分别实现。输出结果如:4!=1*2*3*4=24

public class Test01 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        //输入一个数

        System.out.println("请输入你要判断的数据:");

        int n = input.nextInt();

        if(n>10 || n<1){

            System.out.println("限制输入的数据在1-10之间");

            System.exit(0);

        }

        String str = testString(n);

        long sum = factRec(n);//递归

        System.out.println(n+"!="+str+"="+sum);

        long sum2 = factfor(n);//for循环

        System.out.println(n+"!="+str+"="+sum2);

       

    }  

    //实现字符串的输出

    public static String testString(int n){

        String result = "";

        for (int i=1;i<=n;i++){

            result +=(i+"*");

        }

        return result.substring(0, result.length()-1);

    }  

    //递归实现

    public static long factRec(int n){

        if(n==1){

            return 1;

        }else{

            return n*factRec(n-1);

        }

    }  

    //for循环实现

    public static long factfor(int n){

        int sum = 1;

        for (int i = 1; i < n; i++) {

            sum += sum * i;

        }

        return sum;

    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值