[电脑基础知识]C语言5章循环控制
第5章 C语言 循环控制6

for语句中表达式省略的形式:
3. 省略表达式3
循环不能正常结束。
sum=0; for(i=1;i<=100;) { sum=sum+i; i++; }
sum=0; for(i=1;i<=100;) sum=sum+i;
for语句中表达式省略的形式:
4. 省略表达式1和表达式3
完全等同于while语句。
【例5.14】求Fibonacci数列前40个数。
1 5 34 233 1597 10946 75025 514229 3524578 24157817
1 8 55 377 2584 17711 121393 832040 5702887 39088169
2 13 89 610 4181 28657 196418 1346269 9227465 63245986
如:i++;
while语句多用在循环次数预先难以确定的循 环中。
【例5.3 】输入并输出一个字符串,遇“#”结 束
main() { char c; c = getchar(); while ( c!='#' ) { putchar(c); c=getchar(); } }
5.4 用do-while语句实现循环
第5章 循环控制
5.给定的条件成立时反复执行某一程序段。
特点:
有限次的重复某个操作。
5.1 概述
问题:
输出整数1~10
输出整数1~100 输出整数1~n
printf("%d\n", 1); printf("%d\n", 2); …… printf("%d\n", 10); i=1; printf("%d\n", i); i++; printf("%d\n", i); i++; …… printf("%d\n", i); i++;
c-5循环控制

判断水仙花数:
不妨做些改变……
• 每次判断需要重复输入,若要求输出 100~999之间全部的水仙花数,该如何操 作?
输出100~999之间的水仙花数
• 用自然语言描述
– 从100开始判断,100是否为水仙花数,若是, 则输出; – 继续判断101,重复上面的判断操作… – …… – 判断999,是否为水仙花数并输出。
#include “stdio.h” int main( )
)。
答案: (A)
{
int n = 1 ; while ( n == 1 ) return 0; } (A) n = 0 (B) while构成无限循环 n --; printf(“n = %d\n”, n) ;
(C) n = 1
(D) n = -1
例:编程计算1×2×3×…×n ,n=10
#include <stdio.h>
用if+goto 构成的循环 { 用while语句 构成的循环 long int prod = 1 ; int n = 1 ; 将内嵌语句用大 Loop : 括号括起来形成 while ( n 10 <=)10 ) 复合语句。 if ( n <= 这后面没有分号。
输出100~999之间的水仙花数
开始 n=100
重复执行了900次!!
判断水仙花数 并给出相应输出 变化n 是
n在100~999之间
结束
三种基本结构
顺序结构 选择结构 循环结构
A B
Yes
A
?
No
B
A
?
No
Yes
循环概述
பைடு நூலகம்重复执行某部分代码,就构成循环结构。 有限循环:在某个条件满足时重复执行,不满足时结束 无限循环:无条件的重复执行或循环结束条件永远不满足 循环结构的组成要素: 循环初始化部分 循环变量或循环计数器 循环继续条件(循环终止条件)
C语言之循环控制

do
循环体语句
循环体
while(<条件>);
条件p
假
功能:先执行循环体然后判断条件 是否满足,如果条件成立则继续执
真
行循环体中的语句,再判断条件。
依次反复,直到条件不再满足为止。
后续语句
二、说明:
1)循环体至少执行一次。 2)while(表达式)后的分号不可少,表明整个语句 结构的结束。
3)while与do——while的区别
43—RED4
红4
3
MAGENTA
5
紫5
2
BROWN 1—BLU6E
LIGHTGRAY
7
5—M棕A67GENT10A 浅灰
题解: 例#i题nc:lu画d出e 八“c个o不ni同o.大h”小的窗口,分别用互补的颜色显示前景 色#i和nc背lu景d色e 。“s(tdcihop.h5”\color.c) void main() { int x1,y1,x2,y2,bc,i ;
i++; }
i=1;01; s=0;
do {s=s+i;
i++;} while(i<=100);
s的值为0
s的值为101
练习:1)lt5_1.c main() {int x=3; do
printf(“%3d”,x-=2); while(!(--x)); } 程序输出结果为: 1 -2
作业1):编程完成一个猜数的小游戏:由系统随机产生一 100以内的整数。由用户来猜该数,如果没有猜对则由系统 给出相应的或大或小的提示,直到猜对为止。
练习:输出100以内所有能被3整数的数 输出100以内的所有数
main() {int i=1; while(i<=100)
c语言循环控制语句

c语⾔循环控制语句循环控制结构(⼜称重复结构)是程序中的另⼀个基本结构.在实际问题中,常常需要进⾏⼤量的重复处理,循环结构可以使我们只写很少的语句,⽽让计算机反复执⾏,从⽽完成⼤量类同的计算.C语⾔提供了while语句、do...while语句和for语句实现循环结构.3.4.1while语句while语句是当型循环控制语句,⼀般形式为:while<表达式>语句;语句部分称为循环体,当需要执⾏多条语句时,应使⽤复合语句.while语句的流程图见图3-8,其特点是先判断,后执⾏,若条件不成⽴,有可能⼀次也不执⾏.[例3-11]求n!分析:n!=n*(n-1)*(n-2)*..2*1,0!=1.即S0=1,Sn=Sn-1*n.可以从S0开始,依次求出S1、S2、...Sn.统⼀令S等于阶乘值,S的初值为0!=1;变量i为计数器,i从1变到n,每⼀步令S=S*i,则最终S中的值就是n!.流程图见图3-9,程序如下:考察图3-9中循环部分的流程图可以看出,在循环前各变量应有合适的值(s=1),另外,控制循环结束的变量(此处为i)必须在循环体中被改变,否则,循环将⽆限进⾏下去,成为死循环.本题中,将多项式的每⼀项⽤t表⽰,s代表符号,在每⼀次循环中,只要改变s、n的值,就可求出每⼀项t.⼀般情况下,while型循环最适合于这种情况:知道控制循环的条件为某个逻辑表达式的值,⽽且该表达式的值会在循环中被改变,如同例3-12的情况⼀样.3.4.2do...while语句在C语句中,直到型循环的语句是do...while,它的⼀般形式为:do语句while<表达式>其中语句通常为复合语句,称为循环体.do...while语句的流程图见图3-10,其基本特点是:先执⾏后判断,因此,循环体⾄少被执⾏⼀次.但需要注意的是,do...while与标准的直到型循环有⼀个极为重要的区别,直到型循环是当条件为真时结束循环,⽽do...while 语句恰恰相反,当条件为真时循环,⼀旦条件为假,⽴即结束循环,请注意do...while语句的这⼀特点.例[3-13]计算sin(x)=x-x3/3!+x5/5!-x7/7!+...直到最后⼀项的绝对值⼩于1e-7时为⽌.分析:这道题使⽤递推⽅法来做.让多项式的每⼀项与⼀个变量n对应,n的值依次为1,3,5,7,...,从多项式的前⼀项算后⼀项,只需将前⼀项乘⼀个因⼦:(-x2)/((n-1)*n)⽤s表⽰多项式的值,⽤t表⽰每⼀项的值,程序如下:#include# includem a i n ( ){double s,t,x ;int n ;printf("please input x :");scanf("%lf",&x);t=x;n=1;s=x;do{n=n+2;t=t*(-x*x)/((float)(n)-1)/(float)(n);s=s+t;}while(fabs(t)>=1e-7);printf("sin(%f)=%lf,"x,s);}运⾏结果如下:RUN?pleaseinputx:1.5753?sin(1.575300)=0.999990RUN?pleaseinputx:-0.65?sin(-0.650000)=-0.6051863.4.3for语句for语句是循环控制结构中使⽤最⼴泛的⼀种循环控制语句,特别适合已知循环次数的情况.它的⼀般形式为:for(<表达式1>;<表达式2>;<表达式3>)语句for语句很好地体现了正确表达循环结构应注意的三个问题:1)控制变量的初始化.2)循环的条件.3)循环控制变量的更新.表达式1:⼀般为赋值表达式,给控制变量赋初值;表达式2:关系表达式或逻辑表达式,循环控制条件;表达式3:⼀般为赋值表达式,给控制变量增量或减量.语句:循环体,当有多条语句时,必须使⽤复合语句.for循环的流程图如图3-11,其执⾏过程如下:⾸先计算表达式1,然后计算表达式2,若表达式2为真,则执⾏循环体;否则,退出for 循环,执⾏for循环后的语句.如果执⾏了循环体,则循环体每执⾏⼀次,都计算表达式3,然后重新计算表达式2,依此循环,直⾄表达式2的值为假,退出循环.[例3-14]计算⾃然数1到n的平⽅和.# include# includemain ( ){int i;float s;printf("please input n :");scanf("%d",&n);s=0.0;for(i=1;i<=n;i++)s=s+(float)(i)*(float)(i);printf("1*1+2*2+...+%d*%d=%f\,nn",n,s);}运⾏结果如下:RUNplease input n:51*1+2*2+...+5*5=55.000000for语句的⼏种格式for语句的三个表达式都是可以省略的,但分号“;”绝对不能省略.a.for(;;)语句;这是⼀个死循环,⼀般⽤条件表达式加break语句在循环体内适当位置,⼀旦条件满⾜时,⽤break语句跳出for循环.例如,在编制菜单控制程序时,可以如下:for(;;){printf("please input choice(Q=Exit):");显/*⽰菜单语句块:*/scanf("%c",&ch);if(ch=='Q')or(ch=='q')break;语/*句段*/}b.for(;表达式2;表达式3)使⽤条件是:循环控制变量的初值不是已知常量,⽽是在前⾯通过计算得到,例如:i=m-n;for(;ic.for(表达式1;表达式2;)语句⼀般当循环控制变量⾮规则变化,⽽且循环体中有更新控制变量的语句时使⽤.例如:for(i=1;i<=100;){i=i*2+1;}d.for(i=1,j=n;i在for语句中,表达式1、表达式3都可以有⼀项或多项,如本例中,表达式1同时为i和j 赋初值,表达式3同时改变i和j的值.当有不⽌⼀项时,各项之间⽤逗号“,”分隔.另外,C语⾔还允许在循环体内改变循环变量的值,这在某些程序的设计中是很有⽤的.到此,我们已经学习了C语⾔中三种循环控制语句while、do...while和for语句,下⾯再讨论两个问题:三种语句的选⽤同⼀个问题,往往既可以⽤while语句解决,也可以⽤do...while或者for语句来解决,但在实际应⽤中,应根据具体情况来选⽤不同的循环语句,选⽤的⼀般原则是:1)如果循环次数在执⾏循环体之前就已确定,⼀般⽤for语句;如果循环次数是由循环体的执⾏情况确定的,⼀般⽤while语句或者do...while语句.2)当循环体⾄少执⾏⼀次时,⽤do...while语句,反之,如果循环体可能⼀次也不执⾏,选⽤while语句.循环的嵌套⼀个循环的循环体中有另⼀个循环叫循环嵌套.这种嵌套过程可以有很多重.⼀个循环外⾯仅包围⼀层循环叫⼆重循环;⼀个循环外⾯包围两层循环叫三重循环;⼀个循环外⾯包围多层循环叫多重循环.三种循环语句for、while、do...while可以互相嵌套⾃由组合.但要注意的是,各循环必须完整,相互之间绝不允许交叉.如下⾯这种形式是不允许的:do{for(;;){......}while();}[例3-15]打印8⾏7列的星形矩阵.流程图见图3-12,程序如下:#includemain(){inti,j;for(i=0;i<8,i++)/*控制⾏*/{for(j=0;j<7>;j++)/*控制列*/printf("*");printf("\n");/*换⾏*/}}打印结果如下:RUN********************************************************将程序中for(j=0;j<7;j++)改为for(j=0;j打印三⾓形.3.4.4break与continue语句有时,我们需要在循环体中提前跳出循环,或者在满⾜某种条件下,不执⾏循环中剩下的语句⽽⽴即从头开始新的⼀轮循环,这时就要⽤到break和continue语句.1.break语句在前⾯学习switch语句时,我们已经接触到break语句,在case⼦句执⾏完后,通过break 语句使控制⽴即跳出switch结构.在循环语句中,break语句的作⽤是在循环体中测试到应⽴即结束循环时,使控制⽴即跳出循环结构,转⽽执⾏循环语句后的语句.[例3-16]打印半径为1到10的圆的⾯积,若⾯积超过100,则不予打印.#includemain(){intr;float area;for(r=1;r<=10;r++){area=3.141593*r*r;if(area>100.0)break;printf("square=%f\n",area);}printf("nowr=%d\n",r);}运⾏程序:RUNsquare=3.141593square=12.566373square=28.274338square=50.265488square=78.539825nowr=6当break处于嵌套结构中时,它将只跳出最内层结构,⽽对外层结构⽆影响.2.continue语句continue语句只能⽤于循环结构中,⼀旦执⾏了continue语句,程序就跳过循环体中位于该语句后的所有语句,提前结束本次循环周期并开始新⼀轮循环.[例3-17]计算半径为1到15的圆的⾯积,仅打印出超过50的圆⾯积.#includemain(){int r;float area;for(r=1;r<=5;r++){area=3.141593*r*r;if(area<50.0)continue;printf("square=%f",area);}}结果为:RUNsquare=50.265488square=78.539825同break⼀样,continue语句也仅仅影响该语句本⾝所处的循环层,⽽对外层循环没有影响.3.4.5程序应⽤举例[例3-18]验证哥德巴赫猜想:任⼀充分⼤的偶数,可以⽤两个素数之和表⽰,例如:4=2+26=3+3......98=19+79哥德巴赫猜想是世界著名的数学难题,⾄今未能在理论上得到证明,⾃从计算机出现后,⼈们就开始⽤计算机去尝试解各种各样的数学难题,包括费马⼤定理、四⾊问题、哥德巴赫猜想等,虽然计算机⽆法从理论上严密地证明它们,⽽只能在很有限的范围内对其进⾏检验,但也不失其意义.费马⼤定理已于1994年得到证明,⽽哥德巴赫猜想这枚数学王冠上的宝⽯,⾄今⽆⼈能及.分析:我们先不考虑怎样判断⼀个数是否为素数,⽽从整体上对这个问题进⾏考虑,可以这样做:读⼊⼀个偶数n,将它分成p和q,使n=p+q.怎样分呢?可以令p从2开始,每次加1,⽽令q=n-p,如果p、q均为素数,则正为所求,否则令p=p+q再试.其基本算法如下:1)读⼊⼤于3的偶数n.2)P=13)do{4)p=p+1;q=n-p;5)p是素数吗?6)q是素数吗?7)}whilep、q有⼀个不是素数.8)输出n=p+q.为了判明p、q是否是素数,我们设置两个标志量flag p和flag q,初始值为0,若p是素数,令flag p=1,若q是素数,令flagq=1,于是第7步变成:7)}while(flag p*flag q==0);再来分析第5、第6步,怎样判断⼀个数是不是素数呢?素数就是除了1和它⾃⾝外,不能被任何数整除的整数,由定义可知:2、3、5、7、11、13、17、19等是素数;1、4、6、8、9、10、12、14等不是素数;要判断i是否是素数,最简单的办法是⽤2、3、4、??i-1这些数依次去除i,看能否除尽,若被其中之⼀除尽,则i不是素数,反之,i是素数.但其实,没必要⽤那么多的数去除,实际上,⽤反证法很容易证明,如果⼩于等于i的平⽅根的数都除不尽,则i必是素数.于是,上述算法中的第5步、第6步可以细化为:第5)步p是素数吗?flag p=1;for(j=2;j<=[sqrt(p)];j++)ifp除以j的余数=0{flag p=0;break;}第6)步q是素数吗?flag q=1;for(j=2;j<=[sqrt(q)];j++)ifq除以j的余数=0{flag q=0;break;}程序如下:#include#includemain(){intj,n,p,q,flag p,flag q;printf("please input n:");scanf("%d",&n);if(((n%2)!=0)||(n<=4))printf("inputdataerror!\n");else{p=1;do{p=p+1;q=n-p;flag p=1;for(j=2;j<=(int)(floor(sqrt((double)(p))));j++) {if((p%j)==0){flag p=0;break;}}flag q=1;for(j=2;j<=(int)(floor(sqrt((double)(q))));j++) { if((q%j)==0){flag q=0;break;}}}while(flag p*flag q==0);printf("%d=%d+%d\n,"n,p,q);}}程序运⾏结果如下:RUN?please input n:88=3+5RUNplease input n:98 98=19+79RUNplease input n:9 input data error!。
C语言第五章循环结构程序控制PPT教学课件

PF
T
A
i++; 说明:}
其中prinwtfh(i“lesu是m=关%键d字, a;ver(表=%达f式\n”)通,su常m是,su关m系/20表.0达) ;式 或逻} 辑表达式;<语句>作为 while 循环语句的循环体, 可以是一条语句,也可以是复合语句。
2020/12/10
上一页
下一页 1
注意: 1.只有 <表达式> 的值是非0时,才执行< 语句 > 给出的循环体。
2020/12/10
上一页
下一页 8
例: 1要.点fo说r 明语例例例例:句::::fi=o中r1if=o(;的r1i=(;1表i;=;i1<达i<;==式;1i10+010+可0;;)i)以+s{u+省ms)us略m=u=m(susum分=m+s号u+i mi;不;+i能i+;+省;)} 。 2.如果例省f:o略rfo(表r; i(达<;=式;1)0{20s,u; m)将{=形ss成uumm无+=限i s;u循}m环+i。; i++ ; } 3.表达例式:3fo也r(s可um以=省0; 略i<=。100 ;i++)sum = sum+i ; 45..可3 个以表同达时pffcfooorh式省rrira((nisr同(略=tuf;0cm(时表,;“(j==\cn0省达1=,T0ig=略0式he1et;;,c1iic<h和<h=此a=a1表rjr0(时;0达)iis;)+相i++!:式=%,+当j)3‘sc-\。于ur\-nm’)”;wk=),h=sciulie)m+(;+j1i;); …
c语言循环控制

{int sum=0,1; scanf(”%d” ,&i) ; while(i<=10) {sum=sum 十 I;
(2) main() {int sum=0,i; scanf(”%d”,&i) ; do sum=sum 十 i; }
i++; } printf("%d",sum); “ 运行情况如下: 运行情况如下: 66 55 可以看到:当输入 i 的值小于或等于 10 时,二者得到结果相同。而当 1>10 时,二 者结果就不同了。这是因为此时对 while 循环来说,一次也不执行循环体(表达式“j< =10”为假) ,而对 do 一 while 循环来说则要执行一次循环体。可以得到结论:当 while 后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相 同(指二者具有相同的循环体的情况) 。 还要注意一点:do 一 while 循环是先执行循环体语句,后判断表达式,从这点来说, 它类似于直到型循环,但它与其它语言中的 until 型循环 (如 FORTRAN 语言的 DO 一 UNTIL) 不同, do 一 while 循环是当表达式为真时反复执行循环体,表达式为假时结束循环。而 典型的 until(直到型)循环结构则是表达式为真时结束循环(见第三章图 3. 5) 。因 此在将图 5. 4 (a) 画成用 N 石结构流程图形式表示的直到型循环结构时应将条件取 “反” , 即将图 5. 4(a)中的“i<100”改为图 5. 4(U 中的“i>100” 。因为“当 i<100
5. 5 . 3 while 语 句 它用来实现“当型”循环结构。其一般形式如下: whi1e ( 表 达 式 ) 语 句 ; 当 表 达 式 为 非 0 值 时 执 行 while 语 句 中 的 内 嵌 语 句 。 其 流 程 图 见
c语言 循环控制

22
while、do-while、for循环语句可以并列,
2013-9-6
5.7 几种循环语句的比较
while和do-while语句的表达式只有一个,for语 句有三个。
23
while 和for先判断循环条件后执行循环体,dowhile语句先执行循环体后判断循环条件。
while语句多用于循环次数不定的情况 do-while语句多用于至少要运行一次的情况 for语句多用于要赋初值或循环次数固定的情况
2013-9-6
应用举例
【例5.5】把100~200之间能被7整除的数, 以十个数为一行的形式输出,最 后输出一共有多少个这样的数。
for (n=100; n<=200; n++) n能被7整除 T F 终止本次循环 输出n 输出10个数 T F 换行
24
2013-9-6
算法和程序
main( ) { int n,j=0; for(n=100;n<=200;n++) { if (n%7!=0) continue; printf("%6d",n); j++; if (j%10==0) printf("\n"); } printf(" \n j=%d\n",j); }
while语句
表达式?
Y N
do-while语句 … break; …
表达式?
Y N
for语句 计算表达式1
表达式2?
Y N
… break; …
… break; …
计算表达式3 后续语句
2013-9-6
后续语句
后续语句
例如:
第5讲 循环控制

循环结构
概述
什么是循环?
循环结构是结构化程序设计的基本结构之一,它和顺序结
构、选择结构共同作为各种复杂程序的基本构造单元。
为什么要使用循环?
在许多问题中需要用到循环控制。
C语言可实现循环的语句:
和 if 构成循环 while 语句 do ~ while 语句 for 语句
n 1
100
#include <stdio.h> main() { int i,sum=0; i=1; do { sum+=i; i++; }while(i<=100); printf("%d",sum); }
例
while和do~while比较
#include <stdio.h> main() main() { int i,sum=0; { int i,sum=0; scanf("%d",&i); scanf("%d",&i); while(i<=10) do { sum+=i; 一般情况下,用while语句和用do{ sum+=i; i++; while语句处理同一问题时,若二者 i++; } 循环体一样,则它们的结果也一样。 }while(i<=10); 但是如果while后面的表达式一开始 printf("%d",sum); 就为假(0值)时,两种循环的结果是 printf("%d",sum); } 不同的。 }
break;
…...
……
真(非0)
while expr
C语言中的循环控制

C语言中的循环控制循环控制顾名思义就是重复执行某一个语句块,日常生活中也有很多需要重复执行的事,比如生产流水线等都是在重复执行某一件事。
程序中如果没有循环控制,那么当需要执行重复的指令时,程序将变得非常庞大,有时候也不是程序员能写出的,比如要重复一百万次,你不可能把语句写一百万遍,所以循环控制是多么的重要,任何一门程序设计语言都有循环控制语句,因此循环控制是多么的基础,打好基础才能进阶成大神。
下面就简要附上对每一种循环语句进行简要说明。
一、while(表达式)语句:其一般形式如下:while(表达式){语句块}执行流程图:说明:while语句后面的表达式为真时(非0),那么就将执行后面的语句块,但是while后面的表达式一旦为真,那么它就一直为真,自己并不会使条件转变为假,因此后面的语句块必须存在使表达式转变为假的条件,否则将进入死循环,无休无止。
换言之,就是程序在运行时可以通过判断,检验条件作出选择,程序还必须能够重复执行随后的语句,直到满足某个条件为止,跳出循环。
二、do{语句块}while(表达式):上面的while语句如果一开始表达式就为假,那么它大括号里的语句块一次也不执行,但是do……w hile(表达式)语句就算一开始表达式值为假,它也会执行一次。
流程图为:可以看出其特点是,先执行循环体语句,然后再进行判断,当表达式结果为真时那么返回重新执行循环体语句,直到循环条件为假时,结束此循环。
大大的注意:在使用do……while语句时,条件要放在while后面的圆括号中,但是最后一定一定要加上分号,如do……while(表达式);。
三、for语句:for语句的一般形式为:for(表达式1;表达式2;表达式3)。
其执行流程图为:for语句每一次循环时修改循环变量,跟上面的两个比,for循环语句最为灵活,它不仅可以用于循环次数确定的情况,也可以用于循环次数不确定的情况,而只给出循环结束条件的情况。
c语言第五章知识点

c语言第五章知识点C语言第五章知识点C语言是一种高级编程语言,它的第五章主要讲解了C语言中的循环结构和分支结构。
这两种结构是编程中非常重要的基础知识,掌握它们可以让我们更加灵活地编写程序。
一、循环结构循环结构是指在程序中重复执行某段代码的结构。
C语言中有三种循环结构:while循环、do-while循环和for循环。
1. while循环while循环是最基本的循环结构,它的语法格式如下:while (条件表达式){循环体语句;}while循环的执行过程是:先判断条件表达式的值是否为真,如果为真,则执行循环体语句;执行完循环体语句后再次判断条件表达式的值,如果为真,则再次执行循环体语句,以此类推,直到条件表达式的值为假为止。
2. do-while循环do-while循环与while循环的区别在于,do-while循环先执行一次循环体语句,然后再判断条件表达式的值。
它的语法格式如下:do{循环体语句;} while (条件表达式);do-while循环的执行过程是:先执行一次循环体语句,然后判断条件表达式的值是否为真,如果为真,则再次执行循环体语句,以此类推,直到条件表达式的值为假为止。
3. for循环for循环是最常用的循环结构,它的语法格式如下:for (表达式1; 表达式2; 表达式3){循环体语句;}for循环的执行过程是:先执行表达式1,然后判断表达式2的值是否为真,如果为真,则执行循环体语句;执行完循环体语句后再执行表达式3,然后再次判断表达式2的值,以此类推,直到表达式2的值为假为止。
二、分支结构分支结构是指根据条件的不同,执行不同的代码块。
C语言中有两种分支结构:if语句和switch语句。
1. if语句if语句是最基本的分支结构,它的语法格式如下:if (条件表达式){代码块1;}else{代码块2;}if语句的执行过程是:先判断条件表达式的值是否为真,如果为真,则执行代码块1;如果为假,则执行代码块2。
[计算机软件及应用]第5章-循环控制
![[计算机软件及应用]第5章-循环控制](https://img.taocdn.com/s3/m/8d7344480b1c59eef8c7b48f.png)
如: for(r=1;r<=10;r++) { area=Pi*r*r; if(area>100) break; printf("%f",area); } 计算r=1到r=10时的圆面积,直到面积area大于100为止。 从上面的for循环可以看到:当area>100时,执行break语句, 提前结束循环,即不再继续执行其余的几次循环。 break语句的一般形式为: break; break语句不能用于循环语句和Switch语句之外的任何其 他语句中。
for (表达式1;表达式2;表达式3) 语句 for(循环变量赋初值;循环条件;循环变量增 值) 语句
它的执行过程如下:
(1) 先求解表达式1。 (2) 求解表达式2,若其值为真(值为非0), 则执行for语句中指定的内嵌语句,然后 执行下面第(3)步。若为假(值为0),则结 束循环,转到第(5)步。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执行。 (5) 循环结束,执行for语句下面的一个语 句。 可以用图5.3来表示for语句的执行过程。
(2) do {… do {… } while( ); } while( ); (3) for(;;) { for(; ;) {…} }
(4) while( ) {… do {…} while( ); … } (5) for(; ;) {… while( ) { } … }
(5) do { …
如果有以下两个循环结构: (1) while(表达式1) {… if(表达式2) break;
… } (2) while(表达式1) {… if(表达式2) continue; … }
图5.5
图5.6
程序(1)的流程图如图5.5所示,而程序(2)的流程如图5.6所示。
c语言 循环控制

6.3 while 语句
while 语句的一般形式为: while(表达式)语句
其中表达式是循环条件,语句为循环体。 while 语句的语义是:计算表达式的值,当值为真(非 0)时,
行过程可用下图表示。
100
n
【例 6.2】用 while 语句求 n1 。 用传统流程图和 N-S 结构流程图表示算法,见图:
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力通根保1据过护生管高产线中工敷资艺设料高技试中术卷资0配不料置仅试技可卷术以要是解求指决,机吊对组顶电在层气进配设行置备继不进电规行保范空护高载高中与中资带资料负料试荷试卷下卷问高总题中体2资2配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况卷中下安,与全要过,加度并强工且看作尽护下可1都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并术3试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
第五.章 循环控制.ppt

间的格子,绘制8×8的棋盘。 三人,乙队X、Y、Z三人,已
(调TC)
分析:用ASCII码219表示白色 方格,用空格表示黑色方格。
知A不与X比,C不与X、Z比, 试找出比赛名单。(穷举法)
main( ) {
main( )
char i,j,k;
{
for(i='x';i<='z';i++)
int i,j;
五、四种循环语句的比较 4、控制上:
1、可用来处理同一问题, 但不提倡用goto型循环
2、格式上:
while、do~while和for循环 可用break和continue控制,而 goto语句则不可
while和do~while仅在while 5、选用上:
后指定循环条件,循环初值在 一般情况下
前,循环步长在循环体中,而 for语句则把初值及步长都放在 for的括号内。
printf(“*”);
{chicks=100-cocks-hens;
printf(“\n”);
if(5*cocks+3*hens+chicks/3==100)
}}
printf(“%d,%d,%d\n”,cocks,hens,chicks);
}}
5.3 程序举例
六、国际象棋的棋盘是黑白相 六、单打比赛:甲队A、B、C
⑵goto语句的用途: ①与if语句构成循环(少) ②退出多层循环
⑶goto语句不符合结构化程序设计 的要求,少用。
二、while语句(当型)
形式:while(表达式) 语句 执行:(如下图)
5.2 实现循环的语句
main()
三、do~while语句
C语言 循环控制

循环控制
13
for 语句(续2) 语句( )
3)省略 e3 ) for (i = 1, sum = 0; i <= 100; ) { sum sum + i; 循环体是复合语句 i = i + 1; }
(注:括号内分号均不能省略) 括号内分号均不能省略)
循环控制
for 语句(续3)
14
for 语句(续3) 语句( )
若从键盘输入 1,两个程序运行结果均为 55 , 若从键盘输入 11,前者结果为 0,后者结果为 11 , ,
循环控制
11
五 for 语句
1 语句形式 for ( e1; e2; e3 ) s 其中, 、 、 均为任意表达式, 其中,e1、e2、e3 均为任意表达式, e1 为循环变量赋初值 e2 循环条件 e3 改变循环控制变量
while语句 语句 do_while语句 语句 for 语句
C语言专门的循环控制语句 C语言专门的循环控制语句
2
二 用 goto 语句及 if 语句构成循环
1 goto 语句 goto 语句的一般形式 : goto label; ; label 用来标识一个语句的标识符,称为语句标号 用来标识一个语句的标识符, 标号和被标识的语句之间用冒号 冒号隔开 标号和被标识的语句之间用冒号隔开 正确的标号 b1 : a = a + b + c; 例: void main() { int i = 1, sum = 0; x = 5 + a; b2 : y = 3 + b; loop : if ( i <= 100 ) { sum = sum + i++; 错误的标号 goto loop; 1 : b = c + d; } 2 : e = x + y; printf(“%d\n”,sum); }
c语言循环控制表达式

c语言循环控制表达式循环控制表达式是C语言中非常重要的一个概念,它是控制循环执行次数的关键。
在C语言中,循环控制表达式通常由三个部分组成:循环变量的初始化、循环条件的判断和循环变量的更新。
这三个部分的组合可以实现各种不同的循环控制方式,如for循环、while循环和do-while循环等。
我们来看一下for循环的循环控制表达式。
for循环的语法结构如下:```for (循环变量的初始化; 循环条件的判断; 循环变量的更新) {循环体语句;}```在for循环中,循环变量的初始化只会在循环开始时执行一次,循环条件的判断会在每次循环开始前进行,循环变量的更新会在每次循环结束后执行。
因此,for循环的循环控制表达式非常灵活,可以实现各种不同的循环控制方式。
接下来,我们来看一下while循环的循环控制表达式。
while循环的语法结构如下:```while (循环条件的判断) {循环体语句;循环变量的更新;}```在while循环中,循环条件的判断会在每次循环开始前进行,循环体语句会在循环条件为真时执行,循环变量的更新也会在循环条件为真时执行。
因此,while循环的循环控制表达式比较简单,但也非常灵活,可以实现各种不同的循环控制方式。
我们来看一下do-while循环的循环控制表达式。
do-while循环的语法结构如下:```do {循环体语句;循环变量的更新;} while (循环条件的判断);```在do-while循环中,循环体语句会在循环条件为真时执行,循环变量的更新也会在循环条件为真时执行,但循环条件的判断会在每次循环结束后进行。
因此,do-while循环的循环控制表达式比较特殊,但也非常灵活,可以实现各种不同的循环控制方式。
循环控制表达式是C语言中非常重要的一个概念,它可以实现各种不同的循环控制方式。
在编写程序时,我们需要根据具体的需求选择合适的循环控制方式,并合理地使用循环控制表达式,以实现程序的正确、高效运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
5.2.2 for循环语句使用说明
1、for语句可以取代while语句或do-while 语句,尤其对于确定循环次数的循环,使用 for语句让程序结构更加直观和容易理解。
2、for语句中()中的三条表达式语句可以省 略,即可以将它们写在程序其他地方,但是 它们之间的分号“ ;”不可省略。
如何选择循环语句
scanf(“%f”, &x); sum=sum+x; /* 累加到变量sum中 */ i++; /*循环控制变量进行更新自增1 */ }
【例5.1】 编写一个程序,用户从键盘输入整数n,计算 s=2+4+6+8+…+2n并输出计算结果s。
程序设计分析: (1)s实际上是n个整型数据项的和,这些数据项分别是2、4、 6、…、2n; (2)利用循环结构,在每次循环中
do
{
x=2*i;
/* 计算累加第i项 */
s += x ;
/* 累加 */
i++;;
/* i自增1 */
} while ( i<=n ) ; /*注意分号不能遗漏 */
printf ( “s=%d\n”, s );
}
5.1.4 do-while语句使用说明
1、do-while语句与while语句的使用方法相 同,都由循环继续条件来决定循环体语句 是否继续被重复执行。
}
5.3流程转向语句
• break语句: break;
作用:强行结束循环, 跳出本层循环转向循 环体外的下一条语句。
通常与if语句在一起使 用:
if(条件表达式) break;
例如:
#include <stdio.h> void main ( ) { int i=1, s=0;
while ( i<100 ) { s+=i;
printf (“s=%d”, s ); }
5.4 循环结构程序举例
【例5.11】编写一个程序,接收用户从键盘输入的 字符,当用户输入回车时表示确认输入,统计用户 输入了多少个字符(不含回车符)。
程序设计分析: 1)无法预知循环的执行次数; 2) 使用循环来接收用户的输入,每次接收一个 字符都判断以下是否是回车符,如不是则把计 数变量的值增加1。
#include <stdio.h>
void main ( )
{ char c;
int i=0;
/*计数变量初始化*/
printf (“请输入字符串(以回车确认):\n”);
c=getchar( );
/*接收字符*/
while (c != ‘\n’)
/*判断是否是结尾*/
{ i++;
/*计数增加1*/
printf ( “%f\n”, sum );
}
【例5.3】用do-while语句完成【例5.1】的要求;计算 s=2+4+6+8+…+2n并输出计算结果s。
void main( )
{ int i=1, x, n, s=0 ;
printf( “请输入n的值:” );
scanf ( “%d”, &n );
for( i=1; i<= n; i++ )
{ j=1; /*循环控制变量初始化 */
x=1;
while( j<=i )
内
{ x *= j; /*把j累乘到x中*/
层
j++; /*循环控制变量自增*/ 循
外 层 循
}
环
环
s += x; /* 累加到s变量中 */
}
printf(“s=%d\n”, s ); /*显示结果*/
#include <stdio.h>
void main()
{
float x,sum=0; /*定义并初始化变量*/
int i;
/*定义并初始化循环控制变量*/
printf ( “请输入数据:” );
for ( i=1; i<=20; i++ )
{ scanf(“%f, &x); /* 输入一个数 */
c=getchar( );
/*继续接收字符*/
}
printf(“字符串中共%d个字符!”, i );
}
【例5.12】编写程序完成功能:输入一个大于或等于0 的整数,计算它是一个几位数(0算一位整数)。
#include <stdio.h>
void main ( )
{ int x , n;
printf (“请输入一个整数:”);
/*定义并初始化变量*/
printf ( “请输入n的值:”) ;
scanf ( “%d” , &n ) ;
/* 输入n的值 */
for( i=1; i<= n; i++ )
{ x = 2*;
/* 计算要累加的数据项 */
s += x;
/* 累加到s变量中 */
}
printf ( “s=%d\n”, s );
【例5.7】编写程序,计算s=1!+2!+3!+...+n!,其中n是由 用户输入的整数(小于8),计算完成后显示结果。
#include <stdio.h> void main( )
int i,j,x,s=0;
{ 定义并初始化变量; 请输入n的值;
j=1; x=1; while(j<=i)
for( i=1; i<= n; i++ ) /*外层循环*/{
用相似编程方法求以下各式:
S=1+3+5+…+2n-1; S=1+1/3+1/5+….+1/(2n-1); S=1+1/2+1/3+1/4+…1/n; S=2/1+3/2+5/3+8/5+…;前n项之和. S=1!+2!+3!+…+n!
5.1.2 while语句使用说明
1、 while语句是先判断条件,然后决定是否执行循 环体。
【例5.9】计算1000以内所有不能被3整数的正整数 之和并显示结果。
#include <stdio.h> void main ( ) { int i, s=0;
for (i=1; i<1000; i++) { if ( i%3 == 0) { continue ; } /*结束本轮循环*/ s += i ; }
2、为使循环能正常结束,应保证每次执行循环体后, 表达式的值会有一种向“假”变化的趋势 。
如 i=5; while(i>0) { x++; }
3、在进入循环之前应做好有关变量的初始化赋值操 作。如上例中,累加变量s初始化为0,i变量初始 化为1。
5.1.3 do-while语句(”直到型”循环)
一般形式:
{ 计算i!值;
/*内层循环计算ixj+!=*+/x;*j;
将i!的值累加到s中;/*累加到s中}*/
}
/*for循环结束*/
显示计算结果;
}
#include <stdio.h>
void main( )
{ int i,j,x,n,s=0;
printf(“请输入n的值:”);
scanf(“%d”, &n);
(值非0);如果为真,则执行循环体语句,接着执行表达 式3,再判断表达式2的值;如此重复执行,直到表达式2的 值为0终止循环,跳转到循环体之后的语句执行。
for ( 循环变量赋初值;循环继续条件;循环变量更新 ) { 循环体语句}
【例5.6】 使用for循环语句实现例【5.2】的要求,用户从键 盘输入20个数,求它们的和并输出结果。
if ( s>999 ) { break ; } /*终止循环*/
} printf (“s=%d”, s ); }
注意:break语句只能跳出一层循环,如果它位于多层嵌套 循环的内层,那么只能终止break语句所在的那层循环。
int i, j; for (i=0; i<N; i++ ) { for (j=0; j<N; j++ )
do {
循环体语句 }while(表达式);
功能:先执行循环体语句,然后计算表达式的值。若 表达式值为真(值非0),继续执行循环;否则当表 达式的值假(值为0)时,循环结束,执行do-while语 句的后续语句。
【例5.4】用do-while语句完成【例5.2】的要求,用户从键 盘输入20个数,求它们的和并输出结果。
{ if (j>100) { break; } /*跳出内层循环*/
} if (i>100 ) { break; } /*跳出外层循环*/ }
• continue语句 continue;
功能:跳过当前循环体剩余 语句,直接开始执行下 一轮循环。
通常与if语句在一起使用:
if(条件表达式) continue;
【例5.2】 编写一个程序,用户从键盘输入20个数,求 它们的和并输出结果。
程序设计分析:使用循环结构,每次输入一个数x,将它累 加到变量sum上,重复执行20次这样的操作,便得到最后的 结果。
float x,sum=0; /*定义并初始化变量*/ int i=1; /*定义并初始化循环控制变量*/ printf (“请输入数据:\n”); while(i<=20) /*循环条件*/ {