C语言程序设计 流程控制语句ppt课件_第1页
C语言程序设计 流程控制语句ppt课件_第2页
C语言程序设计 流程控制语句ppt课件_第3页
C语言程序设计 流程控制语句ppt课件_第4页
C语言程序设计 流程控制语句ppt课件_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计语言程序设计第四章第四章 流程控制语句流程控制语句 实际工作中,顺序结构是不能满足程序设计要实际工作中,顺序结构是不能满足程序设计要求的,因为大量的实际问题需要通过流程的控制来求的,因为大量的实际问题需要通过流程的控制来解决的。解决的。例如:例如:如果明天气温高于如果明天气温高于35c,我将去游泳,否则在家看,我将去游泳,否则在家看看电视。看电视。或我将做作业直到晚上十点。或我将做作业直到晚上十点。从程序结构上看,就是通过循环结构和选择结构来从程序结构上看,就是通过循环结构和选择结构来实现的。实现的。4-1 选择结构语句选择结构语句4.1.1 if语句语句 程序设计过程中,常常需

2、要根据某一条件是否满足程序设计过程中,常常需要根据某一条件是否满足来判断做或者不做某件事。这种结构在来判断做或者不做某件事。这种结构在c中是通过中是通过if语句语句实现的。实现的。if语句的三种形式语句的三种形式(1)形式一: If (表达式) 语句阐明:表达式通常为关系表达式或逻辑表达式,两边的括号必不可少,当语句不止一句的时候,可以使用一组括号把他们组成复合语句。 例如:If (xy) printf( “%d”, x);否表达式语句真否流程图流程图执行过程:执行过程:先计算表达式的值,如果表先计算表达式的值,如果表达式达式的值为非零,则执行语句;的值为非零,则执行语句;假设假设值为零,则跳

3、过值为零,则跳过if语句执行语句执行其后其后续语句。续语句。例例4.1 4.1 一个猜字游戏程序。程序运行时,一个猜字游戏程序。程序运行时,要求游戏者从键盘输入一个数,如果猜要求游戏者从键盘输入一个数,如果猜对了,屏幕显示对了,屏幕显示“* * *RightRight* * *”;否则屏;否则屏幕不显示任何信息。幕不显示任何信息。#include #include main() main() int magic=123; int magic=123; int guess; int guess; printf(“Enter your guess:); printf(“Enter your gue

4、ss:); scanf(“%d,&guess); scanf(“%d,&guess); if (guess=magic) if (guess=magic) printf(“ printf(“* * *RightRight* * *n);n); if语句的三种形式(2) 形式二: If (表达式) 语句1 else 语句2 例如:If (xy) printf “%d”, x);Else printf(“%d”,y);真非真非0)假假0)表达式成立吗?表达式成立吗?语句序列语句序列1语句序列语句序列2执行过程:执行过程:先计算表达式的值,如果表达式的值为非零,则执行语先计算表达式的

5、值,如果表达式的值为非零,则执行语句句1后跳过语句后跳过语句2而执行后续语句;如果值为零,则跳过而执行后续语句;如果值为零,则跳过语句语句1执行语句执行语句2。留意:留意:1.c语言每条语句必须以分号结束,因此语言每条语句必须以分号结束,因此else之之前有前有一分号,整个语句结束处有一分号。一分号,整个语句结束处有一分号。例:例:if(ab) printf(“%d”,a); else printf (“%d”,b); 正确正确if(ab) printf(“%d”,a) else printf (“%d”,b); 错误错误2.语句语句1与语句与语句2不能同时执行。不能同时执行。 例例4.2 4

6、.2 将例将例4.14.1程序中的程序中的ifif语句改成语句改成if-elseif-else语句,如果游戏者猜对了,就语句,如果游戏者猜对了,就显示显示”* * *RightRight* * *”,若猜错了,就显,若猜错了,就显示示“* * *WrongWrong* * *”。#include #include main() main() int magic=123; int magic=123; int guess; int guess; printf(Enter your guess:); printf(Enter your guess:); scanf(%d,&guess);

7、scanf(%d,&guess); if (guess=magic) if (guess=magic) printf( printf(* * *RightRight* * *n);n); else else printf( printf(* * *WrongWrong* * *n);n); if 语句的三种形式语句的三种形式(3)形式三: if (表达式1) 语句1;else if (表达式2) 语句2; else if (表达式3) 语句3;.else if (表达式n) 语句序列n;else 语句序列n+1; 这种形式可以实现多分支选择的功能,既在多种这种形式可以实现多分支选择的功

8、能,既在多种条件下的不同分支中选择一个分支来执行。条件下的不同分支中选择一个分支来执行。 它的执行过程为:若表达式它的执行过程为:若表达式1的值为真非零),的值为真非零),则执行语句则执行语句1;否则,若表达式;否则,若表达式2的值为真,则执行的值为真,则执行语句语句2;.若上述表达式的值都为若上述表达式的值都为0时,执行语句时,执行语句n+1.以下为流程图:以下为流程图:例如:表表达达式式1成成立立吗吗?真真(非非0)语句序列语句序列1语句序列语句序列2真真(非非0)语句序列语句序列3真真(非非0)语句序列语句序列n真真(非非0)表表达达式式2成成立立吗吗?假假(0)表表达达式式3成成立立吗

9、吗?假假(0)表表达达式式n成成立立吗吗?假假(0)语句序语句序列列n+1假假(0)if (x0) y=1;else if (x=0) y=0; else y=-1;例例4.3 4.3 例例4.24.2再扩充,即当游戏者猜错时,屏再扩充,即当游戏者猜错时,屏幕除显示幕除显示“* * *WrongWrong* * *”外,还告诉游戏者是外,还告诉游戏者是猜大了还是猜小了。猜大了还是猜小了。#include #include main() main() int magic=123; int magic=123; int guess; int guess; printf(Enter your gue

10、ss:); printf(Enter your guess:); scanf(%d,&guess); scanf(%d,&guess); if (guess=magic) if (guess=magic) printf( printf(* * *RightRight* * *n);n); else if(guessmagic) else if(guessmagic) printf( printf(* * *WrongWrong* * *nToo highnToo high* * *n)n) else else printf( printf(* * *WrongWrong* *

11、*nToo lownToo low* * *n);n);阐明阐明:以上三种格式中的表达式一般为关系表达式或逻辑表达式只要以上三种格式中的表达式一般为关系表达式或逻辑表达式只要表达式的结果不为表达式的结果不为0,系统就认为该表达式成立;相反表达式,系统就认为该表达式成立;相反表达式的结果为的结果为0,系统认为该表达式不成立。,系统认为该表达式不成立。例如:例如:if(a=b&x=y) printf(“a=b,x=y”);系统对表达式的值进行判断,若为真,按非零处理,执行指定系统对表达式的值进行判断,若为真,按非零处理,执行指定的语句;若为假,按零处理。的语句;若为假,按零处理。 如:如:

12、if (3) printf(“ok.”)表达式的值为表达式的值为3,按真处理,是合法的,执行结果输出,按真处理,是合法的,执行结果输出“ok.”由此可见由此可见.在在C语言中它也可以是任意的数值表达式。(包括整语言中它也可以是任意的数值表达式。(包括整型,字符型,实型,指针型)。型,字符型,实型,指针型)。在每个表达式之后不应有任何标点符号,而在每个在每个表达式之后不应有任何标点符号,而在每个语句之后都要有语句之后都要有“;” 不要误认为不要误认为else 语句和语句和if语句是两个语句,语句是两个语句,else 是是if语句的一部分。只能与语句的一部分。只能与 if 配对使用。仅配对使用。仅

13、 else 本身不能本身不能单独作为一个语句使用单独作为一个语句使用 每个语句又都可以由若干每个语句又都可以由若干C语言的语句组成,如果语言的语句组成,如果由两个以上语句构成语句序列,则应用大括号括起来由两个以上语句构成语句序列,则应用大括号括起来构成一个复合语句。括号之外不再加构成一个复合语句。括号之外不再加 “;”.如:如:if(a+bc&b+ca&c+ab) s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c); printf(“area=%6.2f”,area); else printf(“it is wrong”);内是一个完整的复合

14、语句,不需另附分号。内是一个完整的复合语句,不需另附分号。例:输入两个实数,按代数值有小到大次序输出这两例:输入两个实数,按代数值有小到大次序输出这两个数。个数。main()float a,b,t;scanf(“%f,%f”,&a,&b);if(ab)t=a;a=b;b=t;printf(“%5.2f, %5.2f”,a,b);运行情况如下:运行情况如下:3.6,-3.2-3.20,3.604.1.2 if 语句的嵌套语句的嵌套 if语句的三种形式的语句体中可以是任意的c语言语句,包括if语句。如果if的语句体又是if语句,称为嵌套的if语句。内嵌的if语句既可以嵌套在if子句

15、,也可以在else子句中。例如:求a,b,c三个数中最大值if (a=b) if (a=c) max=a; else max=c;else if (b=c) max=b; else max=c;内嵌内嵌if内嵌内嵌if二义性:二义性: if (表达式表达式1) if (表达式表达式2) 语句序列语句序列2;else 语句序列语句序列3;应如何理解?应如何理解?有两种理解方式:有两种理解方式:if (表达式表达式1) if (表达式表达式2) 语句序列语句序列2; else 语句序列语句序列3;if (表达式表达式1) if (表达式表达式2) 语句序列语句序列2;else 语句序列语句序列3;

16、语言规定:语言规定:else总是与它前面最近的且未曾配对的总是与它前面最近的且未曾配对的if配对。配对。if (表达式表达式1) if (表达式表达式2) 语句序列语句序列2; else 语句序列语句序列3; if (表达式表达式1) if (表达式表达式2) 语句序列语句序列2;else 语句序列语句序列3;用嵌套用嵌套ifif结构代替例结构代替例4.34.3中的中的 if-else-ifif-else-if结构。结构。#include #include main() main() int magic=123; int magic=123; int guess; int guess; pri

17、ntf(“Enter your guess:”); printf(“Enter your guess:”); scanf(“%d”,&guess); scanf(“%d”,&guess); if (guess=magic) if (guess=magic) printf(“ printf(“* * *RightRight* * *n”);n”); else else printf(“ printf(“* * *WrongWrong* * *”);”); if (guessmagic) if (guessmagic) printf(“Too high printf(“Too hi

18、gh* * *n”);n”); else else printf(“Too printf(“Too lowlow* * *n”); n”); 4.1.3. 4.1.3. 条件运算符条件运算符若若ifif语句中,在表达式为真和假时,且都只执行语句中,在表达式为真和假时,且都只执行一个赋值语句给同一个变量赋值时,可以用条一个赋值语句给同一个变量赋值时,可以用条件运算符来处理。件运算符来处理。条件运算符条件运算符 ? :? :条件表达式条件表达式 exp1?exp2:exp3exp1?exp2:exp3 exp1 exp1、exp2exp2和和exp3exp3都是表达式,其功能是:先都是表达式,其功

19、能是:先计算计算exp1exp1,若,若exp10exp10,则计算,则计算exp2exp2,将,将exp2exp2的值作为整个条件表达式的值;若的值作为整个条件表达式的值;若exp1=0exp1=0,则,则计算计算exp3exp3,将,将exp3exp3的值作为整个条件表达式的的值作为整个条件表达式的值。值。 如:如:if(ab) c=a;else c=b;if(ab) c=a;else c=b; 可以改写为:可以改写为:c=(ab)?a:bc=(ab)?a:b表示:若表示:若abab,取,取a a的值,否则取的值,否则取b b的值作为该条的值作为该条件表达式的值。件表达式的值。阐明:阐明:

20、1.条件运算符要求有三个操作对象。条件运算符要求有三个操作对象。2.条件运算符优先于赋值运算符,因此上面赋值表达条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给式的求解过程是先求解条件表达式,再将它的值赋给c.条件运算符的优先级别比关系运算符和算术运算符都条件运算符的优先级别比关系运算符和算术运算符都低低 max=(ab)?a:b 括号可以不要:括号可以不要: max=ab?a:b如果有:如果有:ab?a:b+1相当于:相当于:ab?a:(b+1)3.条件运算符的结合方向为条件运算符的结合方向为“自右向左自右向左”,若有:,若有: ab?a:cd?c:

21、d相当相当 于:于: ab?a:(cd?c:d)假设:假设:a=1,b=2,c=3,d=4 则条件表达式值为则条件表达式值为4。4.条件表达式不能取代一般的条件表达式不能取代一般的if语句,只有语句,只有if语句中内语句中内嵌的的语句为赋值语句且两个分支都给同一个变量嵌的的语句为赋值语句且两个分支都给同一个变量赋值时才能代替赋值时才能代替if语句。语句。如:如: if(ab) printf(“%d”,a); else printf(“%d”,a);无法用条件表达式代替无法用条件表达式代替但可以用下面语句代替:但可以用下面语句代替: printf(“%d”,ab?a:b); /将条件表达式的值输

22、出将条件表达式的值输出/5.条件表达式中,表达式条件表达式中,表达式1的类型可以与表达式的类型可以与表达式2和表达式和表达式3不同。如:不同。如: x? a : bx是整形变量是整形变量,若若x=0,则条件表达式的值为,则条件表达式的值为b表达式表达式2和表达式和表达式3的类型也可以不同。此时条件的类型也可以不同。此时条件表达式的值的类型为二者中较高的类型。如:表达式的值的类型为二者中较高的类型。如: xy?1:1.5如果如果xy,则表达式的值为则表达式的值为1.5。若。若xy,值应为值应为1,由于由于1.5是实型比整型高,因此应转换为是实型比整型高,因此应转换为1.0用条件表达式代替例用条件

23、表达式代替例4.34.3中的中的if-elseif-else。#include #include main()main() int magic=123; int magic=123; int guess; int guess; printf(“ Enter your guess: ”); printf(“ Enter your guess: ”); scanf(“ %d ”,&guess); scanf(“ %d ”,&guess); if (guess=magic) if (guess=magic) printf(“ printf(“ * * *RightRight* * *

24、n ”);n ”); else else printf(“ printf(“ * * *WrongWrong* * * ”); ”); guessmagic?printf(“ Too guessmagic?printf(“ Too highn ”) :printf(“Too highn ”) :printf(“Too lown”);lown”); 4.1.4 switch /break4.1.4 switch /break语句语句多分支多分支switch 构造构造switch (表达式)表达式) case 常量表达式常量表达式1:语:语句句1 case 常量表达式常量表达式2:语:语句句2 c

25、ase 常量表达式常量表达式n:语:语句句n default : 语句语句n+1语句n+1表达式语句1语句2语句n常量表达式常量表达式2常量表达式常量表达式1常量表达式常量表达式n其它其它 if-else-if结构或嵌套的结构或嵌套的if语句可以解决多分支的选择问题,语句可以解决多分支的选择问题,但若判断条件太多,关系就不够清晰,但若判断条件太多,关系就不够清晰,switch可解决。可解决。阐明阐明:1.switch后面括弧内的后面括弧内的“表达式和表达式和case常量表达式,可常量表达式,可以是任何类型。以是任何类型。2.当表达式的值与某一个当表达式的值与某一个case后面的常量表达式的值相

26、后面的常量表达式的值相等时,就执行此等时,就执行此case后面的语句,若所有的后面的语句,若所有的case中的常中的常量表达式的值都没有与表达式的值匹配的,就执行量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。后面的语句。3.每一个每一个case的常量表达式的值必须不相等,否则就会的常量表达式的值必须不相等,否则就会出现矛盾的现象对表达式的同一个值,有多种执行出现矛盾的现象对表达式的同一个值,有多种执行方案)方案)【例】【例】 从键盘输入不同的字母,显示不同的国家名称。从键盘输入不同的字母,显示不同的国家名称。 #include #include main() main(

27、) char ch; char ch; ch=getchar(); ch=getchar(); switch(ch) switch(ch) case a: printf(“American”); case a: printf(“American”); case b: printf(“Britainn”); case b: printf(“Britainn”); case c: printf(“Chinan”); case c: printf(“Chinan”); case d: printf(“Denmarkn”); case d: printf(“Denmarkn”); default: p

28、rintf(“Japann”); default: printf(“Japann”); 4.执行完一个执行完一个case后面的语句后,流程控制转移到下一个后面的语句后,流程控制转移到下一个case继续执行。继续执行。 “case常量表达式只是起语句标号的作常量表达式只是起语句标号的作用,并不在该处进行条件判断。用,并不在该处进行条件判断。留意,留意,casecase及及defaultdefault的位置直接影响到程序的位置直接影响到程序的运行结果。的运行结果。#include #include main() main() char ch; char ch; ch=getchar(); ch=g

29、etchar(); switch(ch) switch(ch) default: printf(“Japann”); default: printf(“Japann”); case a: printf(“American”); case a: printf(“American”); case b: printf(“Britainn”); case b: printf(“Britainn”); case c: printf(“Chinan”); case c: printf(“Chinan”); case d: printf(“Denmarkn”); case d: printf(“Denmar

30、kn”); 程序运行时,程序运行时,从键盘输入字母从键盘输入字母“a”a”,显示,显示: : America America Britai Britai China China Denmark Denmark Japan Japan如果输入字母如果输入字母“b”b”,显示,显示:“Japan”:“Japan”。 BritainBritain China China Denmark Denmark Japan Japan如果输入如果输入a a、b b、c c、d d以外的字母以外的字母, ,显示显示: : Japan Japan5.case后面虽然包括一个以上语句,但可以不必用花后面虽然包括一个

31、以上语句,但可以不必用花括弧括起来,会自动顺序执行本括弧括起来,会自动顺序执行本case后所有的语句。后所有的语句。7.多个多个case可以共用一组执行语句。如:可以共用一组执行语句。如: . . . case A: case B: case C: printf(“60n”);break; . . .值为值为A,B,或,或C时都执行同一组语句。时都执行同一组语句。2. break2. break语句语句breakbreak与与switchswitch联用,强迫控制立即退出联用,强迫控制立即退出switchswitch防止从一个防止从一个casecase下落到另一个下落到另一个casecase中

32、中防止因防止因casecase和和defaultdefault位置的改变而影响程位置的改变而影响程序的运行结果序的运行结果【例】【例】 在例在例4.64.6程序中加入程序中加入breakbreak。#include #include main()main() char ch; char ch; ch=getchar(); ch=getchar(); switch(ch) switch(ch) case a: case a: printf(“American”);break; printf(“American”);break; case b: case b: printf(“Britainn”)

33、;break; printf(“Britainn”);break; case c: case c: printf(“Chinan”);break; printf(“Chinan”);break; case d: case d: printf(“Denmarkn”);break; printf(“Denmarkn”);break; default: printf(“Japann”);break; default: printf(“Japann”);break;switchswitch和和breakbreak语句的使用语句的使用 如果每个如果每个casecase和和defaultdefault中都

34、有中都有breakbreak语句,语句,那么,那么,casecase和和defaultdefault出现的次序出现的次序 不会影响不会影响程序的运行结果。程序的运行结果。4.2 循环结构语句循环结构语句循环是对同一程序重复执行若干次循环是对同一程序重复执行若干次,被重复执行的部分被重复执行的部分称为循环体称为循环体.每循环一次需要进行判断一决定是继续循每循环一次需要进行判断一决定是继续循环还是中止循环环还是中止循环.决定循环继续还是中止的判断条件是决定循环继续还是中止的判断条件是循环中止条件循环中止条件,循环体和循环中止条件组成循环语句循环体和循环中止条件组成循环语句.在语言中,可用以下语句实

35、现循环:在语言中,可用以下语句实现循环:(1用用for语句。语句。(2用用do-while语句。语句。(3用用while语句。语句。(4用用goto语句和语句和if语句构成循环。语句构成循环。4.2.1 使用使用if/goto构成循环构成循环goto为无条件转向条件,他的一般形式:为无条件转向条件,他的一般形式: goto 语句标号语句标号语句功能:执行完本句后,无条件跳转到语句标号所语句功能:执行完本句后,无条件跳转到语句标号所标示的语句去执行。标示的语句去执行。语句标号也是标识符。语句标号和语句之间以语句标号也是标识符。语句标号和语句之间以“:”分隔。分隔。goto语句主要用途:语句主要用

36、途:1.与与if语句一起构成循环语句。语句一起构成循环语句。2.从循环体内跳转到循环体外。从循环体内跳转到循环体外。求1100的累计和。根据已有的知识,可以用“1+2+100来求解,但显然很繁琐。现在换个思路来考虑:首先设置一个累计器sum,其初值为0,利用sum += n来计算n依次取1、2、100),只要解决以下3个问题即可: (1将n的初值置为1; (2每执行1次“sum += n后,n增1; (3当n增到101时,停止计算。此时,sum的值就是1100的累计和。main() int n=1, sum=0; loop: sum += n; n+; if (n=100) goto loop

37、; printf(“sum=%dn”, sum);其中“loop:”为语句标号格式:标号: 语句行),其命名遵循标识符命名规则。goto语句格式:goto 标号,功能为:使系统转向标号所在的语句行执行。4.2.2 while循环循环也称为也称为“当型循环,一般形式为:当型循环,一般形式为: while(循环继续条件循环继续条件) 循环体语句组;循环体语句组;执行过程:执行过程: 1求解求解“循环继续条件表达式。如果其值为循环继续条件表达式。如果其值为非非0,转,转2);否则转);否则转3)。)。2执行循环体语句组,然后转执行循环体语句组,然后转1)。)。3推出推出while循环。循环。特点:特

38、点: 先判断表达式,后执行语句。先判断表达式,后执行语句。表达式表达式语句语句非非00案例5.3 用while语句求1100的累计和。main() int i=1,sum=0; /*初始化循环控制变量i和累计器sum*/ while( i=100 ) sum += i;/*实现累加*/ i+;/*循环控制变量i增1*/ printf(“sum=%dn”,sum); 程序运行情况如下: sum=5050若循环体改为:while( i=100 ) i+; sum += i; 则结果为:sum=5150少加了第一项的值1,多加了最后一项101表达式表达式i=1sum=sum+ii=i+1真真假假循环

39、体循环体若包含若包含一个以一个以上语句,上语句,应用花应用花括号括括号括起来起来4.2.3 do-while循环循环1一般格式一般格式 do 循环体语句组循环体语句组; while(循环继续条件循环继续条件); /*本行的分号不能缺省本行的分号不能缺省*/当循环体语句组仅由一条语句构成时,可以不使用复当循环体语句组仅由一条语句构成时,可以不使用复合语句合语句方式。方式。2执行过程执行过程执行过程如图执行过程如图5-3所示。所示。(1执行循环体语句组。执行循环体语句组。(2计算计算“循环继续条件表达式。假设循环继续条件表达式。假设“循环继续循环继续条件表达条件表达式的值为非式的值为非 0真),则

40、转向真),则转向1继续执行;否则,继续执行;否则,转向转向3)。)。(3退出循环。退出循环。do-while循环语句的特点是:先执行循环体语句组,然循环语句的特点是:先执行循环体语句组,然后再判断后再判断循环条件。循环条件。do-while循环和while循环十分相似,他们的重要区别是:While循环的控制出现在循环体之前,只有while后面的表达式的值为非零时,才可能执行循环体;在do-while循环中,总是先执行一次循环体后再求表达式的值,因此,无论表达式的值为0或非0,循环体都至少要执行一次。案例 用do-while语句求解1100的累计和。main() int i=1, sum=0;

41、/*定义并初始化循环控制变量,以及累计器*/ do sum += i; /*累加*/ i+; while(i=100);/*循环继续条件:i=100*/ printf(“sum=%dn”,sum); 阐明: while (表达式后的分号不能丢,他表示do-while 语句的结束。4.2.4 for循环循环1for语句的一般格式语句的一般格式 for(变量赋初值变量赋初值;循环继续条件循环继续条件;循环变量增值循环变量增值) 循环体语句组;循环体语句组;2for语句的执行过程语句的执行过程执行过程如图执行过程如图5-1所示。所示。(1求解求解“变量赋初值表达式。变量赋初值表达式。(2求解求解“循

42、环继续条件表达式。如果其值非循环继续条件表达式。如果其值非0,执行,执行3););否则,转至否则,转至4)。)。(3执行循环体语句组,并求解执行循环体语句组,并求解“循环变量增值表达式,循环变量增值表达式,然后转向然后转向2)。)。(4退出循环。退出循环。3阐明阐明(1)“变量赋初值变量赋初值”、“循环继续条件和循环继续条件和“循环变量增值部分均可缺省,循环变量增值部分均可缺省,1) “变量赋初值可省略,此时应在变量赋初值可省略,此时应在for语句语句前给循环控制变量赋初值。例:前给循环控制变量赋初值。例: k=1; for(;k=100;k+) sum+=k;2) “循环继续条件可省略,此时

43、系统认为其始循环继续条件可省略,此时系统认为其始终为真,循环将无限循环下去,除非循环体内终为真,循环将无限循环下去,除非循环体内有有break语句。语句。3) “循环变量增值可以省略,此时应在循环循环变量增值可以省略,此时应在循环体内修改体内修改循环变量,使循环能正常结束。例:循环变量,使循环能正常结束。例: for(k=1;k=100;) sum+=k; k+甚至全部缺省,但其间的分号不能省略。甚至全部缺省,但其间的分号不能省略。三个都省略时,因为缺少条件判断,循环将会三个都省略时,因为缺少条件判断,循环将会无限执行。无限执行。2当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。(3

44、)“循环变量赋初值表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式如逗号表达式)。例如,for(sum=0;i=100;i+) sum += i; for(sum=0,i=1;i=100;i+) sum += i;(4)“循环继续条件部分是一个逻辑量,除一般的关系或逻辑表达式外,也允许是数值或字符表达式。案例 求1100的累计和。main() int i,sum=0; /*将累加器sum初始化为0*/ for(i=1; i=100; i+) sum += i;/*实现累加*/ printf(sum=%dn,sum); 案例 求n的阶乘n!(n!=1*2*n)。main

45、() int i, n; long fact=1; /*将累乘器fact初始化为1*/ printf(“Input n: ”); scanf(“%d”, &n); for(i=1; i=n; i+) fact *= i;/*实现累乘*/ printf(%d ! = %ldn, n, fact); 程序运行情况如下:Input n: 5 5 ! = 1204.2.5 几种循环的比较几种循环的比较1.四种循环一般情况下可相互替代,但不提倡用四种循环一般情况下可相互替代,但不提倡用goto构成的构成的循环。循环。2.while和和do-while循环只有在条件第一次就不满足时才有区循环只有在

46、条件第一次就不满足时才有区别,别,for循环功能强,能用循环功能强,能用while循环完成得也能用循环完成得也能用for完成。完成。3.用用while和和do-while循环时循环时,循环变量初始化应该在循环变量初始化应该在while和和do-while语句之前完成语句之前完成,而而for语句循环变量的初始化可以放语句循环变量的初始化可以放在在(语句语句1)中中4. While,do-while循环和循环和for循环都可以用循环都可以用break跳出循环,跳出循环,用用continue结束本次循环,但对结束本次循环,但对goto和和if构成的循环则失效。构成的循环则失效。一个循环体内又包含另一

47、个完整的循环结构,称为循环嵌套。内层的循环中还可以嵌套循环,构成多重循环。三种循环可以相互嵌套。while ( ) while ( ) while ( ) for ( ; ; ) for ( ; ; ) for ( ; ; ) for ( ; ; ) do while( ); do do while ( ); while ( );while ( ) do while( ); 1. 1. 一个二重循环的例子一个二重循环的例子【例【例4.124.12】 打印六以内的乘法表。打印六以内的乘法表。 main()main() int i,j; int i,j; for (i=1;i=6;i+) for

48、(i=1;i=6;i+) for (j=1;j=6;j+) for (j=1;j=6;j+) printf(“%d printf(“%d* *%d=%2d”,i,j,i%d=%2d”,i,j,i* *j);j); printf(“n”); printf(“n”); 程序运行结果是:程序运行结果是:1 1* *1= 1 11= 1 1* *2= 2 12= 2 1* *3= 3 13= 3 1* *4= 4 14= 4 1* *5= 5 15= 5 1* *6= 6 6= 6 2 2* *1= 2 21= 2 2* *2= 4 22= 4 2* *3= 6 23= 6 2* *4= 8 24=

49、8 2* *5=10 25=10 2* *6=12 6=12 . . . . . .6 6* *1= 6 61= 6 6* *2=12 62=12 6* *3=18 63=18 6* *4=246 64=246 6* *5=30 65=30 6* *6=36 6=36 如果将程序中的内外层循环终止条件改成如果将程序中的内外层循环终止条件改成9 9,就可以打印,就可以打印九九乘法表。九九乘法表。2. 2. 嵌套循环的使用嵌套循环的使用1) 1) 内层循环必须完全包含在外层循环内层循环必须完全包含在外层循环中,二者不能使用相同的循环变量,不中,二者不能使用相同的循环变量,不能出现交叉。能出现交叉。2) 2) 循环嵌套的层数没有限制,但层数循环嵌套的层数没有限制,但层数太多,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论