C语言程序设计 流程控制语句.ppt

上传人:wuy****n92 文档编号:55134874 上传时间:2022-10-30 格式:PPT 页数:66 大小:132KB
返回 下载 相关 举报
C语言程序设计 流程控制语句.ppt_第1页
第1页 / 共66页
C语言程序设计 流程控制语句.ppt_第2页
第2页 / 共66页
点击查看更多>>
资源描述

《C语言程序设计 流程控制语句.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计 流程控制语句.ppt(66页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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

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

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

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

5、后续语句;如果值为零,则跳过而执行后续语句;如果值为零,则跳过语句语句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不能同时执行。不能同时执行。ifif语句改成语句改成if-elseif-else语句,如果游戏者猜语句,如果游戏者猜对了,就显示

6、对了,就显示”*Right*”*Right*”,若猜错,若猜错了,就显示了,就显示“*Wrong*”“*Wrong*”。举例例#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(*Right*n);printf(*Right*n);else else

7、printf(*Wrong*n);printf(*Wrong*n);if 语句的三种形式语句的三种形式(3)形式三:if (表达式1)语句1;else if (表达式2)语句2;else if (表达式3)语句3;.else if (表达式n)语句序列n;else 语句序列n+1;这种形式可以实现多分支选择的功能,既在多种这种形式可以实现多分支选择的功能,既在多种条件下的不同分支中选择一个分支来执行。条件下的不同分支中选择一个分支来执行。它的执行过程为:若表达式它的执行过程为:若表达式1的值为真(非零),的值为真(非零),则执行语句则执行语句1;否则,若表达式;否则,若表达式2的值为真,则执行

8、的值为真,则执行语句语句2;.若上述表达式的值都为若上述表达式的值都为0时,执行语句时,执行语句n+1.以下为流程图:以下为流程图:例如:表达式表达式1成立成立吗?真真(非非0)语句序列句序列1语句序列句序列2真真(非非0)语句序列句序列3真真(非非0)语句序列句序列n真真(非非0)表达式表达式2成立成立吗?假假(0)表达式表达式3成立成立吗?假假(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再扩充,即当游戏者猜错时,屏再扩充,即当游戏者猜错时,屏幕除显示幕除显

9、示“*Wrong*”“*Wrong*”外,还告诉游戏者是外,还告诉游戏者是猜大了还是猜小了。猜大了还是猜小了。举例例#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(*Right*n);printf(*Right*n);else if(guessma

10、gic)else if(guessmagic)printf(*Wrong*nToo high*n)printf(*Wrong*nToo high*n)else else printf(*Wrong*nToo printf(*Wrong*nToo low*n);low*n);说明明:以上三种格式中的表达式一般以上三种格式中的表达式一般为关系表达式或关系表达式或逻辑表达式只要表达式只要表达式的表达式的结果不果不为0,系,系统就就认为该表达式成立;相反表达式的表达式成立;相反表达式的结果果为0,系,系统认为该表达式不成立。表达式不成立。例如:例如:if(a=b&x=y)printf(“a=b,x=y

11、”);系系统对表达式的表达式的值进行判断,若行判断,若为真,按非零真,按非零处理,理,执行指定的行指定的语句;若句;若为假,按零假,按零处理。理。如:如:if(3)printf(“ok.”)表达式的表达式的值为3,按真,按真处理,是合法的,理,是合法的,执行行结果果输出出“ok.”C语言中它也可以是任意的数言中它也可以是任意的数值表达式。(包括整型,字符型,表达式。(包括整型,字符型,实型,指型,指针型)。型)。在每个表达式之后不在每个表达式之后不应有任何有任何标点符号,点符号,而在每个而在每个语句之后都要有句之后都要有“;”不要不要误认为else 语句和句和if语句是两个句是两个语句,句,e

12、lse 是是if语句的一部分。只能与句的一部分。只能与 if 配配对使用。使用。仅 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

13、wrong”);内是一个完整的复合内是一个完整的复合语句,不需另附分号。句,不需另附分号。例:输入两个实数,按代数值有小到大次序输出这两例:输入两个实数,按代数值有小到大次序输出这两个数。个数。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-4.1.2 if 语句的嵌套语句的嵌套 if语句的三种形式的语句体中可以是任意的c语言语句,包括if语句。如果if的语句体又是if语句,称为嵌套的if语句。内嵌的if语句既可以嵌套在if子句,也

14、可以在else子句中。例如:例如:例如:例如:if if (表达式(表达式(表达式(表达式1 1)if if (表达式(表达式(表达式(表达式2 2)语句序列语句序列语句序列语句序列1 1;else else 语句序列语句序列语句序列语句序列2 2;else else if if (表达式(表达式(表达式(表达式3 3)语句序列语句序列语句序列语句序列3 3;else else 语句序列语句序列语句序列语句序列4 4;例如:求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二

15、义性:二义性:if(表达式表达式1)if(表达式表达式2)语句序列语句序列2;else 语句序列语句序列3;应如何理解应如何理解?有两种理解方式有两种理解方式:if(表达式表达式1)if(表达式表达式2)语句序列语句序列2;else 语句序列语句序列3;if(表达式表达式1)if(表达式表达式2)语句序列语句序列2;else 语句序列语句序列3;语言规定:语言规定:else总是与它前面最近的且未曾配对的总是与它前面最近的且未曾配对的if配对。配对。if(表达式表达式1)if(表达式表达式2)语句序列语句序列2;else 语句序列语句序列3;if(表达式表达式1)if(表达式表达式2)语句序列语

16、句序列2;else 语句序列语句序列3;举例例 用嵌套用嵌套ifif if-else-if if-else-if结构。结构。#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(“*Right*n”);printf(“*Right*n”)

17、;else else printf(“*Wrong*”);printf(“*Wrong*”);if(guessmagic)if(guessmagic)printf(“Too printf(“Too high*n”);high*n”);else else printf(“Too printf(“Too low*n”);low*n”);.条件运算符条件运算符若若ifif语句中,在表达式为真和假时,且都只执行一个赋语句中,在表达式为真和假时,且都只执行一个赋值语句给同一个变量赋值时,可以用条件运算符来处值语句给同一个变量赋值时,可以用条件运算符来处理。理。条件运算符条件运算符?:?:条件表达式条件表

18、达式 exp1?exp2:exp3 exp1?exp2:exp3 exp1 exp1、exp2exp2和和exp3exp3都是表达式,其功能是:都是表达式,其功能是:先计算先计算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:

19、bc=(ab)?a:b表示:若表示:若abab,取,取a a的值,否则取的值,否则取b b的值作为该条件表达式的值作为该条件表达式的值。的值。说明:说明:1.条件运算符要求有三个操作对象。条件运算符要求有三个操作对象。2.条件运算符优先于赋值运算符,因此上面赋值表达条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给式的求解过程是先求解条件表达式,再将它的值赋给c.条件运算符的优先级别比关系运算符和算术运算符都条件运算符的优先级别比关系运算符和算术运算符都低低 max=(ab)?a:b 括号可以不要:括号可以不要:max=ab?a:b如果有:如果有:ab?

20、a:b+1相当于:相当于:ab?a:(b+1)3.条件运算符的结合方向为条件运算符的结合方向为“自右向左自右向左”,若有:,若有:ab?a:cd?c:d相当相当 于:于:ab?a:(cd?c:d)若:若:a=1,b=2,c=3,d=4 则条件表达式值为则条件表达式值为4。if语句,只有语句,只有if语句中内语句中内嵌的的语句为赋值语句(且两个分支都给同一个变量嵌的的语句为赋值语句(且两个分支都给同一个变量赋值)时才能代替赋值)时才能代替if语句。语句。如:如:if(ab)printf(“%d”,a);else printf(“%d”,a);无法用条件表达式代替无法用条件表达式代替但可以用下面语

21、句代替:但可以用下面语句代替:printf(“%d”,ab?a:b);/将条件表达式的值输出将条件表达式的值输出/5.条件表达式中,表达式条件表达式中,表达式1的类型可以与表达式的类型可以与表达式2和表达式和表达式3不同。如:不同。如:x?a:bx是整形变量是整形变量,若若x=0,则条件表达式的值为,则条件表达式的值为b表达式表达式2和表达式和表达式3的类型也可以不同。此时条件的类型也可以不同。此时条件表达式的值的类型为二者中较高的类型。如:表达式的值的类型为二者中较高的类型。如:如果如果xy,则表达式的值为则表达式的值为1.5。若。若xy,值应为值应为1,if-elseif-else。举例例

22、#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(“*Right*n”);printf(“*Right*n”);else else printf(“*Wrong*”);printf(“*Wrong*”);guessmagic?prin

23、tf(“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 case 常量表达式n:语句n default:语句n+1语句n+1表达式语句1语句2语句n常量表达式常量表达式2常量表达式常量表达式1常量表达式常量表达式n其它其它 if-else-if结构或嵌套的结构或嵌套的if语句可以解决多

24、分支的选择问题,语句可以解决多分支的选择问题,但若判断条件太多,关系就不够清晰,但若判断条件太多,关系就不够清晰,switch可解决。可解决。说明说明:1.switch后面括弧内的后面括弧内的“表达式表达式”和和case常量表达式,可常量表达式,可以是任何类型。以是任何类型。case后面的常量表达式的值相后面的常量表达式的值相等时,就执行此等时,就执行此case后面的语句,若所有的后面的语句,若所有的case中的常中的常量表达式的值都没有与表达式的值匹配的,就执行量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。后面的语句。case的常量表达式的值必须不相等,否则就会的常量

25、表达式的值必须不相等,否则就会出现矛盾的现象(对表达式的同一个值,有多种执行出现矛盾的现象(对表达式的同一个值,有多种执行方案)方案)【例】【例】从键盘输入不同的字母,显示不同的国家名称。从键盘输入不同的字母,显示不同的国家名称。#include#include main()main()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(“B

26、ritainn”);case c:printf(“Chinan”);case c:printf(“Chinan”);case d:printf(“Denmarkn”);case d:printf(“Denmarkn”);default:printf(“Japann”);default:printf(“Japann”);casecase后面的语句后,流程控制转移到下一个后面的语句后,流程控制转移到下一个casecase继续执行。继续执行。“case“case常量表达式常量表达式”只是起语句标号的作只是起语句标号的作用,并不在该处进行条件判断。用,并不在该处进行条件判断。注意,注意,casecas

27、e及及defaultdefault的位置直接影响到程序的位置直接影响到程序的运行的运行结果果。#include#include main()main()char ch;char ch;ch=getchar();ch=getchar();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:p

28、rintf(“Chinan”);case c:printf(“Chinan”);case d:printf(“Denmarkn”);case d:printf(“Denmarkn”);程序运行时,程序运行时,从键盘输入字母从键盘输入字母“a”“a”,显示,显示:America America Britai Britai China China Denmark Denmark Japan Japan如果输入字母如果输入字母“b”“b”,显示显示:“Japan”:“Japan”。Britain Britain China China Denmark Denmark JapanJapan如果输入如果

29、输入a a、b b、c c、d d以外的字母以外的字母,显示显示:Japan Japan5.case后面虽然包括一个以上语句,但可以不必用花后面虽然包括一个以上语句,但可以不必用花括弧括起来,会自动顺序执行本括弧括起来,会自动顺序执行本case后所有的语句。后所有的语句。case可以共用一组执行语句。如:可以共用一组执行语句。如:.case A:case B:case C:printf(“60n”);break;.值为值为A,B,或,或C时都执行同一组语句。时都执行同一组语句。2.break2.break语句语句breakbreak与与switchswitch联用,强迫控制立即退出联用,强迫控

30、制立即退出switchswitch防止从一个防止从一个casecase下落到另一个下落到另一个casecase中中防止因防止因casecase和和defaultdefault位置的改位置的改变而影响程而影响程序的运行序的运行结果果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:print

31、f(“Britainn”);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中都有

32、中都有breakbreak语句,句,那么,那么,casecase和和defaultdefault出出现的次序的次序 不会影响不会影响程序的运行程序的运行结果。果。4.2 循环结构语句循环结构语句循环是对同一程序重复执行若干次循环是对同一程序重复执行若干次,被重复执行的部分被重复执行的部分循环中止条件循环中止条件,循环体和循环中止条件组成循环语句循环体和循环中止条件组成循环语句.在语言中,可用以下语句实现循环:(1)用for语句。(2)用do-while语句。(3)用while语句。(4)用goto语句和if语句构成循环。4.2.1 使用使用if/goto构成循环构成循环goto为无条件转向条件

33、,他的一般形式:为无条件转向条件,他的一般形式:goto 语句标号语句标号语句功能:执行完本句后,无条件跳转到语句标号所语句功能:执行完本句后,无条件跳转到语句标号所标示的语句去执行。标示的语句去执行。语句标号也是标识符。语句标号和语句之间以语句标号也是标识符。语句标号和语句之间以“:”分隔。分隔。goto语句主要用途:语句主要用途:if语句一起构成循环语句。语句一起构成循环语句。2.从循环体内跳转到循环体外。从循环体内跳转到循环体外。求1100的累计和。根据已有的知识,可以用“1+2+100”来求解,但显然很繁琐。现在换个思路来考虑:首先设置一个累计器sum,其初值为0,利用sum+=n来计

34、算(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;printf(“sum=%dn”,sum);其中“loop:”为语句标号(格式:标号:语句行),其命名遵循标识符命名规则。goto语句格式:goto 标号,功能为:使系统转向标号所在的语句行执行。4.2.2 while循环循环也称为也称为“当型当型”循环,一般形式为:循环,一般形式为:while

35、(循环继续条件)循环体语句组;执行过程:执行过程:1)求解“循环继续条件”表达式。如果其值为非0,转2);否则转3)。2)执行循环体语句组,然后转1)。3)推出while循环。特点:特点:先判断表达式,后执行语句。先判断表达式,后执行语句。表达式表达式语句语句非非00 用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+;su

36、m+=i;则结果为:sum=5150少加了第一项的值1,多加了最后一项101表达式表达式i=1sum=sum+ii=i+1真真假假循环体循环体若包含若包含一个以一个以上语句,上语句,应用花应用花括号括括号括起来起来4.2.3 do-while循环循环1一般格式 do 循环体语句组;while(循环继续条件);/*本行的分号不能缺省*/当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。2执行过程执行过程如图5-3所示。(1)执行循环体语句组。(2)计算“循环继续条件”表达式。如果“循环继续条件”表达式的值为非 0(真),则转向(1)继续执行;否则,转向(3)。(3)退出循环。do-whi

37、le循环语句的特点是:先执行循环体语句组,然后再判断循环条件。do-while循环和while循环十分相似,他们的重要区别是:While循环的控制出现在循环体之前,只有while后面的表达式的值为非零时,才可能执行循环体;在do-while循环中,总是先执行一次循环体后再求表达式的值,因此,无论表达式的值为0或非0,循环体都至少要执行一次。案例案例 用do-while语句求解1100的累计和。main()int i=1,sum=0;/*定义并初始化循环控制变量,以及累计器*/do sum+=i;/*累加*/i+;while(i=100);/*循环继续条件:i=100*/printf(“sum=

38、%dn”,sum);说明:说明:while(表达式)后的分号不能丢,他表示(表达式)后的分号不能丢,他表示do-while 语句的结束。语句的结束。4.2.4 for循环循环1for语句的一般格式语句的一般格式 for(变量赋初值;循环继续条件;循环变量增值)循环体语句组;2for语句的执行过程语句的执行过程执行过程如图5-1所示。(1)求解“变量赋初值”表达式。(2)求解“循环继续条件”表达式。如果其值非0,执行(3);否则,转至(4)。(3)执行循环体语句组,并求解“循环变量增值”表达式,然后转向(2)。(4)退出循环。3说明说明(1)“变量赋初值”、“循环继续条件”和“循环变量增值”部分

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

40、其它表达式(如逗号表达式)。例如,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()int i,n;long fact=1;/*将累乘器fact初始化为1*/printf(“I

41、nput 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循环只有在条件第一次就不满足时才有区循环只有在条件第一次就不满足时才有区别,别,for循环功能强,能用循环功能强,能用while循环完成得也能用循环完成得也能用for完成。完成。while和和do-w

42、hile循环时循环时,循环变量初始化应该在循环变量初始化应该在while和和do-while语句之前完成语句之前完成,而而for语句循环变量的初始化可以放语句循环变量的初始化可以放在在(语句语句1)中中4.While,do-while循环和循环和for循环都可以用循环都可以用break跳出循环,跳出循环,用用continue结束本次循环,但对结束本次循环,但对goto和和if构成的循环则失效。构成的循环则失效。4.2.6 循环的嵌套循环的嵌套一个循环体内又包含另一个完整的循环结构,称为循环嵌套。内层的循环中还可以嵌套循环,构成多重循环。三种循环可以相互嵌套。while()while()whil

43、e()for(;)for(;)for(;)for(;)do while();do do while();while();while()do while();1.1.一个二重循环的例子一个二重循环的例子【例【例4.124.12】打印六以内的乘法表。打印六以内的乘法表。main()main()int int i,j;i,j;for(i=1;i=6;i+)for(i=1;i=6;i+)for(j=1;j=6;j+)for(j=1;j=6;j+)printf printf(“%d*%d=%2d”,i,j,i*j);(“%d*%d=%2d”,i,j,i*j);printf printf(“n”);(“n

44、”);程序运行结果是:程序运行结果是:1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 .6*1=6 6*2=12 6*3=18 6*4=246 6*5=30 6*6=36 6*1=6 6*2=12 6*3=18 6*4=246 6*5=30 6*6=36 如果将程序中的内外层循环终止条件改成如果将程序中的内外层循环终止条件改成9 9,就可以打印,就可

45、以打印九九乘法表。九九乘法表。2.2.嵌套循环的使用嵌套循环的使用1)1)内内层循循环必必须完全包含在外完全包含在外层循循环中,二者不能使用相同的循中,二者不能使用相同的循环变量,不量,不能出能出现交叉。交叉。2)2)循循环嵌套的嵌套的层数没有限制,但数没有限制,但层数数太多,可太多,可读性性变差。差。3)3)为了使嵌套的了使嵌套的层次关系清晰明了,次关系清晰明了,建建议采用采用缩排格式排格式书写程序。写程序。4.2.7 break语句和语句和continue语句语句1.break1.break语句语句语句语句breakbreak语句有两种用途。一种是用在语句有两种用途。一种是用在switch

46、switch中,强行控制中,强行控制立即退出立即退出switchswitch,第二种是用在循环中,强行控制立即退,第二种是用在循环中,强行控制立即退出循环。出循环。【例【例4.134.13】breakbreak语句的应用示例。语句的应用示例。main()main()int int t;t;for(t=0;t100;t+)for(t=0;t100;t+)printf printf(“%d”,t);(“%d”,t);if(t=10)break;if(t=10)break;breakbreak用在循环中,只能退出它所在的那一层循环用在循环中,只能退出它所在的那一层循环,即,即 for(.)for(.

47、).while(.)while(.).if(.)if(.)breakbreak;do do .if()if()breakbreak;while(.);while(.);.不能期望用不能期望用breakbreak从最内层循环一下子退出最外层循环从最内层循环一下子退出最外层循环2.contiune 语句语句continuecontinue语句句只用在循只用在循环中中,其作用是跳,其作用是跳过其后面的其后面的语句,直接将控制句,直接将控制转移到下一移到下一轮循循环。形象地。形象地说,continuecontinue是将它后面是将它后面的循的循环体部分体部分“短路短路”,直接直接进入循入循环条件条件测

48、试。注意:执行注意:执行注意:执行注意:执行contiune contiune 语句语句并没有使整个循环中止。语句语句并没有使整个循环中止。语句语句并没有使整个循环中止。语句语句并没有使整个循环中止。for(.)for(.).if(.)if(.).continuecontinue;.【例】【例】continuecontinue语句的应用示例。语句的应用示例。main()main()int i=1;int i=1;while(i=100)while(i=100)if(i%3!=0)if(i%3!=0)i+;i+;continue;continue;printf(“%d”,i);printf(“%

49、d”,i);i+;i+;printf(“n”);printf(“n”);本章程序举例判断某一年是否判断某一年是否为闰年年举例例判断某一年是否为闰年的规则:如判断某一年是否为闰年的规则:如果某一年份能被果某一年份能被4整除而不能被整除而不能被100整除,该年份为闰年,如果某年份整除,该年份为闰年,如果某年份能被能被4整除,且又能被整除,且又能被400整除,该整除,该年份也是闰年。除此之外,都不是年份也是闰年。除此之外,都不是闰年。闰年。例:判断某一年是否为闰年。year被4整除假leap=0真year被100整除假leap=1真year被400整除假leap=0真leap=1leap真输出“闰年

50、”假输出“非闰年”(year%4=0&year%100!=0)|(year%400=0)main()int year;scanf(“%d”,&year);if(year%4=0&year%100!=0)|(year%400=0)printf(“%d is a lead yearn”,year);else printf(“%d is not a lead yearn”,year”);例例2:判断:判断m是否是素数是否是素数问题分析:令问题分析:令k=m-1,让让m被被2到到k除,如果不能被其中的任除,如果不能被其中的任何一个整数整除,则何一个整数整除,则m为素数。数学证明:为素数。数学证明:k=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com