C语言 第5章 循环结构

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章循环结构程序设计2引例:编程计算1*2*3*4*5•可以这样实现:intproduct;product=1*2*3*4*5;•如果问题变为:求1*2*3*…*10000?•该问题无法用一个赋值语句实现!3主要内容学习三种结构的程序设计方法顺序结构程序设计选择结构程序设计循环结构程序设计掌握每一种语句的格式、功能、执行过程和执行结果,并学习如何将这些语句组织成程序学习逻辑问题的解题思路,及递推、迭代的方法循环结构程序设计1.循环的概念2.用while语句和do-while语句实现循环3.用for语句实现循环4.循环的嵌套5.break语句和continue语句6.几种循环的比较7.程序举例5一、循环概述6在很多实际问题中会遇到有规律性的重复运算,因此在程序中就需要将某些语句重复执行。一组被重复执行的语句称为循环体;每重复一次,都必须作出是继续还是停止循环的决定,这个决定所依据的条件称为循环条件;循环:在给定条件成立时,反复执行某程序段,直到条件不成立为止。7循环结构入口noPAyes出口循环条件循环体8循环结构需要解决的两个问题2.控制循环结构的结构描述条件表示描述方法逻辑表达式关系表达式1.控制循环结构执行的条件表示while语句do-while语句实现循环结构的语句可使用c中的任意表达式for语句91、while语句:while(表达式)语句;1.计算表达式的值;2.当表达式的值为非0时,反复执行while中的语句;3.当表达式的值为0时,while循环结束。功能:while语句用来实现“当型”循环。执行流程:10while语句执行流程:0非0表达式=?循环体外语句循环体语句循环入口循环结束!开始下一次循环特点:先判断,后执行;若条件不成立,则有可能一次也不执行。适合的情况:知道控制循环的条件为某个逻辑表达式的值,而且在循环中该表达式的值会被改变。11例1.编程计算1+2+3+…+10000方案一、sum=sum+i;i=i+1;12方案二、13方案三、142、do-while语句:do{语句;}while(表达式);1.执行语句;2.计算表达式的值;3.当表达式的值为非0时,再次执行do中的语句;4.当表达式的值为0时,do-while循环结束。执行流程:15真(非0)表达式=?语句循环体外语句0do-while语句执行流程:循环结束!开始下一次循环特点:先执行,后判断;循环至少执行一次语句。16例2.用do-while语句实现1+2+3+…+1000017例2.用do-while语句实现1+2+3+…+1000018例2.用do-while语句实现1+2+3+…+10000改成while语句注意两个语句的顺序!19例3.求满足1+2+3+…+n500中最大的N,并求其和,编写程序实现。分析本题还是一个累加求和的问题,当累加和sum500时反复执行循环,否则结束循环步骤定义变量:sum,n;sum和n分别赋初值;n=0;sum=0;当sum500时反复执行循环,否则结束循环。语句为:While(sum500){++n;sum+=n;}20有错误的地方吗吗??2122思考:给定一个小于等于216的正整数,要求:求出它是几位数;分别正向打印出每一位数字;逆序打印出各位数字;23•分析:•变量:正整数m—小于等于216的正整数;•输入:正整数m的值;•输出:几位数、正向输出各位数字、逆向输出各位数字;•解决问题:•变量定义:•m为无符号长整型;•num:位数;•a:某一位数字;•求解过程:while(m!=0){……}24求解方法:(1)求出它是几位数;a)用num描述正整数m的位数,初值为0b)当m0时,开始统计m的位数while(m0)因为m0,m至少有一位,num++;然后把m的个位去除;m=m/10;再判断m是否仍然0;当循环结束时,即:m等于0;结果:num的值即为m的位数;252627求解方法:(2)分别正向打印出每一位数字;a)首先应求出m的位数num;b)然后从最高位开始输出;c)最高位为:m/10num-1;d)除了最高位以外,其他的部分为:m%10num-1;e)循环直到最后一位输出结束。28求解方法:(3)逆序打印出各位数字;a)从最低位开始输出;b)最低位为:m/10;c)除去最低位,其它的部分为:m%10;d)循环,直到最高位输出结束。30(1):求位数(2):从高位到低位求每一位。(3):从低位到高位求每一位。3132(2):从高位到低位求每一位。33(3):从低位到高位求每一位。循环结构程序设计1.循环的概念2.用while语句和do-while语句实现循环3.用for语句实现循环4.循环的嵌套5.break语句和continue语句6.几种循环的比较7.程序举例353、for语句:for(表达式1;表达式2;表达式3)语句;表达式1:一般为赋值表达式,给控制变量赋初值;表达式2:关系表达式或逻辑表达式,循环控制条件;表达式3:一般为赋值表达式,给控制变量增量/减量;语句:循环体,当有多条语句时,必须使用复合语句。360真(非0)表达式2=?语句;循环体外语句表达式1;for(表达式1;表达式2;表达式3)语句;表达式3;循环结束!开始下一次循环373、for语句:for语句很好地体现了正确表达循环结构应该注意的三个问题:1.循环控制变量的初始化2.循环的条件3.循环控制变量的更新for语句适合的情况——已知循环次数38例6.用for语句计算1+2+...+100i=1i=100sum+=ii++假真for(i=1;i=100;i++)sum+=i;39例6.用for语句计算1+2+...+10040例6.用for语句计算1+2+...+100inti=0,sum=0;while(i=10){sum+=i;i++;}inti=0,sum=0;do{i++;sum+=i;}while(i10);改写成while和do-while语句。41for语句的三个表达式都是可以省略的,但分号“;”绝对不能省略。for语句有以下几种格式:(1)for(;;)语句;(2)for(;表达式2;表达式3)语句;(3)for(表达式1;表达式2;)语句;(4)for(i=1,j=n;ij;i++,j--)语句;421、for(;;)该语句是一个死循环,一般用条件表达式加break语句在循环体内适当位置,一旦条件满足时,用break语句跳出for循环。2、for(;表达式2;表达式3)使用条件是:循环控制变量的初值不是已知常量,而是在前面通过计算得到。例如:i=m-n;⋯⋯for(;ik;i++)语句;433、for(表达式1;表达式2;)语句一般当循环控制变量非规则变化,而且循环体中有更新控制变量的语句时使用。例如:for(i=1;i=100;){⋯⋯i=i*2+1;⋯⋯}444、for(i=1,j=n;ij;i++,j--)语句;在for语句中,表达式1、表达式3都可以有一项或多项,如本例中,表达式1同时为i和j赋初值,表达式3同时改变i和j的值。当有不止一项时,各项之间用逗号“,”分隔。45循环结构小结同一个问题,往往既可以用while语句解决,也可以用do-while或者for语句来解决,但在实际应用中,应根据具体情况来选用不同的循环语句。选用的一般原则是:1、如果循环次数在执行循环体之前就已确定,一般用for语句。如果循环次数是由循环体的执行情况确定的,一般用while语句或者do-while语句;2、当循环体至少执行一次时,用do-while语句,反之,如果循环体可能一次也不执行,则选用while语句。循环结构程序设计循环的概念用while语句和do-while语句实现循环用for语句实现循环循环的嵌套break语句和continue语句几种循环的比较程序举例47循环的嵌套一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多重循环。循环1循环248for(){…while(){…}…}Do{…for(){…}…}while()while(){…for(){…}…}for(){…for(){…}}以下四种均为合法的嵌套循环结构49注意:三种循环语句for、while、do-while可以互相嵌套自由组合。但要注意的是,各循环必须完整,相互之间绝不允许交叉。如下面这种形式是不允许的:do{......for(;;){......}while();}5098765432198765432181726354453627189645648403224168494235282114736302418126252015105161284963421例7.打印乘法“九九表”51分析:1.定义变量i,j,m;2.i表示行,从1变化到9;3.j表示列,从1变化到9;4.m=i*j;表示表中的值;5.i取初值1;6.j从1变化到i;计算出每一个m=i*j,输出m,但不换行。7.输出换行;8.i做一次变化,如果i≤9,则,转回步骤6;否则循环结束。52循环结构程序设计循环的概念用while语句和do-while语句实现循环用for语句实现循环循环的嵌套break语句和continue语句几种循环的比较程序举例55break语句:用于循环语句和switch语句中,作用是跳出它所在的循环语句或switch语句。格式:while(条件1){…;if(条件2)break;……}执行过程:•每次执行到if语句时,计算条件2的值;•如果条件2的值非零,则跳出循环语句;•否则,执行if语句的下一条语句。56例7.一球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高?floath=100.0,sum=0.0;intn;for(n=1;;n++){sum+=h;h=h/2;//落地后反弹跳回原高度的一半if(n==10)break;//终止执行本循环sum+=h;}printf(“共经过%f米,第10次反弹%f米\n,sum,h);57Continue语句:continue语句类似于break语句,但不是退出循环,而是跳过循环体下部未执行的语句,回到循环头部(while处)接着进行下一次循环。格式:while(条件1){...;if(条件2)continue;...}Continue执行过程:•当条件1成立时,进入while的循环体;•执行到if语句时,计算条件2的值;•如果条件2满足,执行continue语句,结果为:执行转到while处开始下一次循环;否则,执行if的下一条语句。58continue语句:continue语句的作用是结束本次循环,直接进行下一轮循环的判断。循环中continue语句执行流程假表达式2表达式1语句序列语句序列真真continue假该语句只能用在for、while、do-while语句中,常与if语句配合,起到加速循环的作用。59例8.打印出100-200之间所有能被7整除的整数。6061例9.break和continue62例9.break和continue63

1 / 62
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功