第三章-流程控制语句

一、单项选择题

1. 以下选项中,不属于 Java语句的是                                             [ 1

A. for语句          B. switch 语句           C. while语句           D. include语句

2. 以下选项中,不属于 Java语句的是                                              【 】

A. break语句          B. continue 语句        C. goto语句            D. for语句

3. 设i的初值为6, 则执行完j=i--; 后, i和j的值分别为                                   【 】

A. 6, 6             B. 6,5               C. 5,6              D. 5,5

4. 在一个 if语句中,下列选项中正确的是                                           【 】

A. if的个数一定多于 else的个数                B. if的个数一定与 else 的个数相等

C. if的个数一定少于 else 的个数                 D. if的个数可能多于 else 的个数

5. switch语句中,大多数情况下,每个 case 块中最后一条语句应该是                          【  】

A. default          B. continue             C. break               D. goto

6. switch 语句中, 可以省略 break语句的块是                                        【 】

A. 第一个块          B. 最后一个块          C. 任意一个块         D. 哪个块都不行

7. switch语句中,如果没有相匹配的条件,则执行                                      【 】

A. 任一个 case后的语句                     B. default 之后的语句

C. 所有 case 后的语句                       D. 循环执行 switch 语句

8. 下列选项中,不是受检异常的是                                               【 】

A. ClassNotFoundException                    B. ArithmeticException

C. FileNotFoundException                     D. IOException

9. 下列选项中,与try语句配套使用的语句是                                          【 】

A. default          B. catch               C. break               D. case

10. 处理异常时,catch 语句的后面,一般都会出现的语句是                                【 】

A. default          B. catch               C. break               D. finally

11. 假设有定义: String s= null, 则下列选项中, 能引发异常的是                           【 】

Ⅰ. if((s! = null)&(s. length()>0))

Ⅱ. if((s! = null)&&(s. length()>0))

Ⅲ. if((s== null)| (s. length()==0))

Ⅳ. if((s== null)||(s. length()==0))

A. I                B. Ⅰ和Ⅲ               C.Ⅱ和Ⅳ             D. Ⅲ

二、填空题

1. 能替换 for语句的语句是 do语句 或 while语句     。

2. 能替换 if语句的语句是Switch语句 。

3. switch语句中,表示条件的表达式只能是 int 类型或 char  类型。

4. while语句中, while后面的条件必须是 布尔 类型的。

5. 流控制语句有3类,对应于顺序流的语句是 赋值语句 。

6. 循环语句有 for 语句、while语句和 do 语句。

7. 分支语句有 if 语句和 switch语句。

8. 如果想使用其他包中的类,则需要在程序的开头使用 import 语句。

三、简答题

1. 请说明 switch 语句的执行过程。

答:表达式求值:首先,switch 语句会对括号内的表达式 expression 进行求值。这个表达式的值必须是一个整数(byte、short、int、char 或者它们的包装类,也可以是枚举类型)。

查找匹配的 case:接着,switch 语句会寻找一个 case 子句,其中的常量表达式(constant)与 expression 的值相等。如果找到匹配的 case 子句,那么就执行该 case 子句后面的代码块。

执行代码块:从匹配的 case 子句开始,执行相应的代码块。如果未使用 break 语句,程序将继续执行下一个 case 子句的代码块(即所谓的“fall-through”行为)。

使用 break:break 语句用于终止当前 case 代码块的执行,并跳出整个 switch 语句。如果不希望出现“fall-through”,应在每个 case 的末尾加上 break。

默认情况:如果没有任何 case 子句与 expression 的值匹配,那么 switch 语句会执行 default 子句(如果有的话)。default 子句是可选的,通常用来处理未预料的情况。

  1. 程序3.1中如果某个 break语句不写,则程序执行时的输出是什么? 举例说明。

答:如果在 switch 语句中的某个 case 子句后面没有写 break 语句,那么程序会继续执行下一个 case 子句的代码块,即使它不匹配当前的 expression 值。这种现象被称为“fall-through”,Switch的穿透性

  1. 请说明嵌套的 if语句中,else语句的对应规则。

答:在Java中,else 语句与最近的未配对的 if 语句配对。如果有多个 if 语句嵌套在一起,那么 else 会与最近的那个 if 语句配对。

  1. 请简要说明 while语句与 do语句的不同之处。

答:while语句是先计算条件表达式的值,当值为真时,重复执行循环体育局,直到表达式为假结束;

Do语句是首先执行循环体语句,然后判定条件表达式的值,当值为真时,重复执行循环体语句,直到表达式的值为假时结束。

  1. 请简要说明 while语句与 for语句的适用情况。

答:while 循环:适用于在进入循环之前无法确切知道循环次数,但可以根据条件退出循环的情况。

for 循环:适用于在进入循环之前就已经知道循环次数,或者需要对循环变量进行初始化和更新的情况。

  1. 什么是异常? 解释“抛出”和“捕获”的含义。

答:异常(Exception)是指程序在运行时发生的非正常情况或错误,这些情况通常会导致程序的正常执行流程中断。

抛出:当程序检测到错误时,通过 throw 关键字创建并抛出异常对象。

捕获:通过 try-catch 块来捕获并处理异常,防止程序因异常而终止。

  1. Java 是如何处理异常的?

答:异常类(Exception Class):Java 定义了一系列异常类,用于表示各种类型的错误和异常情况。这些类通常继承自 java.lang.Throwable 类,其中最常见的基类是 java.lang.Exception。

抛出异常(Throwing Exceptions):当程序检测到错误或异常情况时,可以通过 throw 关键字抛出一个异常对象。

捕获异常(Catching Exceptions):使用 try-catch 语句块来捕获并处理异常。如果在 try 块中抛出了异常,则控制权会转移到相应的 catch 块。

finally 块:finally 块是可选的,它通常用于释放资源或执行清理工作,无论是否发生异常,finally 块中的代码都会被执行。

声明抛出异常(Declaring Thrown Exceptions):如果一个方法有可能抛出检查型异常(checked exceptions),则必须在方法签名中声明它可能抛出的异常类型。

  1. try及 catch 语句的作用是什么? 语法格式如何?

答:try 块用于包裹那些可能抛出异常的代码。如果在 try 块中抛出了异常,那么控制权会立即转移到与之匹配的 catch 块。如果没有匹配的 catch 块,则异常会继续向上抛出,直到被更高层级的 try-catch 块捕获,或者导致程序终止。

catch 块用于处理从 try 块中抛出的异常。当 try 块中的代码抛出一个异常时,控制权会转移到 catch 块。如果 catch 块能够处理该异常,程序会继续执行 catch 块中的代码。如果 catch 块不能处理该异常,或者没有匹配的 catch 块,异常将继续向上抛出。

try {

    // 可能抛出异常的代码

} catch (ExceptionType1 e1) {

    // 处理 ExceptionType1 类型的异常

} catch (ExceptionType2 e2) {

    // 处理 ExceptionType2 类型的异常

} finally {

    // 无论是否发生异常都会执行的代码

}

  1. 在什么情况下执行 try语句中 finally 后面的代码段? 在什么情况下不执行?

答:finally 块是 try-catch 语句的一部分,用于执行无论是否发生异常都需要执行的代码。

不执行的情况:

程序提前终止:如果在 try 块之前或者 finally 块之后的代码中出现了系统退出(如 System.exit(0)),那么 finally 块不会被执行。

虚拟机崩溃:如果 JVM 自身出现了严重错误导致崩溃,那么 finally 块也不会被执行。

覆盖 finally 块:如果在一个 catch 块中使用了 System.exit(0) 或其他方法导致程序提前终止,那么 finally 块也不会被执行。

  1. 说出 Java中常见的几个异常,它们表示什么意思? 在什么情况下引起这些异常?

答:1. NullPointerException (NPE)

含义:当试图访问一个 null 对象的属性或方法时抛出。

情况:通常发生在试图调用 null 对象的方法或访问其字段时。

2. ArrayIndexOutOfBoundsException

含义:当试图访问数组中的无效索引时抛出。

情况:当索引小于 0 或大于等于数组长度时。

3. ArithmeticException

含义:当执行算术运算时遇到非法操作时抛出。

情况:最常见的原因是除数为零。

4. ClassCastException

含义:当试图将对象强制转换为不兼容的类型时抛出。

情况:尝试将对象转换为不是其子类的类型。

5. NumberFormatException

含义:当试图将字符串转换为数值类型但字符串格式不正确时抛出。

情况:字符串包含非数字字符或不符合数值格式。

11. 以下语句要打印从7开始的正奇数,但程序中有错误,请改正,然后写出此循环语句的循环次数。

 int k=7;

 do{

 System. out. println(k--);

//k--;

} while(k ! =0);

四、程序填空题

1. 某人以年利率r向银行存款m元,一年后存款额为m*(1+r),他想知道存多少年后,存款额会达到原来的k倍。以下方法已知m、r和k,计算至少多少年后存款额大于等于m*k。

 public int calYears( double m, double r, int k){

 double money; int years =0;

 money=m;

 while( money>m*k ){

 years = years+1;

 money * =  (n+1);

 return years;

}

l.

2. 方法 void Fibonacci ( int m) 的功能是输出不大于m的 Fibonacci数列中的元素。

注:Fibonacci数列的前两个数都是1,从第三个数开始,数列的每个数是其前面两个数之和。

 void Fibonacci( int m){

 int f1 =1, f2 =1, f3;

System. out. println( fl);

 System. out. println(f2);

 while( true){

f3 =f1 +f2;

 if(f3>m) break;

 System. out. println(f3);

f1 =f2;

f2 = f3;

}

}

五、程序设计题

1. 设n为自然数,

n! =1×2×3×……×n

称为n的阶乘, 并且规定0! =1。试编制程序计算2!,4!,6!,8! 和10!,并显示计算结果。

答://自然数结果sum

            // int sum = 1;

            // //自然数a

            // int a = 10;

            // if(a == 0){

            //     System.out.println(a+"!=1");

            // }else if (a > 0){

            //     for(int i=1;i<=a;i++){

            //         sum *= i;

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

               

            // }

            //     System.out.println(sum);

            // }else{

            //     System.out.println("不能是负数");

            // }

  1. 已知变量n,请写出使用 for语句计算s=1+1/2+1/3+...+1/n的代码。

答:// double sum=0;

                // double n=2;

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

                //     sum +=(1.0/i);

                // }

                // System.out.println(sum);

  1. 已知变量n,请写出使用 for语句计算s=1+1/3+1/6+...+1/3*n的代码。

答: double sum=1;

                double n=5;

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

                    sum +=(1.0/(i*3));

                    

                }

                System.out.println(sum);

4. 编写程序打印下面的图案。

答:// 上半部分

                // for (int i = 0; i < 3; i++) {

                //     for (int j = 0; j < i; j++) {

                //         System.out.print(" ");

                //     }

                //     for (int k = 0; k < 7 - (2*i); k++) {

                //         System.out.print("*");

                //     }

                //     System.out.println();

                // }

                // // 下半部分

                // for (int i = 0; i < 4; i++) {

                //     // 输出“-”

                //     for (int j = 0; j < 3 - i; j++) {

                //         System.out.print(" ");

                //     }

        

                //     // 输出“* ”

                //     for (int k = 0; k < (2*i) + 1; k++) {

                //         System.out.print("*");

                //     }

                //     System.out.println();

                // }

5. 编写程序打印下面的图案。

答:for(int a = 0;a<10;a++){

    for(int b = 0;b < 10-a ;b++){

        System.out.print("*");

    }

    System.out.println();

    

}

  1. 编写程序打印乘法口诀表。

答:int size = 9;         

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

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

            System.out.printf("%d * %d = %2d  ", j, i, i * j);

        }

        System.out.println(); // 换行

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小欧爱创笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值