资源描述
,单击此处编辑母版标题样式,2019/1/24,#,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2024/11/14,1,循环的基本概念,不同形式的循环控制,多重循环问题,2023/9/151 循环的基本概念,2024/11/14,2,什么是循环?,为什么要使用循环?,?,5.1,循环的基本概念,循环是有规律的重复操作。,将复杂问题,分解,为简单的操作过程,程序只对简单过程描述,这些过程的多次,重复,就可完成对问题的求解。重复的频繁性决定了循环在程序设计中必不可少!,一、循环问题,问题1:,问题2:,求学生平均成绩,分数相加后除以课,程,数,做99次加法,问题3:,找出数,集,x,中能同时被3和7整除的数,找数,问题分解,循环控制,2023/9/152什么是循环?5.1 循环的基本概念循环,2024/11/14,3,5.1,循环的基本概念,while,循环(,5,.2节),do while,循环(,5,.3节),for,循环(,5,.4节),if-goto,循环,(,一般不用),难点:,循环嵌套,C,提供四种循环控制语句:,2023/9/1535.1 循环的基本概念 while循环(,2024/11/14,4,5.1,循环的基本概念(续),二、循环结构,循环结构有两种形式:,当型循环结构,直到型循环结构,循环体,N,条件,Y,当型循环,直到型循环,条件,N,Y,循环体,先判断后循环,先循环后判断,入口,出口,区别?,循环体中是一,个过程,该过,程的复杂程度,取决于问题及,对问题的分解,2023/9/1545.1循环的基本概念(续)二、循环结构循,2024/11/14,5,5.1,循环的基本概念(续),循环体,N,条件,Y,当型循环,条件 循环 次数,Y,循环体,?,Y,执行 1,Y,执行 3,Y,执行 2,N,结束,循环体,Y,?,循环体,Y,?,?,N,3次,在循环入口处判断,当条件为真时执行循环,2023/9/1555.1 循环的基本概念(续)循环体N条件,2024/11/14,6,5.1,循环的基本概念(完),直到型循环,在循环出口处判断,当条件为真时继续执行循环,直到条件为假时为止。,条件,N,Y,循环体,条件 循环 次数,执行 1,Y,执行 3,Y,执行 2,N,结束,3次,Y,条件,循环体,Y,条件,循环体,Y,条件,循环体,Y,执行 4,条件,循环体,N,4,次,循环至少执行一次,2023/9/1565.1循环的基本概念(完)直到型循环在循,2024/11/14,7,5,.,2 while,循环控制,语句一般格式,while,(,表达式,),语句组,一般为,关系,表达式或,逻辑,表达式,也可以是,C,语言其他类型的合法表达式,用来控制循环体是否被执行,称为,内嵌语句,,可以是基本语句、控制语句,也可以是复合语句,是循环重复执行的部分,当条件为真时执行循环体,2023/9/1575.2 while循环控制 语句一般格式,2024/11/14,8,语句一般格式,while,(,表达式,),语句组,功能:,计算,“,表达式,”,的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0 时结束循环,转去执行,while,后面的语句。,2023/9/158语句一般格式 功能:计算“表达式”的值,,2024/11/14,9,当表达式为真,语句,N-S,结构图,N,Y,流程图,表达式非0?,语句,循环控制条件,循环体,语句一般格式,while,(,表达式,),语句组,2023/9/159当表达式为真N-S结构图NY流程图表达式,2024/11/14,10,例如:,【例,5,.1,】编写程序,求,100,个自然数的和,即:,s=1+2+3+,+100,思路:寻找,加数,与,求和,的规律,加数,i,从1变到100,每循环一次,使,i,增1,直到,i,的值超过100。,i,的,初值,设为1,。,求和,设变量,sum,存放和,,循环求,sum=sum+i,,,直至,i,超过100。,2023/9/1510例如:【例5.1】编写程序,求100个,2024/11/14,11,算法和程序:,#,include,stdio.h,void main(),int i,sum;,i=1;sum=0;,while(,i=100,),sum=sum+i;,i+;,printf(sum=%dn,sum);,程序输出结果:,sum=5050,i,:,循环控制变量,sum,:,累加器,i=1,sum=0,当,i=100,sum=sum+i,i+,输出,sum,2023/9/1511算法和程序:#include st,2024/11/14,12,注意:,如果,while,的(表达式)值为0,则循环体一次也不执行,(例如当,i,的初值=101,),。,在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(,死循环,)。,在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。,思考程序段的输出?,i=1;sum=0;,while(i=100),i+;,sum=sum+i;,运行后,输出:,sum=5150,原因是什么?,2023/9/1512注意:如果while的(表达式),2024/11/14,13,注意(续):,总结:,为了保证循环正常运行,应该特别注意:,循环控制条件的描述,控制条件的初始状态(初始值),循环体内部对控制条件的影响,2023/9/1513注意(续):总结:为了保证循环正常运行,2024/11/14,14,5,.,3 do-while,语句,语句一般格式,do,语句组,while,(,表达式,);,功能:,先执行内嵌语句,(循环体),之后计算表达式的值,不为,0,(逻辑真)时,再执行循环体并判断条件,直到表达式的值为,0,结束循环,转去执行,while,下面的语句。,直到条件为假时结束循环,2023/9/15145.3 do-while语句语句一般格,2024/11/14,15,do-while,循环的算法,循环体,当表达式为真,N-S,结构图,N,Y,循环体,表达式非0?,流程图,#,include stdio.h,void main(),int i=1,sum=0;,do,sum=sum+i;,i+;,while(i=100);,printf(%dn,sum);,用,do-while,语句,求100个自然数的和,2023/9/1515 do-while循环的算法,2024/11/14,16,void main(),int n=1,s=0,x;,scanf(%d,printf(s=%dn,s);,求:,流程图,n=x,s=s+n,Y,n,加,1,开始,初始化,n,s,x,输入,x,do,s=s+n;,n+;,while(n=x);,do while,N,输出,s,结束,2023/9/1516 求:流程图n=xs=s+n,2024/11/14,17,/*,ex1-1.C*/,void main(),int s=0,x;,scanf(%d,while(x=10),s=s+x;,x+;,printf(s=%dn,s);,/*,ex1.C*/,void main(),int s=0,x;,scanf(%d,do,s=s+x;,x+;,while(x=10);,printf(s=%dn,s);,例,循环至少,执行一次,循环没有,被执行,三、,while,与,do while,的比较,输出,:s=12,输出,:s=0,如输入为,1,和,12,,两程序各输出情况,?,输入,12,时:,2023/9/1517/*ex1-1.C*/*ex1.C,2024/11/14,18,5,.,4 for,语句,语句一般格式,for(,表达式1;表达式2;表达式3),语句,循环初始条件,循环控制条件,循环体,1,.,求解表达式,1,;,2.,求解表达式,2,,,值为真,(,非0,),执行循环,体,然后,执行第,3,步,;,值为假,(,0,),则,结束,循环,,转到第,5,步,,3.,求解表达式,3,;,4,.,转回第,2,步,。,5.,循环结束,执行,for,语句下面的语句,。,2023/9/15185.4 for语句 语句一般格式循环初,2024/11/14,19,for(e1;e2;e3),语句的算法,N-S,结构图,for(e1;e2;e3),语句,N,Y,流程图,计算,e1,语句,e3,e2,为真?,例如:,void main(),int i,sum;,sum=0;,for(i=1;i=100;i+),sum=sum+i;,printf(sum=%dn,sum);,2023/9/1519for(e1;e2;e3)语句的算法,2024/11/14,20,for,循环控制语句,for(e1;e2;e3),e1、e2、e3,均可缺,少,for(;n100;n+),缺,少,e1,n,应在循环之前赋初值,for(n=0;n+),缺,少,e2,造成死循环,for(n=0;n100;),缺,少,e3,n,增量应在循环体内进行,for(;),缺,少,e1,e2,e3,,,死循环!,for(;n100;),缺,少,e1,e3,分号始终不能缺少,!,讨论,可结合跳转语句使用,一般情况下,不,使,用,2023/9/1520for循环控制语句 for(e1;e2,2024/11/14,21,for,循环控制语句,for(,初值,;,判断,;,增量,),语句;,for(,初值,;,判断,;,增量,),复合语句;,for(,初值,;,判断,;,增量,),;,2.,e1,和,e3,可是与初值、增量无关的逗号表达式,for(,s=0,n=1;,n=100;,s=s+n,printf(“%d”,s,),n+;,for(s=0;n100;,s=s+n,n+),printf(“%d”,s);,求累加和,n,的初值在,for,之前,完成,增量在,for,之外完成,for,语句的形式:,2023/9/1521for循环控制语句for(初值;判断;,2024/11/14,22,for,循环控制语句,void main(),int n=1,s=0,x;,scanf(%d,for(;n=x;n+),s=s+n;,printf(s=%dn,s);,while(n=x),s=s+n;,n+;,void main(),int n,s,x;,scanf(%d,for(n=1,s=0;n=x;n+),s=s+n;,printf(s=%dn,s);,例,缺少,e,1,赋初值,语句,2023/9/1522for循环控制语句while(n=x,2024/11/14,23,for,循环控制语句,void main(),int n,s;,for(n=1;n=10;n+=2),printf(n=%dn,n);,void main(),int n,s;,for(n=1;n=10;n+=2);,printf(n=%dn,n);,以下,程序的输出结果,输出结果:,n=11,输出结果:,n=1,n=3,n=5,n=7,n=9,?,无循环体,循环体,;,2023/9/1523for循环控制语句以下程序的输出结果输,2024/11/14,24,5,.,5,循环结构中的跳转语句,有如下三种语句实现跳转:,continue,语句,break,语句,goto,语句,功能:,在循环语句的循环体中使用,可以进行循环的流程控制,2023/9/15245.5 循环结构中的跳转语句有如下三种,2024/11/14,25,后续语句,continue;,Y,N,表达式?,后续语句,continue;,表达式?,Y,N,5,.,5.1 continue,语句及应用,功能:,中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。,while,语句,do-while,语句,后续语句,计算表达式3,计算表达式1,continue;,表达式2?,Y,N,for,语句,20
展开阅读全文