您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > 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,并求其和,编写程序实现。分析本题还是一个累加求和的问题,当累加和sum500时反复执行循环,否则结束循环步骤定义变量: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--)语句;421、for(;;)该语句是一个死循环,一般用条件表达式加break语句在循环体内适当位置,一旦条件满足时,用break语句跳出for循环。2、for(;表达式2;表达式3)使用条件是:循环控制变量的初值不是已知常量,而是在前面通过计算得到。例如:i=m-n;⋯⋯for(;ik;i++)语句;433、for(表达式1;表达式2;)语句一般当循环控制变量非规则变化,而且循环体中有更新控制变量的语句时使用。例如:for(i=1;i=100;){⋯⋯i=i*2+1;⋯⋯}444、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
本文标题:C语言 第5章 循环结构
链接地址:https://www.777doc.com/doc-7028747 .html