1、 c c语言语言For For 循环程序设计循环程序设计15.11.FOR循环的引入2.FOR循环语句的形式3.表达式缺省的FOR循环语句4.含有逗号运算符的FOR循环语句5.关于FOR循环的几点补充说明5.FOR循环语句的嵌套一、FOR循环的引入1、复习前两节课我们学习的循环语句whiledo语句的基本格式和执行过程和特征。main()int x=1;(表达式)s=0;while(x=100)(表达式2)s=s+x;x=x+1;(表达式3)printf(“%d”,s);分析用while语句来完成的程序,主要完成1到100的累加和,对一个循环程序来说最关键的三个部分:循环变量的赋初值、控制循环
2、条件、循环控制变量的更新。二二 for循环语句形式循环语句形式:C语语言言中中的的for循循环环语语句句比比较较复复杂杂些些,也也比比较较灵灵活活,功功能能较较强强.虽虽然然主主要要用用于于定定数数循循环环,但但也也可可以以用用于于不不定定数数循循环环,它它完完全可以替代全可以替代while循环循环.for 循环循环语句的一般形式:语句的一般形式:for(表达式表达式1;表达式表达式2 ;表达式表达式3)循环循环体体 4 for(表达式表达式1;表达式表达式2 ;表达式表达式3)循环循环体体 表达式表达式2求解表达式求解表达式1 内嵌语句内嵌语句真真假假for语句后下语句后下一条语句一条语句求
3、介表达式求介表达式3设置循环设置循环变量初值变量初值判断表达式判断表达式循环变循环变量增值量增值5例例:求求100之内各数之和之内各数之和:#include int main()int i,sum=0;for(i=1;i=100;i+)sum+=i ;printf(“1+2+100=%d”,sum);return 0;i=100?i=1 sum+=i真真假假for语句后下语句后下一条语句一条语句i+ch5_5_1.c 单条语句时单条语句时,大括号可以不要大括号可以不要.6例:把例:把100200之间的不能被之间的不能被3整除的数输出。整除的数输出。main()int n;for(n=100;n
4、=200;n+)if(n%3=0)continue;/*能被能被3整除的数整除的数,不打印不打印*/printf(“%5d”,n);当然函数体也可改成:当然函数体也可改成:if(n%3!=0)printf(“%d”,n);使用使用Continue仅是为了说明其的语法作用仅是为了说明其的语法作用。7三、说明三、说明:表达式缺省的表达式缺省的for()语句语句:for()语语句句中中的的三三个个表表达达式式可可以以省省略略其其中中一一个个,二二个个,甚甚至三个。至三个。但无论省略几个,其中的二个分号不能省。但无论省略几个,其中的二个分号不能省。如果在如果在for语句之前,给循环变量已赋值,表达语句
5、之前,给循环变量已赋值,表达式式1可省去。分号不能省。如:可省去。分号不能省。如:sum=0;i=1;for(;i=100;i+)sum=sum+i ;表达式表达式1可省去。可省去。82.如果表达式如果表达式2省略,省略,C编译程序认为其值恒为真编译程序认为其值恒为真,无限循环下去。如无限循环下去。如:for(i=1;i+)sum=sum+i ;1.表达式表达式3也可省去:也可省去:如:如:for(i=1;i 10000)break;这种无限循环可用这种无限循环可用break 语句来终止循环语句来终止循环,避免产生死循环避免产生死循环.3.甚至三个表达式都可省略:甚至三个表达式都可省略:for
6、(;)语句语句;10补充补充:逗号运算符逗号运算符(顺序运算符顺序运算符):级级别别最最低低的的一一种种。用用它它将将二二个个表表达达式式联联起起来来,形形成成逗逗号号表达式。表达式。如:如:表达式表达式1,表达式,表达式2 例:例:a=3*5,a*4 先求解先求解3*5,得得a的值为的值为15,然后求解第二表达式,然后求解第二表达式a*4,得得60。求解过程是:求解过程是:先求解表达式先求解表达式1,再求解表达,再求解表达式式2。整个逗号表达式的值用表。整个逗号表达式的值用表达式达式2的值代表。的值代表。逗号表达式逗号表达式11一般形式还可扩展:一般形式还可扩展:表达式表达式1,表达式,表达
7、式2,表达式表达式n 整个表达式的值用表达式整个表达式的值用表达式n的值代表。的值代表。注注:a.在很多情况下,使用逗号表达式的目的只是想得在很多情况下,使用逗号表达式的目的只是想得 到到(计算计算)各个表达式的值各个表达式的值,并非一定要得到或使用整个并非一定要得到或使用整个 表达式的值。表达式的值。b.并不是任何出现逗号的地方都是逗号运算符并不是任何出现逗号的地方都是逗号运算符.如如:printf(“%d,%d,%d”,a,b,c);其中的这些其中的这些逗号就不是。逗号就不是。12四含逗号运算符的四含逗号运算符的for语句语句 for语句中语句中 ,表达式表达式1、表达式、表达式3可以使用
8、逗号运算符:可以使用逗号运算符:如如:for(i=1,j=20;i j;i+,j-)用两个或两个以上的变量用两个或两个以上的变量共同实现对循环的控制。共同实现对循环的控制。13例例 输入不多于输入不多于10个实数个实数,求这些数的和及其中求这些数的和及其中 正数之和正数之和.(若不足若不足10个数个数,以以0 为结束标志为结束标志)#include#include int main()float sum,psum,x;int i=1;.14 for(sum=psum=0.0,i=0 ;i10;i+)scanf(%f,&x);if(fabs(x)1e-4)break;sum+=x;/求这些数的总
9、和求这些数的总和 if(x0)continue;psum+=x;/其中正数之和其中正数之和 printf(sum=%fn,sum);printf(psum=%fn,psum);return 0;若输入为若输入为0,结束结束.输入小于输入小于0 不累加不累加.注注意意这这个个表表达达式式ch5_5_4.c15五、对于五、对于for语句的进一步说明语句的进一步说明:(1).表达式表达式1可以是设置变量初值的赋值表达式可以是设置变量初值的赋值表达式,也可是也可是与与 循环变量循环变量 无关的其它表达式无关的其它表达式.如如:for(sum=0;i100;i+)sum=sum+i;(2).表达式表达式
10、2一般是关系表达式或逻辑表达式一般是关系表达式或逻辑表达式,但也可以但也可以是是 其它类型表达式其它类型表达式,只要其值为非零只要其值为非零,就执行循环体就执行循环体.如如:for(i=0;(c=getchar()!=n;i+=c);不断输入字符不断输入字符,将将ASCII码累加码累加,直到输入一个换行符直到输入一个换行符.16(3).f or循环的条件检查总是在循环开始前进行的循环的条件检查总是在循环开始前进行的,如果如果 一开始条件为假一开始条件为假(为零为零),则循环一次也不执行则循环一次也不执行.void main()int x,y=10;for(x=10;x10;-y)printf(
11、“%d”,y);printf(“%d”,x);一开始条件就为假一开始条件就为假!17(4).当当for语句的循环体是空语句时语句的循环体是空语句时,则成为空循环体的则成为空循环体的for 语句语句,利用它可以实现某些特殊功能利用它可以实现某些特殊功能,比如产生时间延比如产生时间延迟迟 等等.如下例如下例:for(t=0;tvalue;t+);空循环体空循环体18六、六、循环嵌套循环嵌套:for 语句一般用于具有明确循环次数的情况语句一般用于具有明确循环次数的情况,如果如果 事先不知道准确的循环次数事先不知道准确的循环次数,只知道循环条件只知道循环条件,一般用一般用 while 或或 do wh
12、ile 语句语句.循环是可以嵌套的循环是可以嵌套的,循环嵌套是指一个循环体内又可包循环嵌套是指一个循环体内又可包含另一个完整的循环称为含另一个完整的循环称为 循环嵌套。循环嵌套。里面的循环又可嵌套另一个循环,叫多层循环的嵌套。里面的循环又可嵌套另一个循环,叫多层循环的嵌套。19 已知的三种循环:已知的三种循环:while(),do-while(),for()可以相互嵌套。可以相互嵌套。如如:while()for()do while()while();注注:但循环嵌但循环嵌套不允许交叉套不允许交叉20例例:问程序输出的结果问程序输出的结果?main()int i=1,a=0;for(;i=5;i+)do i+;a+;while(i3);i+;printf(“a=%d,i=%dn”,a,i);输出:a=3,i=821 第第 5 5 章章 For For 循环程序设计循环程序设计结束结束22