循环结构

1 请描述while语句的执行流程

while语句的语法格式如下:

 
  1. while(表达式) {
  2. 语句块
  3. }

参考答案

while语句,首先判断表达式的值是否为 true,如果为 true,则执行大括号中的语句块;然后再判断表达式的值是否为 true,依次重复下去,直到表达式的值等于false,则不再执行大括号中的语句块,循环结束。

2 指出下列程序运行后的情况

 
  1.     public static void main(String[] args) {
  2.         int count=0;
  3.         while(count<5);
  4. {
  5.             System.out.print(count+" ");
  6.             count++;
  7.         }
  8.     }

参考答案

这段代码会形成一个死循环。

乍一看,这段代码片段没有任何问题,但仔细看一下这个程序,不难发现while循环的循环条件表达式后紧跟了一个分号。在Java中,一个单独的分号表示一个空语句,不做任何事情的空语句,这意味着这个while循环的循环体是空语句。空语句作为循环体也不是大问题,问题是当Java反复执行这个循环时,循环条件的返回值没有任何变化,这就形成了一个死循环。分号后面的代码块则与while循环没有任何关系。

3 指出下列代码运行后的结果

 
  1.     public static void main(String[] args) {
  2.         int count=10;
  3.         do
  4.         {
  5.             System.out.print(count+" ");
  6.             count++;
  7.         }while(count<5);
  8.     }

参考答案

输出结果为:count=10。

从上面程序看,虽然count的值为10,表达式count<5返回false,但是do-while语句还是会执行一次循环体,输出count=10。

4 请简述while语句和do-while语句的区别

参考答案

while语句和do-while语句的区别在于:while语句是先判断循环条件,如果条件为真则执行循环体;而do-while语句则先执行一次循环体,然后才判断循环条件,如果循环条件为真,则执行下一次循环,否则终止循环。

5 请简述for语句的执行流程

for语句的语法格式如下:

 
  1. for(表达式1;表达式2;表达式3) {
  2. 语句块
  3. }

参考答案

for语句,首先计算表达式1,接着执行表达式2,若表达式2的值等于true,则执行大括号中的语句块,接着计算表达式3,然后再判断表达式2的值。依次重复下去,直到表达式2的值等于false。

6 指出下列代码中,for循环的各个表达式是否正确

 
  1.     public static void main(String[] args) {
  2.         for(int i=0,j=0,k=0;i<10&&j<4&&k<10;j+=2){
  3.             System.out.println(i++);
  4.             System.out.println(++k+i);
  5.         }
  6.     }

参考答案

正确。

首先,for循环允许同时出现多个初始化语句。上面代码中初始化变量有三个,但是只能有一个声明语句,因此如果需要在初始化表达式中声明多个变量,那么这些变量应该具有相同的数据类型。

其次,循环条件也可以是一个包含逻辑运算符的表达式。上面代码中使用&&来组合多个boolean表达式。

最后,循环迭代语句可以是任何表达式。上面代码中使用了j+=2。

7 指出下列代码的运行结果

 
  1.     public static void main(String[] args) {
  2.         for (int i = 0; i < 10; i++) {
  3.             System.out.println("i=" + i);
  4.             if (i == 2) {
  5.                 break;
  6.             }
  7.         }
  8.     }

参考答案

输出结果为:i=0 i=1 i=2。

运行上面程序,将看到i循环到2时即结束,当i等于2时,循环体内遇到break语句,程序跳出循环。

8 指出下列代码的运行结果

 
  1.     public static void main(String[] args) {
  2.         for (int i = 0; i < 4; i++) {
  3.             if (i == 2) {
  4.                 continue;
  5.             }
  6.             System.out.print("i=" + i +" ");
  7.         }
  8.     }

参考答案

输出结果为:i=0 i=1 i=3

从上面输出结果可以看出, 当i等于2时,程序没有输出i=2,因为程序执行到continue时,忽略了当次循环中continue语句后的代码。

9 数列求和

有数列为:9,99,999,...,9999999999。要求使用程序计算此数列的和,并在控制台输出结果。交互效果如图-1所示。

图- 1

另有数列:1+1/2+1/3…+1/n(n>=2)。要求使用交互的方式计算此数列的和:用户在控制台录入需要计算的整数 n 的值,程序计算此数列的和,并在控制台输出结果。程序的交互过程如图-2所示。

图- 2

参考答案

程序需要使用for循环计算数列的和,然后将计算出来的和输出到控制台。

实现此案例需要按照如下步骤进行。

步骤一:定义类及 main 方法

首先定义一个名为 SumOfSeq的类,并在类中定义Java 应用程序的入口方法main ,代码如下所示:

 
  1. public class SumOfSeq{
  2.     public static void main(String[] args) {
  3.     }
  4. }

步骤二:计算第一个数列的和

使用for循环计算数列的和,然后将计算出来的和值输出到控制台。代码如下:

 
  1. public class SumOfSeq {
  2.     public static void main(String[] args) {
  3.         // 数列求和
  4.         long nine = 9;
  5.         long result = nine;
  6.         for (int i = 2; i <= 10; i++) {
  7.             nine = nine * 10 + 9;
  8.             result += nine;
  9.         }
  10.         System.out.println("9+99+999+...+9999999999=" + result);
  11.     }
  12. }

步骤三:计算第二个数列的和

新建类SumOfSeq2,以计算第二个数列(1+1/2+1/3…+1/n)的和。代码如下:

 
  1. import java.util.Scanner;
  2. public class SumOfSeq2 {
  3.     public static void main(String[] args) {
  4.         Scanner scanner = new Scanner(System.in);
  5.         System.out.println("请输入整数(例如10):");
  6.         int n = scanner.nextInt();
  7.         double result = 0;
  8.         for (int i = 1; i < n; i++) {
  9.             result += 1.0 / i;
  10.             if(i==1){
  11.                 System.out.print("1+");
  12.             }else{
  13.                 System.out.print("1/" + i + "+");    
  14.             }
  15.         }
  16.         result += 1.0 / n;
  17.         System.out.print("1/" + n + "=" + result);
  18.     }
  19. }

本案例的完整代码如下所示:

计算第一个数列(9+99+999+...+9999999999)和的完整代码如下所示:

 
  1. public class SumOfSeq {
  2.     public static void main(String[] args) {
  3.         // 数列求和
  4.         long nine = 9;
  5.         long result = nine;
  6.         for (int i = 2; i <= 10; i++) {
  7.             nine = nine * 10 + 9;
  8.             result += nine;
  9.         }
  10.         System.out.println("9+99+999+...+9999999999=" + result);
  11.     }
  12. }

计算第二个数列(1+1/2+1/3…+1/n)和的完整代码如下所示:

 
  1. import java.util.Scanner;
  2. public class SumOfSeq2 {
  3.     public static void main(String[] args) {
  4.         Scanner scanner = new Scanner(System.in);
  5.         System.out.println("请输入整数(例如10):");
  6.         int n = scanner.nextInt();
  7.         double result = 0;
  8.         for (int i = 1; i < n; i++) {
  9.             result += 1.0 / i;
  10.             if(i==1){
  11.                 System.out.print("1+");
  12.             }else{
  13.                 System.out.print("1/" + i + "+");    
  14.             }
  15.         }
  16.         result += 1.0 / n;
  17.         System.out.print("1/" + n + "=" + result);
  18.     }
  19. }
posted @ 2018-01-22 15:46  清风已来  阅读(475)  评论(0编辑  收藏  举报