《[精选]流程控制》由会员分享,可在线阅读,更多相关《[精选]流程控制(45页珍藏版)》请在金锄头文库上搜索。
1、流程控制,前面我们看到的代码都是顺序执行的,这称为顺序结构。 但有时候,顺序结构的代码是远远不够的。比如有些18禁的小电影只允许成年人观看,你因为年龄不够,儿童不宜。这就是选择。 程序代码执行的顺序,称作流程控制。Ta有顺序、选择和循环三种结构。,选择结构,选择结构就是根据不同的情况执行不同的代码。也就是说,某些代码可能执行,也可能不执行。 选择结构有两种基本类型:if 和 switch。,if语句,最简单if语句 if语句的控制范围 ifelse语句 if语句的嵌套 ifelse if语句(多分支) if语句示例(排序初探) if语句常见问题解析,最简单if语句,最简单if语句的格式: if
2、(表达式) 语句; 功能:判断表达式是否为真,若真,则执行语句;若假,则执行下一条语句。,if语句的控制范围,if(表达式) 语句1; 语句2; 当前情况下,if语句只能控制语句1的执行或不执行,不能控制语句2的执行或不执行。 换句话说,语句2一定会执行。,if语句的控制范围(续),if(表达式) 语句1; 语句2; 如果想让if语句控制多条语句的执行或不执行就必须把这些语句用 括起来。,ifelse语句,ifelse语句的格式: if(表达式) 语句1; else 语句2; 功能:判断表达式是否为真,若真,则执行语句1;否则,执行语句2。,if语句的嵌套,一个if语句又包含一个或多个if语句
3、称为if语句的嵌套。Ta的格式: if(表达式) if(表达式) 语句1; else 语句2; else if(表达式) 语句3; else 语句4;,说明,if语句的嵌套常用以解决比较复杂的选择问题,其中每条语句的执行都需经过多个条件共同决定。现作几点说明如下: 任何if语句都可以嵌套。 被嵌套的if语句本身还可以是嵌套的if语句。 在多层嵌套的if语句中,else总是与离它最近且没有配对的if配对。,ifelse if语句(多分支),ifelse if语句的格式: if(表达式1) 语句1; else if(表达式2) 语句2; else 语句n; 从上到下逐一判断表达式,当某个表达式为真
4、,则执行其对应的语句,其余部分不执行。若所有表达式均为假,则执行语句n。,if语句示例(排序初探),算法是一个宽泛的概念。学编程,就必须要了解基本的算法。那么排序算法就是其中的明珠。 选择排序法是排序算法中的一种。其基本思想(以升序为例)是:首先,找出最小的数,放在第一个位置;然后,再找出第二小的数,放在第二个位置;以此类推,直到所有的数从小到大排序。,if语句常见问题解析_1,if(表达式); 等价于: if(表达式) ; /这是一个空语句,if语句常见问题解析_2,if(表达式) 语句1; else 语句2;,if(表达式); /错误 语句1; else 语句2;,if语句常见问题解析_3
5、,if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式m) 语句m; else 语句n; 即使表达式1和表达式2都成立,也只会执行语句1。,if语句常见问题解析_4,if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; 这样写语法上完全没有问题,但逻辑上会有漏洞。,if语句常见问题解析_5,if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else(表达式4) 语句4; 这样写是错误的。改正方法:要么去掉(表达式4),要么在(表达式4)前加if。,if语句
6、常见问题解析_6,if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else (表达式4); 语句4; 这样写语法上OK,但逻辑上是错误的。,switch语句,C语言虽然没有限制ifelse能够处理的分支数量,但当分支过多时,用ifelse处理会不太方便,而且容易出错。 这时,我们就需要另一种选择结构-switch语句,用来代替多分支的ifelse语句。,switch语句的格式,switch(表达式) case 常量表达式1: 语句1; case 常量表达式2: 语句2; case 常量表达式n: 语句n; default: 语句n+1;
7、,switch语句的执行过程,先计算表达式的值,假设为m。 从第一个case开始,依次比较各常量表达式和m的值。如果相等,就执行:后面的所有语句,直至语句结束或碰到break,而不管是否与剩下的case匹配;如果不相等,就跳过:后面语句,继续比较下一个case。 如果比到最后一个常量表达式都找不到相等的,那么就执行default后面的语句。,说明,switch后面()里的表达式原则上允许为任意数据类型。但VC+6.0中只允许为整型或字符型。 case后面必须是一个整数,或者是结果为整数的表达式,不能包含任何变量。 default不是必须的。当没有default时,如果所有case都匹配失败,那
8、么程序就没结果。,动动脑,判断下面的示例是否正确: case 10 : printf(); case 8+9 : printf(); case A : printf(); case A+19 : printf(); case 9.5 : printf(); case a : printf(); case a+19 : printf();,循环结构,所谓循环结构,就是重复地执行同一段代码。比如,我们要计算1+2+3+100之和,就是重复99次加法运算。 循环结构有三种基本类型:for、while 和 do-while。,for循环,for循环的格式 for循环的执行过程 for循环的控制范围 f
9、or循环的3个表达式,for循环的格式,for循环的一般格式: for(表达式1; 表达式2; 表达式3) 语句; 表达式1仅在第一次循环时执行,以后不再执行。表达式2一般是关系表达式,决定了是否还要继续下次循环。表达式3一般是自增或自减操作,使表达式2逐渐“不成立”。,for循环的执行过程,先执行表达式1。 再执行表达式2,如果其值为真,则执行循环体,否则结束循环。 执行完循环体后再执行表达式3。 重复执行b.和c.,直至表达式2的值为假,就结束循环。 b.和c.是一次循环,会重复执行,for循环的主要作用就是不断执行b.和c.。,for循环的控制范围,for (表达式1; 表达式2; 表达
10、式3) 语句1; 语句2; 当前情况下,for循环只能控制语句1执行的次数,无法控制语句2执行的次数。 换句话说,语句2仅执行一次。,多个for循环嵌套_1,for (表达式1; 表达式2; 表达式3) for (表达式4; 表达式5; 表达式6) 语句1; 语句2;,多个for循环嵌套_2,for (表达式1; 表达式2; 表达式3) for (表达式4; 表达式5; 表达式6) 语句1; 语句2; for (表达式7; 表达式8; 表达式9) 语句3; ,for循环的3个表达式,for循环中的表达式1(循环初始条件)、表达式2(是否循环条件)和表达式3(循环趋向结束条件)都可以省略,但;必
11、须保留。 下面以1100的和为例。,省略表达式1,可以将表达式1移到for循环的前面: int i=1, sum=0; for(; i=100;+i) sum+=i; ,省略表达式2,如果不做处理就会成为死循环: for(i=1; ;+i) sum+=i; 所谓死循环,就是是否循环条件永远成立,循环会一直执行下去,永不结束。死循环对程序的危害很大,一定要避免。,省略表达式3,不会修改表达式2(是否循环条件)中变量的值,可以在循环体中加入该语句: for(i=1; i=100;) sum+=i; +i; ,省略表达式1和表达式3, i=1; for(;i=100;) sum+=i; +i; ,3
12、个表达式同时省略,for(; ;) /语法上完全OK,无实际意义 相当于: while(1),补充,表达式1和表达式3可以是一般表达式也可以是逗号表达式。 for(i=0,j=100; i=100; +i,-j) sum=i+j; 表达式2一般是关系或逻辑表达式,也可是数值或字符,只要非零,就执行循环。 for(;(c=getchar()!=n;) printf(%cn, c);,while循环,while循环的一般格式: while(表达式) 语句; 先执行表达式,其值为真,则执行语句;执行完语句,再次执行表达式,如果为真,继续执行语句如此循环往复,直至表达式为假,退出循环。,while循环
13、与for循环,for(表达式1; 表达式2; 表达式3) 语句; 等价于: 表达式1; while(表达式2) 语句; 表达式3; ,while循环示例:回文数,从键盘上输入一个整数,如果该数是回文数,返回YES,否则返回NO。(若任一自然数,将其各位数字反向排列所得自然数与其相等,则称这个自然数为回文数。如,12321是回文数;但12345不是回文数),do-while循环,do-while循环的一般格式: do 语句; while(表达式); do-while循环与while循环的不同在于:它会先执行语句,然后再判断表达式是否为真,为真则继续循环;为假则终止循环。因此,do-while循环
14、至少要执行一次语句。,跳出循环,使用循环时,如果想提前结束循环(在不满足是否循环条件的情况下结束循环或进入下一次循环),可以使用break语句或continue语句。,break语句,当break用于switch语句时,会终止switch语句。 当break用于循环时,会终止循环。break语句常和if语句一起使用,即满足条件时终止循环。 break不能单独用于if语句。 在多层嵌套的switch语句或循环中,break只能终止离Ta最近的switch语句或循环。,continue语句,continue语句用以跳过循环中剩余的语句而强行进入下一次循环。continue语句只能用于循环,常与if语句一起使用,即满足条件时进入下一次循环。 continue语句与break语句的不同点在于: break语句用来终止循环,循环语句不再有执行的可能;continue语句用来结束本次循环,直接跳到下一次循环,如果是否循环条件成立,还会继续循环。,小结,for循环和while循环一般可以互相代替。 对于while循环和do-while循环,循环体中应包含使循环趋向结束条件。 用while循环和do-while循环时,循环初始条件的操作应在while和do-while语句之前完成,而for循环可以在内部实现。 for循环是最常用的循环,它的功能强大,可以代替其他循环。,