版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章循环结构本章要点:5.1while语句和用while语句构成循环结构5.2do-while语句和用do-while语句构成循环结构5.3for语句和用for语句构成循环结构5.4循环结构嵌套5.5break和continue语句在循环体中作用5.6程序举例第1页第1页5.1.1while循环普通形式由while语句构成循环也称“当”循环,While语句普通形式为:While(表示式)循环语句;下列是几点阐明:1.while是C语言关键字。2.while后表示式,能够是C语言中任意合法表示式,通常为关系表示式或逻辑表示式,但也能够是其它运算表示式。当表示式值为零时,表示条件为假;非零时,表示条件为真。第2页第2页3.循环体能够是一条简朴可执行语句,也能够是复合语句。4.假如第一次计算时表示式值就为0,则循环语句一次也不被执行,流程直接跳过While语句,执行下一条语句。
※重点提醒:while型循环语句中循环体执行次数能够从0到无穷。若第一次计算表示式值为0,则循环体执行0次;若表示式恒为真,则陷入死循环。第3页第3页5.1.2while循环执行过程while循环执行过程是:计算while后表示式值,当值为非零时,执行循环体中语句;当值为零时,退出while循环。第4页第4页注意:进入while循环后,一定要有能使此表示式值变为0操作,不然,循环将会无限制进行下去,即进入死循环。在程序设计中,这个是不允许出现。比如:计算1+2+3+…+100。main(){inti,sum=0;i=1;while(i<=100){sum+=i;i++;}printf("d\n",sum);}程序运营结果为:5050第5页第5页(1)循环语句中“sum+=i”相称于“sum=sum+i”,提议读者采用前一个写法,由于它不但比后一个写法编码短,并且更能表达C语言特色。(2)注意,在循环体中应有使循环趋于结束语句。比如,本例中“i++;”,每循环一次i值就增长1,当i>100时,循环条件就不满足,循环到此结束。假如无此语句,则i值始终不变,循环永不结束,这就称为“死循环”。在程序设计中,是不允许死循环出现。
※重点提醒:在循环体中应有使循环趋于结束语句。在程序设计中,是不允许死循环出现。第6页第6页5.2do-while语句和用do-while语句构成循环结构5.2.1do-while语句构成循环结构
do-while是另一个循环结构,它普通形式为:
do
循环语句;while(表示式);第7页第7页下列是几点阐明:1.do是C语言关键字,必须和while联合使用。2.在while(表示式)后分号“;”不可丢,它表示do-while语句结束。3.while后括号中表示式能够是任意合法表示式,由它来控制循环是否执行。4.do-while之间循环体能够是一条可执行语句也能够是由“{}”构成符合语句。第8页第8页5.2.2do-while循环执行过程
do-while语句执行过程是:先执行一次指定循环语句,然后判断表示式值,若表示式值为非0,再返回重新执行循环语句,如此重复,直到表示式值为0时才跳出循环语句,执行下一条语句;若表示式值为0,则不再返回重新执行循环语句,直接退出循环语句,执行下一条语句。如图5.1(b)所表示。
dowhile语句特点是:先执行语句,后判断表示式值。故doWhile语句又称“直到型”循环结构。由于是先执行后判断,因此dowhile语句循环语句至少被执行一次。注意:while圆括号后面有一个分号“;”,书写时不能丢。第9页第9页比如:用dowhile循环结构来计算1+2+3+…+100。main(){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf("d\n",sum);}程序运营结果为:5050第10页第10页能够看出,此例结果与上节例程结果是完全相同,也就是说,对同一问题既能够用while语句来处理,也可用dowhile语句来处理。在普通情况下,用while语句和dowhile语句处理同一问题时,若两者循环体同样,运营结果也就同样。但当while后面表示式值一开始就为0时,两种循环结构结果是不相同。※重点提醒:do-while语句先执行语句,后判断表示式值。故do-while语句又称“直到型”循环结构。由于是先执行后判断,因此do-while语句循环语句至少被执行一次。第11页第11页5.3for语句和用for语句构成循环结构5.3.1for语句构成循环结构for语句普通形式为:for(表示式1;表示式2;表示式3)循环语句;下列是几点阐明:1.表示式1普通为赋值表示式,用于进入循环之前给循环变量赋初值。2.表示式2普通为关系表示式或逻辑表示式,用于执行循环条件鉴定,它与while、dowhile循环中表示式作用完全相同。3.表示式3普通为赋值表示式或自增、自减表示式,用于修改循环变量值。第12页第12页for循环结构是几乎所有高级语言都提供循环控制结构。但C语言中for语句使用最为灵活,它不但能够用于循环次数已经拟定情况,并且能够用于循环次数不拟定而只给出循环结束条件情况,因而它完全能够代替while语句和dowhile语句。※重点提醒:表示式1、表示式2、表示式3都必须为for语句要求合法表示式。第13页第13页
for语句执行过程是:
①先计算表示式1值。
②再计算表示式2值,若其值为真,则执行循环体一次;不然跳转第⑤步。
③然后计算表示式3值。
④转回上面第②步。
⑤结束循环,执行for语句下面一个语句。5.3.2for循环执行过程第14页第14页图5.2for语句执行流程图※重点提醒:在整个for语句中,表示式1只计算一次,表示式2和表示式3则也许计算多次。循环体也许多次执行,也也许一次都不执行。第15页第15页5.3.3相关for语句阐明(1)for语句普通形式中“表示式1”能够省略,即:for(;表示式2;表示式3)
循环语句;但注意省略表示式1时,其后分号不能省略。此时,应在for语句之前给循环变量赋初值。(2)假如省略表示式2,即:for(表示式1;;表示式3)循环语句;则表示表示式2值始终为真,循环将无终止地进行下去。比如:for(i=1;;i++)printf("%d",i);将无限循环输出1,2,3,4,5,6,……第16页第16页(3)假如省略表示式3,即:for(表示式1;表示式2;)循环语句;此时,也将产生一个无穷循环。因此,程序设计者应另外设法确保循环能正常结束,能够将循环变量修改部分(即表示式3)放在循环语句中控制。比如:for(i=1;i<=100;){sum+=i;i++;}上述for语句中没有表示式3,而是将表示式3(i++)放在循环语句中,作用相同,都能使用循环正常结束。注意表示式2后面分号不能省略。(4)也能够同时省略表示式1和表示式3,即:for(;表示式2;)循环语句;也即省略了循环初值和循环变量修改部分,此时完全等价于while语句。第17页第17页(5)同时省略表示式1、表示式2和表示式3,即:for(;;)循环语句;相称于赋循环变量初值,循环控制条件始终为真,不修改循环变量,故循环将无终止地进行下去。(6)在for语句中,表示式1和表示式3不但能够使用简朴表示式,也能够使用逗号表示式,即包括一个以上简朴表示式,中间用逗号间隔。在逗号表示式内按自左至右求解,整个表示式值为其中最右边表示式值。比如:
for(i=1;i<=100;i++,sum=sum+i)
相称于
for(i=1;i<=100;i++)
sum=sum+i;(7)在for语句中,表示式普通为关系表示式或逻辑表示式,但也能够是其它表示式(如字符表示式、数值表示式)。第18页第18页(8)for语句循环语句能够是空语句。空语句用来实现延时,即在程序执行中档待一定期间。下列为延时程序例子:for(i=1;i<=1000;i++);注意以上语句最后分号不能省略,它代表一个空语句。比如:用for循环结构来计算1+2+3+…+100。main(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("%d\n",sum);}程序运营结果为:5050第19页第19页能够看出,此例结果前两例是完全相同。显然,用for语句简朴、方便。※重点提醒:for语句中表示式能够部分或全部省略,但两个分号不能省略,且三个表示式均省略时,循环将会无限制执行,而形成死循环。因此,编写程序时,在for后面一对圆括号内,应只含有能对循环进行控制表示式,其它操作尽也许放在循环体内完成。第20页第20页5.4循环结构嵌套1.循环嵌套形式在一个循环体内又完整地包括了另一个循环,称为循环嵌套。循环嵌套能够是多层,但每一层循环在逻辑上必须是完整。比如下列几种形式二重嵌套。①while与while二重嵌套第21页第21页while(){…while(){…}}②dowhile与dowhile二重嵌套do{…do{…}while();
}while();③for与for二重嵌套for(;;){…for(;;){…}
}①while与while二重嵌套第22页第22页2.关于循环嵌套几点阐明(1)三种循环语句不但各自能够嵌套,并且还能够互相嵌套。比如:①while与dowhile二重嵌套while(){…do{…}while;}第23页第23页②while与for二重嵌套while(){…for(;;){…}}③dowhile与for二重嵌套do{…for(;;){…}}while();第24页第24页(2)使用嵌套时,应注意一个循环结构应完整地嵌套在另一个循环体内,不允许循环体间交叉。比如下列循环结构是不正确:while(){…do{…}}while();(3)除了上述二重嵌套外,还能够有三重嵌套、四重嵌套等多层嵌套。(4)嵌套外循环和内循环循环控制变量不得同名,但并列内、外循环允许有同名循环控制变量。比如下列为合法循环结构:for(j=1;j<=10;j++){…for(i=1;i<=10;i++){…}
for(i=1;i<=10;i++){…}
…}第25页第25页3.循环嵌套程序举例利用双层for循环结构打印出9×9乘法表。main(){inti,j;for(i=1;i<10;i++)printf("%5d",i);printf("\n");for(i=1;i<=46;i++)printf("-");printf("\n");for(i=1;i<10;i++){for(j=1;j<=9;j++)printf("%5d",i*j);printf("\n");}}程序运营结果为:
123456789--------------------------------------------------------------------1234567892468101214161836912151821242748121620242832365101520253035404561218243036424854714212835424956638162432404856647291827364554637281第26页第26页(1)第4~5行和第7~8行为两个并列for循环结构,作用是输出运营结果第1行和第2行。(2)第6行和第9行“printf("\n");”语句作用是输出一行后进行换行处理。(3)第10~14行为二重嵌套for循环结构,作用是打印乘法表,其中第14行作用是每次退出内循环之时,即每次输出一行完毕后进行换行处理。※重点提醒:在循环嵌套中,内嵌第一个for循环结束条件和外循环控制变量是相关,而最里面for循环循环结束条件是固定不变。第27页第27页5.5break和continue语句在循环体中作用5.5.1break语句在第四章中我们简介过,使用break语句能够使流程跳出switch语句体,在循环结构中,也能够使用break语句使流程跳出本层循环体,从而提前结束本层循环。
break语句普通形式为:
break;第28页第28页关于break语句有下列几点阐明:(1)break语句不能用于循环语句和switch语句之外任何其它语句中。(2)break语句只能用于循环体内,不能用在循环语句上。如for(i=1;i<10;break,i++)是不正确。(3)break语句只能跳出一层循环,即从当前循环层中跳出。假如要跳出多层循环,可使用goto语句。第29页第29页比如:设计一个程序,求能同时满足除以3余1、除以5余3、除以7余5、除以9余7最小正整数。main(){inti;for(i=1;;i++)if(i%3==1&&i%5==3&&i%7==5&&i%9==7)break;printf("%d\n",i);}程序运营结果为:313由于此题无法拟定循环条件和循环次数,因此应采用无限循环配以break语句办法。※重点提醒:当break语句出现在循环体中switch语句体内时,其作用只是跳出该switch语句体,当break语句出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环。第30页第30页5.5.2continue语句1.continue语句普通形式continue语句作用是结束本次循环,即不再执行循环体中continue语句之后语句,而是跳转到循环开始处,进行下一次是否执行循环鉴定。它普通形式为:continue;2.关于continue语句几点阐明(1)continue语句只是结束循环结构中本次循环,并非跳出整个循环过程。详细说:对while和do~while语句,遇continue语句后,转向执行while之后圆括号内条件表示式判断;对for语句,遇continue语句后,转向执行表示式3。(2)执行continue语句并没有使整个循环终止。(3)continue语句与break语句有本质区别:continue语句只是结束本次循环,而不终止整个循环执行;而break语句作用则是强制终止整个循环过程。第31页
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Methyl-12-Z-15-Z-18-Z-heneicosatrienoate-生命科学试剂-MCE
- 初中八年级科学知识清单:生活中的透镜与视觉应用
- 初三物理《电路组成与连接方式》教学设计
- 八年级数学上册:全等三角形的性质深度应用与构造艺术(教案)
- 八年级物理上册第一章《机械运动》大单元复习教学设计
- 尺规寻理·作图成规-八年级数学“基本作图”大单元整体建构教案
- 八年级上册语文第13课《与朱元思书》核心素养教学设计
- 本科通识选修·领导力情境表达:基于AI教练与策展思维的非职权影响力展示教案
- 本科人力资源管理专业 人才测评技术前沿原理 教案
- 初中八年级生物(冀少版)上册第四单元第二章第一节非传染性疾病核心知识清单
- 2026年四川省机关事业单位考调、选调工作人员考试(综合应用能力测试)经典试题及答案
- 苏教版科学五年级下册期末检测卷6(原卷版)
- 2026春西师大版小学一年级下册数学期末综合练习卷含答案(三套)
- 2026年7月自考14000旅游目的地管理押题及答案
- 2026年上海市奉贤区初三语文三模试卷及答案
- 2026年国开电大法学本科《国际法》期末纸质考试试题及答案
- 四川省引大济岷水资源开发有限公司2026年第二批次公开招聘(68人)考试参考题库及答案解析
- 羽毛球馆灯光音响方案
- 2025年湖南省益阳市初二学业水平地理生物会考真题试卷+解析及答案
- 2026年山东滨州市初二地生会考考试真题及答案
- 2026《安全生产月》主题网络活动竞赛题库及答案
评论
0/150
提交评论