第5章 程序控制.docx
- 文档编号:26153739
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:73
- 大小:61.32KB
第5章 程序控制.docx
《第5章 程序控制.docx》由会员分享,可在线阅读,更多相关《第5章 程序控制.docx(73页珍藏版)》请在冰豆网上搜索。
第5章程序控制
第5章程序控制
考点01 循环结构
规则01:
Java语言共提供了3中循环结构,分别为while、do-while和for.
While(booleanconditionexpression)
repeatedstatementblock
while循环结构的形式如下:
(1)booleanconditionexpression为一条件表达式,其结果必须是一个布尔型值,而true或false,而不能是其他基本类型数据,这一点不同于C/C++语言。
(2)repeatedstatementblock为循环体,由一条以上的语句构成。
当循环体只有一条语句时,可以不用花括号;当循环体有两条或两条以上的语句时,必须用花括号括起来。
(3)while循环结构根据条件表达式的结果来判断是否执行或继续执行循环体。
当条件表达式为true时执行循环体,当表达式为false时退出循环体,执行while循环结构后面的语句。
(4)当首次进入while循环结构,而条件表达式为false时,此循环结构直接退出,执行while循环结构后面的语句,此循环结构体中的语句一次也未获得执行。
do
repeatedstatementblock
while(booleanconditionexpression)
do-while循环结构的形式如下:
(1)booleanconditionexpression为一条件表达式,其结果必须是一个布尔型值,而true或false,而不能是其他基本类型数据,这一点不同于C/C++语言。
(2)repeatedstatementblock为循环体,由一条以上的语句构成。
当循环体只有一条语句时,可以不用花括号;当循环体有两条或两条以上的语句时,必须用花括号括起来。
(3)do-while循环结构根据条件表达式的结果来判断是否执行或继续执行循环体。
当条件表达式为true时执行循环体,当表达式为false时退出循环体,执行while循环结构后面的语句。
(4)当首次进入do-while循环结构时,不管条件表达式取何值,此循环结构体中的语句至少可获得一次执行。
在执行完循环体中的内容后再判断条件表达式中的条件是否为true,如果为true就继续重复执行循环体中的内容,然后再进行判断,直到条件表达式为false时退出循环,执行循环后面的语句。
for(initialstatement;conditionexpression;spanstatement)
repeatedstatementblock
for循环结构的形式如下:
(1)initialstatement为循环初始化语句。
在进入for循环结构时,首先被执行,且在整个循环结构执行过程中仅被执行这一次。
(2)initialstatement部分一般而言,用于放置控制循环次数的变量的初始化语句。
该变量既可以在for循环结构外声明,也可以在此处声明和初始化一起进行,这种做法的好处是把控制循环次数的变量访问范围限制在循环结构内,使该变量不会受到外界的干扰,而导致出错。
(3)initial_statement部份可以同时声明,初始化多个控制循环次数的变量,各变量初始化语句间用逗号分隔。
并且要求当多个变量时,各变量的声明,初始化形式必须一致,即不能有的变量只有声明,有的变量只有初始化,而有的变量既有声明,也有初始化。
注意,当多个变量为同一数据类型时,可以一起声明,形式为datatypevary1=valuel、vary2=value2。
(4)condition_expression为一条件表达式,其结果必须是一个布尔型值,即true或false,而不能是其他基本类型数据。
一般用于判断控制循环次数的变量是否满足设置的条件。
(5)for循环结构同while循环结构一样,根据条件表达式的结果来判断是否执行式继续执行循环体。
当条件表达式为true时执行循环体,当表达式为fallse时退出循环体。
当首次进入循环结构,而条件表达式为false时,此循环结构直接退出,执行循环结构后面的语句,因此循环结构体中的语句一次也未获得执行。
(6)span_statement部分在每次for循环本被执行完后,立刻被执行,然后转去执行condition_expression部分。
一般而言此部分用于通过改变控制循环次数的变量来控制循环的执行次数。
(7)for循环中的intial_stetement、condition_expression和spam_statcmcnt这3个部分,各部分都可以既办包含一条语句,也可以包含多条语句,且多条语句之间用逗号分隔,而不是Java普通意义的语句分隔符一分号。
当3个部分均不含有一条语句时,即for{;;},此时的for循环为一个永远循环的死循环。
规则02:
在Java语言中,尽管goto是保留字,但并没有被使用,而是用continue和break配合标签来完成goto相应的功能。
规则03:
Java中,惟一用到标签的地方就是在循环语句之前,即紧靠在循环语句的前一条语句。
该语句以冒号结尾,用来配合continue和break语句使用,其命名要遵循Java中标识符的命名的规则。
规则04:
当continue语句用于循环时,根据其在循环估中所处的位置不同,会产生不同的执行效果。
以下代码块为一个双层循环结构,用于展示continue语句的作用。
注意,此代码块各部分之间的逻辑性不考虑。
……
label:
out_loop{//外层循环
……
//结束外层循环,移至外层循环起始处,从外层循环继续开始循环
continue;
……
//对束外层循环,移至标签处,从外层循环继续开始循环
continuelabel;
……
in_loop{//内层循环
……
//结束内层循环,移至内层循环起始处,从内层循环继续开始循环
continue;
……
//结束内外两层循环,移至标签处,从外层循环继续开始循环
continuelabel;
……
}
……
}
……
规则05:
当break语句用于循环时,根据其在循环体中所处的位置不同,会产生不同的执行效果。
以下代码为一个双层循环体结构,用于展示break语句的作用。
注意此代码块各部分之间的逻辑性不考虑。
……label:
out_loop{//外层循环
……
//结束外层循环,但并不重新进入循环,执行外层循环结构后的语句
break;
……
//结束外层循环,移至标签处,但并不重新进入循环,而转至执行外层循环结构后的语句
breaklabel;
……
in_loop{//内层循环
……
//结束内层循环,但并不重新进入内层循环,而转至执行内层循环结构后的外层循环体中的语句
break;
……
//结束内外两层循环,移至标签处,但并不重新进入循环,而转至执行外层循环结构后的语句
breaklabel;
……
}
……
}
……
示例01:
请问以下哪边些语句是Java语言中用于中断循环执行的?
请选择一个正确的答案:
(1)continue语句
(2)goto语句
(3)exit语句
(4)break语句
答案:
(4)
详解:
本题考查的核心是break语句,在Java语言中,尽管goto是保留字,但并没有使用,而是用continue和break来完成相应的功能,break语句的作用就是强行退出循环,不执行循环中剩余的语句,而continue语句是退出当前循环回到起始处继续执行循环。
示例02:
请问以下代码错在何处?
publicclassExample{
publicstaticvoidmain(Stringargs[]){
for(i=0;j=0,i<10;++i,j+=i){
k+=i*i+j*j;
}
}
}
请选择所有正确答案:
(1)在语句块中应超过一条以上的语句。
(2)在i=0和j=0之间应使用逗号。
(3)使用了两个循环变量。
(4)在j=0和i<10之间应使用分号。
答案:
(2)(4)
详解:
本题考查的核心是for循环的语法结构。
for循环体可以同时声明、初始化多个控制循环次数的变量,各变量初始化语句间用逗号分隔,而初始化部分和条件控制部分应用分号隔开,选项
(2)和选项(4)正确,循环变量i和j之间用逗号隔开,而不是用分号隔开,在j=0和i<10之间应使用分号隔开。
示例03:
请问,以下代码片断错在何处?
for(inti=0;i<10;++i){
if(x[i]>100)break;
if(x[i]<0)continue;
x[i+1]=x[i]+y[i];
}
请选择一个正确答案:
(1)在同一个for循环语句中同时出现break和continue语句是非法的。
(2)变量i不应在for表达式中声明、初始化。
(3)自动递增操作在for表达式中不允许。
(4)无任何错误。
答案:
(4)
详解:
本题考查的核心是for循环结构。
选选项
(1)错误,break和continue语句可以同时出现在for循环体中,只是起的作用不同,break语句的作用是强行退出循环,不执行循环中剩余的语句,而continue语句是退出循环加到起始处继续执行循环,选项
(2)错误,因为for循环允许在对构中声明初始化循环变量,这样做的好处是把控制循环次数的变量访问范限在循环结构内,便该变量不会受到外界的干扰,而导致出错。
示例04:
给出以下代码,请问该程序的运行结果是什么?
publicclassExample{
publicstaticvoidmain(Stringargs[]){
intm=2;
intp=1;
intt=0;
fot(;p<5;p++){
if(t++>m){
m=p+t;
}
}
System.out.println(“tepuals”+t);
}
}
请选择一个正确的答案:
(1)tepuals2
(2)tepuals4
(3)tepuals6
(4)tepuals7
答案:
(2)
详解:
本题考查的核心是for循环结构。
示例中的for表达式是正确的,因为fot循环允许初始化,控制条件和更改循环变量中的任意一部分可以无一条语句。
实际上,该for循环尽管无明确声明循环变量,但变量p的作用就是一个循环变量,其初始值为1。
整个循环次数为4(p<5),最终打印给出tepuals4。
示例05:
给出以下代码,请问该程序的运行结果是什么?
publicclassExample{
publicstaticvoidmain(String[]args){
inti,j;
fot(i=0,j=0;i+j<20;++i,j+=i){
System.out.println(i+j);
}
}
}
请选择一个正确的答案:
(1)打印输出5行数据。
(2)打印输出8行数据。
(3)打印输出13行数据。
(4)编译错误。
答案;
(1)
详解:
本题考查的核心是for循环结构。
示例中的for表达式是正确的,因为for循环允许同时声明、初始化多个控制循环次数变量,各变量初始化语句只需结构一致且用逗号分隔即可,循环过程中,变量i、j和表达式i=j的变化是这样的。
i=0,j=0,i+j=0
i=1,j=1,i+j=2
i=2,j=3,i+j=5
i=3,j=6,i+j=9
i=4,j=10,i+j=14
示例06:
给出以下代码,请问该程序的运行结果是什么?
classExample{
publicstaticvoidmain(String[]args){
inti,j;
fot(i=0,j=0,i+j<20;++i,j+=i--){
System.out.ptintln(i+j);
}
}
}
请选择一个正确答案:
(1)打印输出5行数据。
(2)打印输出8行数据。
(3)打印输出13行数据。
(4)编译错误。
(5)打印输出20行数据。
答案:
(5)
详解:
本题考查的核心是for循环结构。
难点在于控制循环变量变化的表达式因引入递增和递减算而变得稍微复杂一些。
表达式j+=i--的等价形式为j=j+i--。
因为示例中的单操作运算符--是后自动递减运算,后自动递减运算意味着先生成表达式值,后再执行递减运算,因此表达式j+=i--的运算过程为先将变量i的值与变量j相加,将想加结果赋予变量j,最后变量i减1。
在整个循环过程中,变量i由于每次先加1,马上又减1,因此始终为0,而变量j依次递增1。
共循环20次,打印出20行数据。
示例07:
给出以下代码,请问该程序的运行结果是什么?
1.publicclassExample{
2.publicstaticvoidmain(Stringargs[]){
3.inttotal=0;
4.
5.for(inti=0,j=10;total<30;++i,--j){
6.System.out.println(“i=”+i+”:
j=”+j);
7
8.total+=(i+j);
9.
10.}
11.
12.System.out.println(“Total”+total);
13.}
14.}
请选择一个正确答案:
(1)代码编译失败,因为在第5行变量j声明错误。
(2)代码编译失败,因为在非静态类中不应有静态方法。
(3)代码编译失败,但在运行期第5行有异常抛出。
(4)代码编译失败,但在运行期第2行有异常抛出。
(5)代码编译成功,可以打印输出:
i=0;j=10
i=1;j=9
i=2;j=8
Total30
答案:
(5)
详解:
本题考查的核心是for循环结构。
选项
(1)、(3)错误,因为for循环允许同时声明,初始化多个控制循环次数的变量,并且循环变量的初始值可以任意设置,不一定必须为0,如示例中的循环变量j的初始值为10。
选项
(2)、(4)错误,在Java语言中只有静态方法不能直接调用非静态方法,因为两者生命期不同,没有要求具有静态方法的类也必须定义为静态类。
示例08:
给出以下代码,请问该程序的运行结果是什么?
classExample{
publicstaticvoidmain(Stringargs[]){
loop1:
for(inti=0;i<3;i++){
loop2:
for(intj=0;j<3;j++){
if(i==j){
breakloop2;
}
System.out.println(“i=”+i+”j=”+j+””);
}
}
}
}
请选择一个正确答案:
(1)
i=1
j=0
(2)
i=1
j=0
i=2
j=1
(3)
i=0
j=1
i=0
j=2
i=1
j=0
i=2
j=0
i=2
j=1
(4)
i=1
j=0
i=2
j=0
i=2
j=1
(5)
i=1j=0
i=2j=0
i=2j=1
答案:
(5)
详解:
本题考查的核心是break语句的使用,break语句的作用就是强行退出循环,不执行循环中剩余的语句,在本示例中,break语句用于终止内循环,而并不影响外循环的执行,因此根据外循环的循环次数,很容易得出打印输出了3次,因此只有选项(5)正确。
classExample{
publicstaticvoidmain(Stringargs[]){
loop1:
fot(inti=0;i<3;i++){
loop2:
fot(intj=0;j<3;j++){
if(i==j){
continueloop2;
}
System.out.println(“i=”+i+”j=”+j);
}
}
}
}
请选择一个正确的
i=0j=0
i=0j=1
i=1j=0
i=1j=1
i=2j=0
i=2j=1
(2)
i=0j=0
i=1j=1
i=2j=2
(3)
i=0j=1
i=0j=2
i=1j=0
i=1j=2
i=2j=0
i=2j=1
(4)以上均不对。
答案:
(3)
详解:
本题考查的核心是continue语句,continue语句的作用是退出当前循环回到循环起始处继续执行循环,在本示例中,标签loop1;因未和任何continue语句配对,因此不起任何作用,continue语句由于和loop2配对,因此对内层循环起作用,由于每次均有一个变量j值和变量i值相等而导致打印语句未获得执行,因此最终打印输出次数为3*2=6,3为外层循环次数,2为内层循环次数。
示例10:
给出以下代码,请问该程序的运行结果是什么?
publicclassExample{
publicstaticvoidmain(Stringargs[]){
inti=1;
intj=1;
outer:
for(i=1;i<3;i++){
inner:
for(j=1;j<3;j++){
if(j==2){
continueouter;
}
System.out.println("i="+i+",j="+j);
}
}
}
}
请选择所有正确的答案:
(1)打印输出i=1,j=1
(2)打印输出i=1,j=2
(3)打印输出i=1,j=3
(4)打印输出i=2,j=1
(5)打印输出i=2,j=2
(6)打印输出i=2,j=3
(7)打印输出i=3,j=1
(8)打印输出i=3,j=2
答案:
(1)(4)
详解:
本题考查的核心是continue语句,在本示例中,执行到内层循环体中continueouter:
语句,就会跳出外循环体从outer标签指定处继续执行,同时中断内循环以及外部循环,并移至标签outer处,随后继续循环,但是却是从外部循环开始,所以外部循环两次,而内部循环由于if语句每次只执行了一次,由于执行continue语句而跳出循环体。
示例11:
给出以下代码,请问数组中的内容是什么?
classExample{
publicstaticvoidmain(Stringargs[]){
int[][]triArray=newint[4][];
intval=1;
for(inti=0;i triArray[i]=newint[i+1]; for(intj=0;j triArray[i][j]=val++; System.out.print(triArray[i][j]); } System.out.println(); } } } 请选择一个正确的答案: (1) 1234 567 89 10 (2) 14916 (3) 1234 (4) 1234 5678 9101112 13141516 (5) 1 23 456 78910 答案: (5) 详解: 本题考查的核心是for循环结构,在本示例中,triArray为一个二维数组,二维数组实质为由一维数组构成,在声明时已确定为4行数据,即存在4个一维数组,每次在进行循环前创建一个数组,数组长度从1依次递增至4,因此最终生成的数组如选项(5)所示的二维数组结构。 示例12: 给出以下代码,请问该程序的运行结果是什么? publicclassExample{ publicstaticvoidmain(Stringargs[]){ for(inti=0;i<2;i++){ for(intj=2;j>=0;j--){ if(i==j){ break; } System.out.println(“i=”+i+”j=”+j); } } } } 请先择所有正确的答案: (1)打印输出i=0j=0 (2)打印输出i=1j=0 (3)打印输出i=0j=2 (4)打印输出i=0j=1 (5)打印输出i=1j=1 (6)打印输出i=1j=2 (7)打印输出i=2j=0 (8)打印输出i=2j=1 (9)打印输出i=2j=2 答案: (3)(4)(6) 详解: 本题考查的核心是break语句的使用,break语句的作用就是强行退出循环,不执行循环中剩余的语句,在本示例中,break语句用于终止内循环,而并不影响循环的执行,执行过程为,i为0时,内循环两次,因此打印输出i=0j=2,i=0j=1;i为1时,内循环1次(当j为1时,执行break语句),因此打印输出i=1j=2;i为2时,内循环0次(直接满足if条件,执行break语句)。 示例13: 请问,while循环结构的条件表达式结果是否必须为布尔型? 请选择一个正确的答案: (1)是 (2)否 答案: (1) 详解: 本题考查的核心是while循环结构,while循环结构中的条件表达式,其结果必须是一个布尔型值,即ture或false,而不能是其他基本类型数据,这一点不同于c/c++语言。 示例14: 请问,发下代码片断错在何处? while(x>>2)do{ x*=y } 请选择所有正确的答案: (1)循环表达式不是一个布尔表达式。 (2)关键字do应被去掉。 (3)关键字while应大写。 (4)没有错误。 答案: (1) (2) 详解: 本题考查的核心是while循环结构、选项 (1)正确,因为while循环结构中的循环表达式必须是一个条件表达式,其返回值必须是一个布尔型值,用于判断是否执行循环体,选项 (2)正确,在Java语言中的while循环结构无do关键字,而不像VB、Pascal等语言,选项(3)错误,因为Java语言中的关键字均为小写。 示例15: 给出以下代码,请问该程序的运行结果是什么? publicclassExample{ publicstaticvoidmain(Stringargs[]){ inti=1; do{ i--; }while(i>2); System.out.println(i); } }请选择一个正确的答案: (1)打印输出0 (2)打印输出1 (3)打印输出2 (4)打印输出-1 答案: (1) 详解: 本题考查的核心是do-while循环结构。 do-while循环结构不同于while循环结构,当首次进入do-while循环结构时,不管条件表达式取何值,此循环结构体中的语句至少可以获得一次执行,在执行完循环体中的内容后再判断条件表达式中的条件是否为true,如果为true就再继续重复执行循环体中的内容,然后再进行判断,以此类推直到条件表达式为false时退出循环,执行循环后面的语句,在本示例中,变量i的初始值为1,在do-while循环结构中被执行一次减1操作后,因不满足循环条件而退出循环体,打印输出0。 示例16: 给出以下代码,请问该程序的运行结果是什么? publicclassExample{ publicstaticvoidmain(Stringargs[]){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5章 程序控制