清华大学C语言谭浩强[1]课件_第1页
清华大学C语言谭浩强[1]课件_第2页
清华大学C语言谭浩强[1]课件_第3页
清华大学C语言谭浩强[1]课件_第4页
清华大学C语言谭浩强[1]课件_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

1、 3.1结构化程序设计的思想及流程图结构化程序设计的思想及流程图 3.2结构化程序设计的三种基本结构结构化程序设计的三种基本结构 3.3 几种转移控制语句几种转移控制语句 3.4 C程序语句程序语句 3.5 C程序举例程序举例 3.1.1结构化程序设计思想结构化程序设计思想 3.1.2流程图流程图 “结构化程序设计结构化程序设计”设计思想的核心是设计思想的核心是“逐步求逐步求精精”,即将可执行程序的编制分为若干步,第一,即将可执行程序的编制分为若干步,第一步编制出的程序抽象程度最高,第二步编制出的步编制出的程序抽象程度最高,第二步编制出的程序抽象程度有所降低,程序抽象程度有所降低,最后一步编出

2、的,最后一步编出的程序即为可执行程序。程序即为可执行程序。 结构化程序设计方法又称为结构化程序设计方法又称为“自顶向下自顶向下”法或法或“逐步求精逐步求精”法。法。 流程图是用一些流程图是用一些图框表示各种操图框表示各种操作作 。 美国国家标准化美国国家标准化协会(协会(ANSI)规)规定了一些常用的定了一些常用的流程图符号(如流程图符号(如图图3-1所示),已所示),已为世界各国程序为世界各国程序工作者普遍采用。工作者普遍采用。(d)执行框执行框(b) 输入输出框输入输出框(c)判断框判断框(a)(a)起止框起止框(e)连接点连接点(f)流程线流程线 图图3-1 ANSI规定的一些常用的流程

3、图符号规定的一些常用的流程图符号 3.2.1顺序结构顺序结构 3.2.2选择结构选择结构 3.2.3循环控制循环控制 3.2.4循环的嵌套循环的嵌套 3.2.5几种循环的比较几种循环的比较(a)顺序结构 S1S2S1S2条件条件S1图3-2 结构化程序设计的三种基本控制结构 (b)选择结构 (c)循环结构 顺序结构、选择结构、循环结构三种基本结构的示顺序结构、选择结构、循环结构三种基本结构的示意如图意如图3-2所示。所示。 顺序结构是程序中的语句按照书写的顺序,自上顺序结构是程序中的语句按照书写的顺序,自上而下地执行。如图而下地执行。如图3-2(a)所示,)所示,S1和和S2是语句是语句或语句

4、序列,或语句序列,S1、S2依次被执行,但只有依次被执行,但只有S1执执行完时,行完时,S2才被执行。这种结构的特点是程序总才被执行。这种结构的特点是程序总是从第是从第1条语句开始执行,依次执行完所有的语条语句开始执行,依次执行完所有的语句后结束程序。因此顺序结构用来描述依次执行句后结束程序。因此顺序结构用来描述依次执行的操作运算。的操作运算。 例例3.1输入一个三位整数,依次输出该数的正(负)号和输入一个三位整数,依次输出该数的正(负)号和百位、十位、个位数字。百位、十位、个位数字。#includemain() char c1,c2,c3,c4; int x; scanf(%d,&x); /

5、* 输入一个三位的整数 */ c4=x=0?+:-; /* 将x的符号存入c4 */ x=abs(x); /* 求三位整数的绝对值 */ c3=x%10+48; /* x%10获得个位数字,加48后转换为对应的字符 */ x=x/10; /* 获得x的前两位 */ c2=x%10+48; /* x%10获得十位数字,加48后转换为对应的字符 */ c1=x/10+48; /* x/10获得百位数字,加48后转换为对应的字符 */ printf(%cn%cn%cn%cn,c4,c1,c2,c3); 在运行时,从键盘输入:在运行时,从键盘输入: -345 则输出为:则输出为: - 3 4 5 接着

6、从键盘输入:接着从键盘输入: 678 则输出为:则输出为: + 6 7 8例例3.2输入三角形的三边长,求三角形面积。输入三角形的三边长,求三角形面积。 分析:只要给出三角形的三边分析:只要给出三角形的三边a、b、c,即可根据公式,即可根据公式area=s(s-a)(s-b)(s-c)1/2计算该三角形的面积,其中计算该三角形的面积,其中s=(a+b+c)/2。#include main() float a,b,c,s,area; printf(please input three border of the triangle: ); scanf(%f,%f,%f,&a,&b,&c); /*输

7、入三角形的三条边输入三角形的三条边*/ s=1.0/2*(a+b+c); /*求三角形三边和的一半求三角形三边和的一半*/ area=sqrt(s*(s-a)*(s-b)*(s-c); /*计算三角形的面积计算三角形的面积*/ printf(a=%-7.2fb=%-7.2fc=%-7.2fs=%-7.2fn,a,b,c,s); printf(area=%-7.2fn,area); 该程序的运行结果如下该程序的运行结果如下:please input trigon of three border:3,4,5 a=3.00 b=4.00 c=5.00 s=6.00area=6.00 选择结构有三种形

8、式:单分支结构、双分支结构、选择结构有三种形式:单分支结构、双分支结构、多分支结构。多分支结构。 C语言中能够实现选择结构设计的语句有语言中能够实现选择结构设计的语句有if语句和语句和switch语句,其中语句,其中switch语句可以用语句可以用if语句来替语句来替代。代。下面是一个最常用的双分支的例子:下面是一个最常用的双分支的例子:if(m0) n=-1;else n=1;上述程序段表示:如果上述程序段表示:如果m小于小于0,则,则n等于等于-1,否则,否则n等于等于1。 C语言提供了三种形式的语言提供了三种形式的if语句:语句:1)if单分支选择语句单分支选择语句if语句。语句。2)双

9、向分支语句)双向分支语句ifelse语句。语句。3)if多向分支语句多向分支语句else if语句。语句。 if语句语句的语义是:的语义是:如果表达如果表达式的值为式的值为真,则执真,则执行其后的行其后的语句,否语句,否则不执行则不执行该语句。该语句。 if语句语句的流程图的流程图如图如图3-3所示。所示。假(假(0)真(非真(非0)if语句序列语句序列表达式表达式图图3-3 if语句的流程图语句的流程图 if语句的功语句的功能是:首先能是:首先计算计算的值,当的值,当的值的值为真(非为真(非0)时,执行时,执行;否;否则,表达式则,表达式值为假(值为假(0),),执行后面的执行后面的命令。命

10、令。例例3.3求两个数中的较大者并输出。求两个数中的较大者并输出。main() int m,n,max; printf(n input two numbers:); scanf(%d%d,&m,&n); /*输入两个整数输入两个整数*/ max=m; /*将将m的值赋给的值赋给max*/ if(max0) a=0; else a=-11; 假(0)真(非0)if语句1语句2条件表达式 图3-4 ifelse语句的流程图 ifelse语句的流程图如图语句的流程图如图3-4所示。所示。 ifelse语句也可语句也可以表示为:以表示为: if(测试表达式测试表达式) 语句语句1; 语句语句2; el

11、se 语句语句n; 语句语句n+1; 例如:例如: if(a0) b=a+b; a=0; c+; else c=0; b=0; 当有多个分当有多个分支选择时,支选择时,可以采用如可以采用如右所示的多右所示的多向分支语句向分支语句来实现:来实现:if(表达式表达式1) 语句语句1;else if(表达式表达式2) 语句语句2;else if(表达式表达式3) 语句语句3; else if(表达式表达式n) 语句语句n; else 语句语句n+1;下一条语句;下一条语句; 这种这种if语句在执语句在执行时,依次判行时,依次判断表达式的值,断表达式的值,当出现某个值当出现某个值为真时,则执为真时,则

12、执行其对应的语行其对应的语句。然后跳到句。然后跳到整个整个if语句之外语句之外继续执行程序。继续执行程序。如果所有的表如果所有的表达式均为假,达式均为假,则执行语句则执行语句n+1。然后继续执行然后继续执行后续程序。多后续程序。多向分支语句的向分支语句的流程图如图流程图如图3-5所示。所示。表达式表达式3语句语句n+1表达式表达式1真真真真假假假假假假表达式表达式2语句语句1语句语句2语句语句n真真图图3-5 else if 多分支语结构流程图多分支语结构流程图 例如:例如: if(a=1) c=A; else if(a=2) c=B; else if(a=3) c=C; else if(a=

13、4) c=D; else c=E; 使用分支结构语句时应注意以下几个问题:使用分支结构语句时应注意以下几个问题:(1)三种形式的)三种形式的if语句中,在语句中,在if关键字之后均为表达关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但式。该表达式通常是逻辑表达式或关系表达式,但也可以是其他表达式,如赋值表达式等,甚至也可也可以是其他表达式,如赋值表达式等,甚至也可以是一个变量。以是一个变量。(2)在)在if语句中,条件判断表达式必须用括号括起来。语句中,条件判断表达式必须用括号括起来。(3)在)在if语句的三种形式中,所有的语句应为单个语语句的三种形式中,所有的语句应为单个语句,

14、如果要想在满足条件时执行一组(多个)语句,句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用大括号则必须把这一组语句用大括号“”和和“”括起来组括起来组成一个复合语句。但要注意的是在成一个复合语句。但要注意的是在“”之后不能再之后不能再加分号。加分号。 例例3.4 输入一个字符,如果是数字则输出输入一个字符,如果是数字则输出A,如果是大写字母则输出如果是大写字母则输出B;如果是小写字母则输出;如果是小写字母则输出C;如果是空格则输出;如果是空格则输出D;如果是回车换行符则输;如果是回车换行符则输出出E,是其他符号时则输出,是其他符号时则输出F。main() char c; sc

15、anf(%c,&c); if(0=c&c cn,c,A); /* 如果输入的是数字如果输入的是数字,则输出字符则输出字符A */ else if (A=c&c %cn,c,B); /* 如果输入的是大写字母如果输入的是大写字母,则输出字符则输出字符B */ else if (a=c&c %cn,c,C); /* 如果输入的是小写字母如果输入的是小写字母,则输出字符则输出字符C */ else if (c= ) printf(c=%c- %cn,c,D); /* 如果输入的是空格如果输入的是空格,则输出字符则输出字符D */ else if (c=n) printf(c=%c- %cn,c,E)

16、; /* 如果输入的是回车换行如果输入的是回车换行,则输出字符则输出字符E */ else printf(c=%c- %cn,c,F); /* 以上都不是以上都不是,则输出字符则输出字符F */ 下面是输入一个字符后程序的运行结果:下面是输入一个字符后程序的运行结果: 5 c=5- A H c=H- B & c=&- F 上述程序中的前上述程序中的前4个个“ifelse语句语句”结构中结构中else后后面的语句又是一个面的语句又是一个“if else语句语句”,这种结构在,这种结构在C语言中称为多层嵌套的语言中称为多层嵌套的if else语句。语句。 在嵌套中,在嵌套中,if和和else总是成

17、对出现的,所以在设计嵌总是成对出现的,所以在设计嵌套的套的“if else语句语句”时,要弄清楚时,要弄清楚else和前面的哪和前面的哪个个if相配对。相配对。 C语言规定语言规定: “else总是和前面最近的总是和前面最近的if相配对相配对”。 例如,下面的程序段:例如,下面的程序段: if(a=c&c=z) if(c=f)m=1; else m=0; 如果想让如果想让else 和第一个和第一个if相配对,只需给上面的程序相配对,只需给上面的程序段加上大括号即可。段加上大括号即可。 例如,上面的语句可以改写成下面的程序段:例如,上面的语句可以改写成下面的程序段: if(a=c&c=z)if(

18、c=f)m=1; else m=0; switch语句是语句是多向分支选择多向分支选择语句,即根据语句,即根据多个条件表达多个条件表达式的值,从多式的值,从多个操作中选择个操作中选择一个满足条件一个满足条件的操作来执行。的操作来执行。 其语句格式如其语句格式如右所示:右所示:switch(表达式表达式) case常量表达式常量表达式1: 语句语句1;break; case常量表达式常量表达式2: 语句语句2;break; case常量表达式常量表达式n: 语句语句n;break; default: 语句语句n+1;break; switch语句中的语句中的“表达式表达式”可以是任何类型,常用可

19、以是任何类型,常用的是字符型或整型表达式。的是字符型或整型表达式。 “常量表达式常量表达式”是由常量组成的表达式,所有的常是由常量组成的表达式,所有的常量表达式的值必须互不相同。量表达式的值必须互不相同。 break语句用来跳出语句用来跳出switch语句,若语句语句,若语句i后面没有后面没有break语句,则不用判断常量表达式语句,则不用判断常量表达式i+1,继续执行,继续执行语句语句i+1,这样有可能影响程序的执行结果,因此一,这样有可能影响程序的执行结果,因此一般情况下,般情况下,break语句不要省略。语句不要省略。 switch语句的执行过程是:首先判断表达式的值;语句的执行过程是:

20、首先判断表达式的值;然后在常量表达式然后在常量表达式i中找到与表达式匹配的常量表达中找到与表达式匹配的常量表达式,并执行该常量表达式后面对应的语句;若没有式,并执行该常量表达式后面对应的语句;若没有找到与表达式匹配的常量表达式,则执行找到与表达式匹配的常量表达式,则执行default语语句后面的语句句后面的语句n+1。default语句可以省略。语句可以省略。计算表达式计算表达式=常量表达式常量表达式2=常量表达式常量表达式n语句语句2语句语句n假假假假假假真真真真真真语句语句1=常量表达式常量表达式1语句语句n+1 图图3-6 switch语句的流程图语句的流程图 switch语句的流程图如

21、图语句的流程图如图3-6所示所示.例例3.5编写一个程序,用来显示某一星期。编写一个程序,用来显示某一星期。#includemain() int x; printf(please input integer number(17):-); scanf(%d,&x); /*输入一个输入一个17之间的整数之间的整数*/ switch (x) /*输出与所输入的输出与所输入的x值相对应的日期名称值相对应的日期名称*/ case 1:printf(Mondayn); case 2:printf(Tuesdayn); case 3:printf(Wednesdayn); case 4:printf(Thu

22、rsdayn); case 5:printf(Fridayn); case 6:printf(Saturdayn); case 7:printf(Sundayn); default:printf( you are wrong!n); 下面是上述程序的运行情况。下面是上述程序的运行情况。please input integer number(17):- 4 ThursdayFridaySaturdaySundayyou are wrong!说明:说明:u在在switch语句中,语句中,“case 常量表达式常量表达式”只相当于一只相当于一个语句标号,表达式的值和某标号相等则转向该标个语句标号,表

23、达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出号执行,但不能在执行完该标号的语句后自动跳出整个整个switch 语句。语句。u所以这道程序出现了输入所以这道程序出现了输入4之后,执行了之后,执行了case 4以及以及后面的所有语句,输出了后面的所有语句,输出了“Thursday”及以后的所有及以后的所有单词的情况。单词的情况。 u为了避免输出不应有的结果,可在每一个为了避免输出不应有的结果,可在每一个case语句语句之后增加一个之后增加一个break语句,使每一次执行之后均可跳语句,使每一次执行之后均可跳出出switch语句。语句。 因此上述因此上述switch结构

24、可改为:结构可改为:switch(x) case 1:printf(Mondayn);break; case 2:printf(Tuesdayn); break; case 3:printf(Wednesdayn); break; case 4:printf(Thursdayn); break; case 5:printf(Fridayn); break; case 6:printf(Saturdayn); break; case 7:printf(Sundayn); break; default:printf( you are wrong!n); 这样一来,如果输入的是这样一来,如果输入的是

25、4,则只输出,则只输出“Thursday”。注意:注意:break语句只能跳出一层,如:语句只能跳出一层,如:main() int x=1, y=0; switch(x) case 1: switch(y) case 0: printf(*1*n); break; case 1: printf(*2*n); break; case 2: printf (*3*n); 在程序中,可以看到在程序中,可以看到switch语句中又有一个语句中又有一个switch语句,这种情况属于语句,这种情况属于switch的嵌套。的嵌套。 程序在执行时,首先,根据程序在执行时,首先,根据x的值,找到其标号处,的值,

26、找到其标号处,此处为此处为1,而,而case 1后面又是一个后面又是一个switch语句,根语句,根据据y的值,找到其标号处为的值,找到其标号处为0。 在输出在输出“*1*”后,跳出内层的后,跳出内层的switch语句,接语句,接着执行外层着执行外层switch语句后面的语句。语句后面的语句。 程序的最后运行结果为:程序的最后运行结果为:*1*3*u使用使用switch语句时应注意以下几点:语句时应注意以下几点:(1)在)在case后的各常量表达式不能出现相同的值,后的各常量表达式不能出现相同的值,否则系统不知道该执行哪个否则系统不知道该执行哪个case,会出现错误,会出现错误(2)在)在ca

27、se后,允许有多个语句,可以不用后,允许有多个语句,可以不用“”和和“”括起来。括起来。(3)各)各case和和default子句的先后顺序可以变动,子句的先后顺序可以变动,而不会影响程序执行结果。例如,可以先在程序而不会影响程序执行结果。例如,可以先在程序中出现中出现“default:”,再出现,再出现“case 5:”,然后是然后是“case 2:”等。等。(4)default子句可以省略不用。子句可以省略不用。(5)多个)多个case可以共用一组执行语句,例如:可以共用一组执行语句,例如: case b: case c:printf(hello!); 1.while语句语句 2.dowh

28、ile语句语句 3.for语句语句 while语句也称为语句也称为“当当”型循环控制语句,直观地型循环控制语句,直观地讲就是根据条件表达式的值,决定循环体内语句讲就是根据条件表达式的值,决定循环体内语句的执行次数。其语句格式如下:的执行次数。其语句格式如下: while(表达式表达式) 语句语句; 其中的其中的“表达式表达式”是循环条件是循环条件;“语句语句”是是while的的循环体。循环体。 while语句的执行过程是:计算表达式的值,当值语句的执行过程是:计算表达式的值,当值为真(非为真(非0)时,执行循环体语句。特点是先判)时,执行循环体语句。特点是先判断后执行。断后执行。0语句语句表达

29、式表达式非非0 图图3-7 while语句流程图语句流程图 while语句的流程图如图语句的流程图如图3-7所示。所示。例例3.6从键盘上连续输入若干个字符,并且以回车从键盘上连续输入若干个字符,并且以回车换行符作为结束标记,统计字符的个数,其中不包换行符作为结束标记,统计字符的个数,其中不包括回车键。括回车键。#include main() int n=0; char c; printf(Please input a string:n); while(getchar()!=n) /* 输入的字符不是回车符时统计输入的字符不是回车符时统计 */ n+; printf(The character

30、s number of the string is %d.,n); 程序的运行情况为:程序的运行情况为: Please input a string: Helloworld The characters number of the string is 10. 本例程序中的循环条件为本例程序中的循环条件为getchar()!=n,其意义,其意义是:只要从键盘输入的字符不是回车就继续循环。是:只要从键盘输入的字符不是回车就继续循环。循环体循环体n+完成对输入字符个数的计数。从而程完成对输入字符个数的计数。从而程序实现了对输入一行字符的字符个数的计数。序实现了对输入一行字符的字符个数的计数。例例3.

31、7用用while语句来实现语句来实现1*2*3*10的乘积。的乘积。#includemain() long int i=1,mul=1; while(i=10)/*用用while 语句求语句求1*2*3*10的乘积的乘积*/ mul=mul*i; i+; printf(n%dn, mul); 该程序的运行结果如下:该程序的运行结果如下:注意:在循环体中应有使循环趋向结束的语句,否则会注意:在循环体中应有使循环趋向结束的语句,否则会无限制地运行下去,在无限制地运行下去,在C C语言中这种无限运行的情况称为语言中这种无限运行的情况称为“死循环死循环”。例如,在上面的例子中循环结束的条件是。例如,在

32、上面的例子中循环结束的条件是“i=10”i=10”,所以在循环体中使用了使循环结束的语句,所以在循环体中使用了使循环结束的语句“i+”i+”,从而达到了此目的。,从而达到了此目的。 使用使用while语句时应注意以下几点:语句时应注意以下几点:(1)while语句中的表达式可以是任何类型,常语句中的表达式可以是任何类型,常用的是关系表达或逻辑表达式,只要表达式的用的是关系表达或逻辑表达式,只要表达式的值为真(非值为真(非0)即可继续循环。)即可继续循环。(2)循环体如包括有一个以上的语句,则必须用)循环体如包括有一个以上的语句,则必须用括起来,组成复合语句。如果没有加大括号括起来,组成复合语句

33、。如果没有加大括号,则则while语句范围只到语句范围只到while后面的第一个分号后面的第一个分号处。处。udowhile语句的一般形式为:语句的一般形式为: do 语句语句; while(表达式表达式);这个循环与这个循环与while循环的不同在于:它先执行循环循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真,如果为中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。而真则继续循环;如果为假,则终止循环。而while语句是先进行条件判断,满足条件才去执行循环语句是先进行条件判断,满足条件才去执行循环体。因此,体。因此,dowhile循环至少要执行一次

34、循环循环至少要执行一次循环语句;而语句;而while语句有可能一次也不执行。语句有可能一次也不执行。0非非0语句语句表达式表达式 图图3-8 dowhile语句流程图语句流程图 dowhile语句的流程图如图语句的流程图如图3-8所示。所示。例例3.8用用dowhile语句求语句求1*2*3*10的乘积。的乘积。#includemain() long int i,mul=1; i=1; do/*用用dowhile语句求语句求1*2*3*10的乘积的乘积*/ mul = mul *i; i+; while(i=10); printf(%ldn, mul);该程序的运行结果如下:该程序的运行结果如

35、下:在使用在使用dowhile语句编写程序时,应注意以下语句编写程序时,应注意以下几点:几点:(1)条件表达式可以是任何类型,常用的是关系)条件表达式可以是任何类型,常用的是关系型或逻辑型表达式。要注意表达式必须用括号括型或逻辑型表达式。要注意表达式必须用括号括住,且住,且“while(表达式表达式)”后面必须有一个分号。后面必须有一个分号。(2)若循环体中又含有)若循环体中又含有“循环语句循环语句”,则称为嵌,则称为嵌套的循环语句,有时也称为多重循环。套的循环语句,有时也称为多重循环。(3)在书写格式上,建议按上述格式书写,)在书写格式上,建议按上述格式书写,do和和while对齐,以便识别

36、反复执行的操作。对齐,以便识别反复执行的操作。 for语句的一般形式为:语句的一般形式为: for(表达式表达式1;表达式表达式2;表达式表达式3) 语句语句; 其执行过程为:先计算表达式其执行过程为:先计算表达式1;再计算表达式;再计算表达式2,若其值为真(非若其值为真(非0),则执行),则执行for语句中指定的内语句中指定的内嵌语句;然后再计算表达式嵌语句;然后再计算表达式3;接着再计算表达;接着再计算表达式式2,若其值为假(,若其值为假(0),则结束循环,执行),则结束循环,执行for语语句下面的一条语句。句下面的一条语句。0非非0计算表达式1计算表达式2语句计算表达式3图3-9 for

37、语句流程图for语句的流程图如图语句的流程图如图3-9所示。所示。 常见的常见的for语句形式如下所示:语句形式如下所示: for(循环变量赋初值循环变量赋初值;循环条件循环条件;循环变量增值循环变量增值) 语句语句; 一个关于一个关于for语句的例子:语句的例子: mul=1; for(i=1;i=10;i+) mul=mul*i; for语句的一般形式可改写成如下所示的语句的一般形式可改写成如下所示的while循环的形循环的形式:式: 表达式表达式1; while(表达式表达式2) 语句语句; 表达式表达式3; 对于上述对于上述for语句的程序段也可以用语句的程序段也可以用while语句来

38、语句来改写,即:改写,即:i=1;mul=1;while(i=10) mul=mul*i; i+;u使用使用for循环时需要注意以下几点:循环时需要注意以下几点:(1)for循环中的循环中的“表达式表达式1”即循环变量赋初值、即循环变量赋初值、“表达式表达式2”即循环条件、即循环条件、“表达式表达式3”即循环变量增量,三者都是可即循环变量增量,三者都是可选项,选项, 可以缺省,但是中间的两个分号可以缺省,但是中间的两个分号“;”不能缺省。不能缺省。例如:例如:for( ; ;)语句语句; 相当于:相当于:while(1)语句语句;(2)省略)省略“表达式表达式1”,表示不对循环控制变量赋初值。

39、这,表示不对循环控制变量赋初值。这种情况在种情况在C语言中也是允许的,但是,必须在语言中也是允许的,但是,必须在for语句之前语句之前给循环变量赋初值。例如:给循环变量赋初值。例如:i=1;mul=1;for(;i10)break; mul=mul*i; 相当于:相当于:i=1;mul=1;while(1) if(i10)break; mul=mul*i; i+;(4)省略)省略“表达式表达式3”,则不能对循环控制变量进行操作,此,则不能对循环控制变量进行操作,此时为了保证循环正常结束,需在语句体中加入修改循环控制时为了保证循环正常结束,需在语句体中加入修改循环控制变量的语句。例如:变量的语句

40、。例如:mul=1;for(i=1;i=10;) mul=mul*i; i+;(5)可以省略)可以省略“表达式表达式1”和和“表达式表达式3”,只有表达式,只有表达式2,即只,即只给出循环条件。此种情况下,完全等同于给出循环条件。此种情况下,完全等同于while语句,例如:语句,例如:i=1;mul=1;for(;i=10;) mul=mul*i; i+; 相当于:相当于:i=1;mul=1;while(i=10) mul=mul*i; i+; (6)表达式)表达式1可以是设置循环变量初值的赋值表达式,也可可以是设置循环变量初值的赋值表达式,也可以是其他表达式。例如:以是其他表达式。例如:i=

41、0;for(mul=1;i=10;i+)mul=mul*i;(7)表达式)表达式2可以是任何类型的,但一般是关系表达式或逻可以是任何类型的,但一般是关系表达式或逻辑表达式,只要其值非零,就继续执行循环体。例如:辑表达式,只要其值非零,就继续执行循环体。例如:for(i=0;getchar()!=n;i+) ;说明:只有分号说明:只有分号“;”;”组成的语句称为空语句,表示什组成的语句称为空语句,表示什么也不执行。么也不执行。例例3.9从键盘上输入从键盘上输入5个数,求其平均值。个数,求其平均值。#includemain() int a; float b,sum; for(a=1,sum=0.0

42、;a6;a+) printf(please input number:n); scanf(%f,&b); /*从键盘上输入从键盘上输入5个数个数*/ sum+=b; /*求输入的求输入的5个数的加和个数的加和*/ printf(average=%fn,sum/5); /*求求5个数的平均值,并将其输出个数的平均值,并将其输出*/该程序的运行情况如下:该程序的运行情况如下:please input number:34.4 please input number:28.1 please input number:56.2 please input number:71.9 please input

43、number:32.7 average=44.660001如果一个循环体中又含有另一个完整的循环结构,如果一个循环体中又含有另一个完整的循环结构,则称为循环的嵌套。则称为循环的嵌套。当内嵌的循环中含有另一个嵌套的循环时,称为当内嵌的循环中含有另一个嵌套的循环时,称为多重循环。多重循环。 例例3.10循环嵌套的举例循环嵌套的举例 #includemain() int m, n, k; printf(m n kn); for(m=0; m2; m+) /*用三重循环输出用三重循环输出m、n、k的的8个组合值个组合值*/ for(n=0; n2; n+) for(k=0; k2; k+) print

44、f(%d %d %dn, m, n, k);u该循环的运行效果如下:该循环的运行效果如下:m n k0 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1uwhile循环、循环、dowhile循环和循环和for循环三种结构可以互相循环三种结构可以互相嵌套。例如:嵌套。例如: while() do for(;) while(); 使用循环的嵌套编写程序时应注意以下几点问题:使用循环的嵌套编写程序时应注意以下几点问题:(1)外层循环执行一次,内层循环执行一轮。)外层循环执行一次,内层循环执行一轮。(2)内层循环控制直接引入外层循环的相关变量。)内层循环控制直接引入外层循环

45、的相关变量。(3)内循环不要随意改变外循环控制的变量。)内循环不要随意改变外循环控制的变量。(4)可以使用各类循环语句相互嵌套以解决复杂问题。)可以使用各类循环语句相互嵌套以解决复杂问题。第一、几种循环都可以用来处理同一个问题,一般第一、几种循环都可以用来处理同一个问题,一般情况下它们之间是可以互相代替的。情况下它们之间是可以互相代替的。第二、第二、while和和dowhile循环的循环体中应包括使循环的循环体中应包括使循环趋于结束的语句。在三种循环体中,循环趋于结束的语句。在三种循环体中,for语句语句功能最强。功能最强。第三、用第三、用while和和dowhile循环时,循环变量初始循环时

46、,循环变量初始化的操作应在化的操作应在while和和dowhile语句之前完成,语句之前完成,而而for语句可以在表达式语句可以在表达式1中实现循环变量的初始中实现循环变量的初始化。化。 3.3.1 break语句语句 3.3.2 continue语句语句 3.3.3 break语句与语句与continue语句的区别语句的区别 3.3.4 goto语句语句 3.3.5 return语句语句 break语句的一般形式为:语句的一般形式为:break; 通常情况下,在循环语句中通常情况下,在循环语句中break语句总是和语句总是和if语语句连在一起使用,即满足条件时便跳出循环。句连在一起使用,即满

47、足条件时便跳出循环。例例3.11break语句应用举例。语句应用举例。#include main() int i; for(i=1;i10;i+) i=i+1; printf(%dn,i); if(i%2=0) /*如果如果i能被能被2整除,则跳出整除,则跳出for循环循环*/ break; 该程序的输出结果为:该程序的输出结果为:2 上述程序中上述程序中for循环本应该执行循环本应该执行5次,但因为次,但因为break语句的存在,当语句的存在,当i%2=0时,程序流程被迫退出循时,程序流程被迫退出循环。环。 使用使用break语句时应注意以下几点:语句时应注意以下几点:(1)当)当break

48、位于循环体内的位于循环体内的switch结构中时,结构中时,break只是强迫程序流程退出只是强迫程序流程退出switch结构,而不结构,而不是退出是退出switch所在的循环体。所在的循环体。(2)在嵌套的循环结构中,)在嵌套的循环结构中,break只退出它所在的只退出它所在的那层循环。那层循环。(3)当需要直接退出多层循环时,可通过赠加标)当需要直接退出多层循环时,可通过赠加标记的方法逐层退出。也可以用记的方法逐层退出。也可以用3.3.4节介绍的节介绍的goto语句来完成。语句来完成。 continue语句用来结束本次循环,即跳过循环体语句用来结束本次循环,即跳过循环体中中continue

49、语句下面尚未执行的语句,接着进行语句下面尚未执行的语句,接着进行下一次是否执行循环的判定,即结束本次循环。下一次是否执行循环的判定,即结束本次循环。 continue语句的语法形式为:语句的语法形式为:continue;例例3.12continue语句应用举例。语句应用举例。#includemain() int i; for(i=1;i10;i+) if(i%2=0) continue; /*如果如果i能被能被2整除,则结束本整除,则结束本 次循环,进入下次循环的判定次循环,进入下次循环的判定*/ else printf(%dn,i); 上述程序在执行过程中,凡是能被上述程序在执行过程中,凡是

50、能被2整除的数均不输出,整除的数均不输出,因此最后的输出结果为:因此最后的输出结果为:13579 continue语句在使用中应注意以下几点:语句在使用中应注意以下几点:(1)continue语句通常和语句通常和if语句联用,只能提前语句联用,只能提前结束一轮循环,不能使整个循环终止。结束一轮循环,不能使整个循环终止。(2)当)当continue语句位于处在循环体中的语句位于处在循环体中的switch结构中时,结构中时,continue语句只对循环起作用,即退语句只对循环起作用,即退出一轮循环,进入下一次是否循环的判定。出一轮循环,进入下一次是否循环的判定。(3)continue语句用在语句用

51、在while、dowhile中与用中与用在在for循环中有些不同。在循环中有些不同。在for循环中终止本次循循环中终止本次循环运行时,要计算表达式环运行时,要计算表达式3的值。的值。 break语句和语句和continue语句都可以用在语句都可以用在while、dowhile、for循环体中,都有退出循环的功能。循环体中,都有退出循环的功能。 但是但是break语句用来退出循环体,执行循环体后面语句用来退出循环体,执行循环体后面的第的第1条语句。而条语句。而continue语句用来退出本次循环,语句用来退出本次循环,提前进入下次循环的判定。提前进入下次循环的判定。例例3.13输出两位数中所有能同时被输出两位数中所有能同时被3和和5整除的数。整除的数。 分析:能同时被分析:能同时被3和和5整除的数应满足整除的数应满足 (j%3=0)&(j%5=0)不能同时被不能同时被

温馨提示

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

评论

0/150

提交评论