第4章循环结构_第1页
第4章循环结构_第2页
第4章循环结构_第3页
第4章循环结构_第4页
第4章循环结构_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4章章 循环结构循环结构 本章学习重点本章学习重点 lwhile、do-while以及for语句 。 l跳转语句break和continue 。 l分支及循环结构的嵌套编程 。 l较复杂程序的执行流程分析 。 4.1 循环结构 l在进行程序设计时,经常会碰到一些计算并不 很复杂,但却要重复进行相同的处理操作的问 题。比如: l(1)计算累加和1+2+3+100。 l(2)计算阶乘,如10!。 l(3)计算一笔钱在银行存了若干年后,连本 带息有多少? l问题(1),用一条语句:sum = 1+2+3+100 来求解,则赋值表达式太长, l改成多条赋值语句:sum +=1; sum +=2;

2、sum +=3; ; sum +=100;也不行,即便加到100那也 有100条语句,程序过于臃肿,不利编辑、存储 和运行。 lJava语言引入三种语句:while、do-while以及for 来解决这类问题。我们把这类问题的结构称为循 环结构,把这三种实现语句称为循环语句。 l这三种循环语句的流程图如下所示: while语句 lwhile语句的一般语法格式如下: while(条件表达式) 循环体; while是关键字,首先计算条件表达式的值,若为true则 执行循环体,然后再计算条件表达式的值,只要是true 就循环执行,直到布尔值为false才结束退出while结构。 循环体可以是复合语句

3、、简单语句甚至是空语句, 一般情况下,循环体中应包含有能修改条件表达式取值 的语句,否则就容易出现“死循环”(程序毫无意义地 无限循环下去)。 例如:while(1);这里,循环体为一空语句,而条件 表达式为一常量1(Java语言里,0代表false,非0为 true),因此这是一死循环。 【例4-1】利用while语句实现1到100的累加。 public static void main(String args) int sum=0; /累加和变量sum int i=1; / 控制变量i while(i=100) sum+=i; i+; System.out.println(累加和为:+su

4、m); (1)存放累加和的变量初始值一般赋值为0。 (2)变量i既是累加数,同时又是控制变量(控制循环体的循环次数)。 (3)循环体语句sum+=i; i+; 可以合并简写为:sum+=i+; 但对于初学者而言,不建议这么写。 ()while循环体语句多于一条,因而必须以复合语句形式出现,千万别 漏了大括号。 【例4-2】利用while语句求10的阶乘。 public class Test public static void main(String args) long jc=1; int i=1; while(i=10) jc*=i; i+; System.out.println(i-1)

5、+!结果:+jc); 本程序需要注意的要点有: (1)求阶乘的积时,变量jc初始值应为1。 (2)由于阶乘的积,数值往往比较大,因此要注意防止溢出, 比如尽量选用取值范围大的长整型long。 【例4-4】有一条长的阶梯,如果每步2阶,则最后剩1阶 ,每步3阶则剩2阶,每步5阶则剩4阶,每步6阶则剩5阶, 只有每步7阶的最后才刚好走完,一阶不剩,问这条阶梯 最少共有多少阶? public class Test public static void main(String args) int i=1; while(!(i%2=1 System.out.println(这条阶梯最少有:+i+阶);

6、l假如现在想算出在1万个阶梯内,都有哪些 阶梯数满足题意的话,可以这样改写程序中 的while结构: while(i=10000) if(i%2=1 i+; l新程序运行结果如下: l119阶 329阶 539阶 749阶 959阶 1169阶 1379阶 1589阶 1799阶 2009阶 2219阶 2429阶 2639阶 2849阶 3059阶 3269阶 3479阶 3689阶 3899阶 4109阶 4319阶 4529阶 4739阶 4949阶 5159阶 5369阶 5579阶 5789阶 5999阶 6209阶 6419阶 6629阶 6839阶 7049阶 7259阶7469

7、阶 7679阶 7889阶 8099阶 8309阶 8519阶 8729阶 8939阶 9149阶 9359阶 9569阶 9779阶 9989阶 do-while语句语句 ldo-while语句的语法格式如下: do 循环体;循环体; while(条件表达式);(条件表达式); 【例4-5】假定在Bank中存款额5000元,按6.25%的年利率计算,试问 过多少年后 就会连本带利翻一翻?试编程实现之。 public class Test public static void main(String args) double m=5000.0; /初始存款额 double s=m; /当前存款

8、额 int count=0; / 存款年数 do s=(1+0.0625)*s; count+; while(s2*m); System.out.println(count+年后连本带利翻一翻!); for语句语句 lfor语句的一般语法格式如下: for(表达式(表达式1;条件表达式;条件表达式2;表达式;表达式3) 循环体;循环体; l表达式1一般用来给循环控制变量赋初值,它仅在刚开始时被执行 一次,以后就不再被执行。 l表达式2是一个条件表达式,根据其取值的不同,决定循环体是否 被执行,若为true,则执行循环体,然后再执行表达式3。 l表达式3通常用作修改循环控制变量之用,接着又判断条

9、件表达 式2的布尔值,若还为true,则继续上述循环,直至布尔值变为 false。 【例4-6】利用for语句实现1到100的累加。 public class Test public static void main(String args) int sum=0; /累加和变量sum for(int i=1; i=100;i+) / 控制变量i sum+=i; System.out.println(累加和为:+sum); 【例4-7】假定在Bank中存款额5000元,按6.25%的 年利率计算,试问过多少年后就会连本带利翻一翻? 试用for语句编程实现之。 public class Test

10、public static void main(String args) double m=5000.0; /初始存款额 double s=m; /当前存款额 int count=0; / 存款年数 for(;s2*m;s=(1+0.0625)*s) count+; System.out.println(count+年后连本带利翻一翻!); 4.2 循环嵌套循环嵌套 l当循环体语句又是循环语句时,就构成了循环嵌 套,即多重循环,循环嵌套可以是两重的、三重 的甚至更多重(较复杂的算法)。 【例4-8】编程实现打印以下图案: * * * * * * public class Test public

11、 static void main(String args) int i,j; / i控制行数, j控制*的个数 for(i=1;i=6;i+) for(j=1;j=i*2-1;j+) System.out.print(*); System.out.println(); /换行 * * * * * * ? 4.3 跳转语句跳转语句 lbreak lcontinue lreturn 1 break lbreak语句的作用是使程序的流程从一个语句块的 内部跳转出来,如前述的switch结构以及循环结 构。break语句的语法格式为: break 标号; l标号是可选的,如前面介绍的switch结构

12、程序就没有使用标 号。不使用标号的break语句只能跳出当前的switch或循环 结构,而带标号的则可以跳出由标号指出的语句块,并从语 句块的下条语句处继续程序的执行。 l因此,带标号的break语句可以用来跳出多重循环结构。 【例4-9】写出以下程序执行后的输出结果。 public class Test public static void main(String args) int i ,s=0; for(i=1;i50) break; System.out.println(s=+s); 【例4-10】写出以下程序执行后的输出结果。 public class Test public sta

13、tic void main(String args) int jc=1,i=1; while(true) jc=jc*i; i=i+1; if (jc100000) /首先突破10万的阶乘 break; System.out.println(i-1)+的阶乘值是+jc); 【例4-11】写出以下程序执行后的输出结果。 public class Test public static void main(String args) int s=0,i=1; label: while(true) while(true) if (i%2=0) break ; /不带标号 if(s50) break la

14、bel; /带标号 s+=i+; i+; System.out.println(s=+s); 2 continue lcontinue语句只能用于循环结构,它也有两种使用形式:不带 标号和带标号。 l前者的功能是提前结束本次循环,即跳过当前循环体的其他后 续语句,提前进入下一轮循环体继续执行。对于while和do- while循环,不带标号的continue语句会使流程直接跳转到条件 表达式,而对于for循环,则跳转至表达式3,修改控制变量后 再进行条件表达式2的判断。 l带标号continue语句多用在多重循环结构中,标号的位置与 break语句的标号位置相类似,一般需放至整个循环结构的前面

15、, 用来标识这个循环结构,一旦内层循环执行了带标号continue 语句,程序流程则跳转到标号处的最外层循环,具体是:while 和do-while循环,跳转到条件表达式,for循环,跳转至表达式3。 【例4-12】写出以下程序执行后的输出结果。 public class Test public static void main(String args) int s=0,i=0; do i+; if (i%2!=0) continue; s+=i; while(s50); System.out.println(s=+s); 【例4-13】写出以下程序执行后的输出结果。 public class Test public static void main(String args) int i,j; label: for(i=1;i=200;i+) /查找1到200以内的素数 for(j=2;ji;j

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论