您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言程序设计_循环结构基础
第六讲循环结构程序设计主讲:谢华成本节主要内容1while语句2do-while语句3for语句4几种循环的比较5循环嵌套6break语句7continue语句1、掌握三种循环语句的语法结构2、灵活运用循环语句教学重点和难点:重点:三种循环语句while、do-while、for语句难点:三种循环语句的循环过程教学目的:引言循环结构是结构化程序设计的基本结构之一;循环结构程序设计要考虑两方面的问题:1.循环条件:决定循环体执行的次数,(或退出循环条件)常用关系表达式和逻辑表达式表示。2.循环体:需要重复执行的工作。例:求1~100的累计和?复习:首先设置一个累计器sum,其中的初值为0,然后依次把sum加1,2,3,…,100。具体算法:(1)将n的初值置为1;(2)每执行一次“sum=sum+n”后,n增1;(3)当n增到101时,停止计算。此时,sum的值就是1~100的累计和。sum=0n=1sum=sum+nn=n+1n=100输出sum否是经常使用的这种重复计算结构称为循环结构。在C语言中,可用以下语句实现循环:(1)用while语句(2)用do-while语句(3)用for语句一般形式:while(表达式)循环体语句;执行流程:表达式成立循环体语句假(0)真(非0)while[功能]:先判断表达式,当表达式为真时,执行循环体语句,再判断表达式;当表达式为假时,执行循环语句的后续语句;一、while语句【例】用while循环求#includestdio.hmain(){intsum=0,n=1;while(n=100){sum=sum+n;n++;}printf(%d\n,sum);}循环初值循环终值循环变量增值循环条件循环体/*n存放项,初值为1*//*当n=100,累加*//*n的值改变为下一个自然数,改变后接下去判断循环条件是否满足*/1001nn一、while语句特点:先判断(表达式)后执行(循环体)说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环表达式不成立循环体内遇break,return,goto无限循环:while(1)循环体;While语句特点和说明一、while语句一般形式:do循环体语句;while(表达式);执行流程:do循环体语句表达式成立假(0)真(非0)while[功能]:先执行一次循环体语句,再判断表达式的值。当表达式的值为真时,返回重新执行循环体语句。当表达式的值为假,退出循环。二、do-while语句[例]:用do-while语句构成循环,求解1~100累计和的程序如下:n=1sum=0n=100sum=sum+nn=n+1输出sum二、do-while语句#includestdio.hmain(){}intn=1,sum=0;do{sum=sum+n;n++;}while(n=100);printf(%d,sum);特点:先执行循环体(至少执行一次循环体),然后判断循环条件是否成立。说明:1)循环体可以用复合语句;2)循环控制变量在执行do前必须赋初值;3)循环体内应有改变循环控制变量的语句;4)do~while可转化成while结构表达式成立循环体语句假(0)真(非0)循环体While循环do~while语句特点和说明二、do-while语句一般形式:for(表达式1;表达式2;表达式3)循环体语句;执行流程:表达式2循环体语句假(0)真(非0)for表达式1表达式3功能:(1)求解“表达式1”,循环控制变量得到初值。(2)求解“表达式2“,若其值为真,则执行for语句中指定的内嵌语句。然后执行下面第(3)步。若其值为假,退出循环,执行for循环的下一条语句。(3)求解“表达式3”,改变循环条件,回第(2)步继续执行。三、for语句【例如】for(k=10;k20;k++)printf(″k=%d\n″,k);表达式1为k=10,表达式2为k20,表达式3为k++。①计算表达式1,k得到初值10②计算表达式2,k20为真,执行第一次循环,输出:k=10③计算表达式3,k的值变为11④计算表达式2,k20为真,执行第二次循环,输出:k=11⑤计算表达式3,k的值变为12⑥计算表达式2,k20为真,执行第三次循环,输出:k=12……最后:①k的值变为19,执行第20次循环,输出:k=19②计算表达式3,k的值变为20③计算表达式2,k20为假,终止整个循环的执行,退出循环。三、for语句for(循环变量赋初值;循环条件;循环变量增值){循环体语句;}说明:显然for循环更简洁,更灵活;循环体可以是复合语句;for语句中表达式1,表达式2,表达式3类型任意,都可省略,但分号;不可省for语句中三个表达式可省,无限循环:for(;;)for语句中的三个表达式均可以是逗号表达式,故可同时对多个变量赋初值及修改。如:for(i=0,j=1;jn&∈i++,j++)…for语句可以转换成while结构exp1;while(exp2){循环体语句;exp3;}for语句一般应用形式三、for语句#includestdio.hmain(){}【例】用for循环求1001nnintn,s;for(s=0,n=1;n=100;n++)s=s+n;printf(1+2+3+…+100=%d\n,s);四、几种循环的比较从while、do-while和for语句引出三种循环语句的区别:(1)在一定条件下,可以相互代替使用。凡是用while语句完成的功能,用for语够句也可以实现:while(表达式)==for(;表达式;)语句;语句;(2)while和do-while循环,只在while后面指定循环条件,在循环体中应包含使循环趋向于结束的语句。(3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在“表达式1”中实现循环变量的初始化。(4)while,do-while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环。1、一个循环体内又包含另一个完整的循环结构,称为循环嵌套。2、内嵌的循环中还可以嵌套循环,这就是多层循环。有许多问题需要用两层甚至多层循环才能解决。3、三种循环可互相嵌套,层数不限4、外层循环可包含两个以上内循环,但不能相互交叉5、嵌套循环的执行流程(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;;){……do{……}while();……while(){……}…...}内循环外循环内循环五、循环嵌套五、循环嵌套【例】编程实现九九乘法表#includestdio.hmain(){}inti,j;for(i=1;i=9;i++)/*i作为外循环控制变量,控制被乘数变化*/{}printf(\n);for(j=1;j=i;j++)/*j作为内循环控制变量,控制乘数变化*/printf(%1d*%1d=%2d,i,j,i*j);六、break语句break语句[格式]:break;[功能]:用break语句可以跳出switch语句,继续执行switch语句下面的一个语句。而且break语句还可以用来跳出循环体,即提前结束循环,接着执行循环下面的语句。[说明]:-break只能终止并跳出最近一层的结构;–break不能用于循环语句和switch语句之外的任何其他语句中。六、break语句(图解1)exp……break;……假(0)真(非0)whiledo……break;…...exp假(0)真(非0)whileexp2……break;…...假(0)真(非0)forexp1exp3switchexp语句组1break;语句组2break;语句组nbreak;语句组break;…...const1const2constndefaultcase六、break语句(图解2)六、break语句break语句【例】:for(r=1;r=10;r++){}area=pi*r*r;if(area100)break;printf(%f\n”,area);【功能】:计算r=1到r=10的圆面积,直到area100为止。当area100时,执行break语句,提前结束循环,即不再执行其他几次循环。七、continue语句[格式]:continue;[功能]:结束本次循环,即跳过循环体中continue语句后面尚未执行的语句,接着进行下一次是否执行循环的判断。exp……continue;……假(0)真(非0)while真(非0)do……continue;…...exp假(0)whileexp2……continue;…...假(0)真(非0)forexp1exp3七、continue语句[例1]:输出100~200之间不能被3整除的数。#includestdio.hmain(){intn;for(n=100;n=200;n++){if(n%3==0)continue;printf(“%4d”,n);}}[功能]:当n能被3整除时,执行continue语句,结束本次循环,即跳过printf函数语句。只有当n不能被3整除时才执行printf函数。循环体也可以改用该语句处理:if(n%3!==0)printf(“%d”,n);【例2】求10个正整数之和。#includestdio.hmain(){}七、continue语句inti,n,s=0;for(i=1;i=10;i++){scanf(%d,&n);if(n0)continue;s=s+n;}printf(10个正整数之和=%4d\n,s);该程序得到的是前10个数中所有正整数之和#includestdio.hmain(){inti=1,n,s=0;while(i=10){scanf(%d,&n);if(n0)continue;s+=n;i++;}printf(10个正整数之和=%4d\n,s);}该程序得到的是10个正整数之和七、continue语句【例3】求前10个自然数中所有偶数的和。#includestdio.hmain(){ints=0,i;for(i=1;i=10;i++){if(i%2!=0)continue;s=s+i;}printf(s=%d\n,s);}循环体也可以改用该语句处理:if(n%2==0)s=s+i;课堂小结1、三种循环的区别和灵活使用;2、break语句和continue语句的应用规则;3、注意循环嵌套的层次。
本文标题:C语言程序设计_循环结构基础
链接地址:https://www.777doc.com/doc-3156719 .html