控制流
廖家龙 用心听,不照做

C选择结构、循环结构整理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1)if-else if-else

2)switch-case:选择结构

switch(表达式){

case 值1:
执行代码;
break;

case 值2:
执行代码;
break;

case 值3:
执行代码;
break;

default:
执行代码;
break;
}

3)while循环

4)do while循环【当循环体无论如何至少要执行一次的时候使用】

do{

循环体;
}while(条件表达式);

5)for循环【当循环次数确定的时候,一般使用for循环;当循环次数不确定的时候,一般使用while循环】

控制流的一些注意点

1)小技巧:Xcode中选中要对齐的代码:control+i,就会自动对齐

2)while循环应用场景:

-循环体确定,循环次数也确定
-循环体确定,循环的次数不确定,但是循环继续或者结束的条件确定
-遍历指定范围的数
-找出指定范围中符合特定条件的数
-求累加和与平均值
-找一堆数中的最大数和最小数

-计数
-穷举【一个一个试】

3)定义在一个大括弧中的变量,只能在这个大括弧中访问,出了大括弧,CPU立即将变量回收,无法访问到了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>

int main(int argc,const char * argv[]){

int num=1;
if(num > 0){

int age = 10;
printf("age=%d\n",age);
}
printf("age=%d\n",age);

return 0;
}

我们可以自定义一个作用域来提前释放一个变量:

1
2
3
4
5
6
{

int i=1;
printf("i=%d\n",i);
} //这个时候,i就会在这里释放

4)无大括号else的匹配:else总是和最近的那个if匹配

5)if-else与switch-case的区别:前者从头开始遍历,后者直接跳转到符合要求处

每一个case块后面的break在语法上是可以不写的,break的意思代表立即结束整个switch-case结构,如果case块中没有break,那么就会直接穿透到下一个case中执行代码,直到遇到break才会结束switch结构,或者执行完

如果多个case块的处理逻辑是一样的,那么我们可以利用case穿透简写代码

switch后面的表达式任何类型都是可以的,除了实型

如果case块中要声明变量,那么这个case块就必须要使用大括弧

switch结构只能做等值判断,不能直接做范围判断,并且case后面的数据不能有变量

break的作用:

6)break和continue的区别:

如果在循环体中遇到了break,就会立即结束当前循环结构,但是还会继续外层循环

continue只能使用在循环体中,如果遇到了continue,会立即结束本次循环,然后回去判断循环条件【注意一下while循环体和for循环体不一样(前者可能包括i++,后者不包括)】

break和continue都只能作用于当前循环体!

一道比较有意思的面试题:

7)while和do-while的区别:前者先判断条件后进循环体,后者先进循环体再判断条件

8)for循环中,三个表达式都可以省略,但是分号不能省略;如果第二个表达式省略,那么循环条件默认就是成立的

for循环三个表达式其实可以是任意的C语句:

9)goto:可以将CPU的执行跳转到当前函数的别的地方继续执行

当执行到goto语句的时候,CPU就会跳转到指定的标签的地方继续往下执行

goto语句也可以实现循环操作

goto可以往前跳,也可以往后跳,但是只能在当前函数中跳

取标签名下面的那一句代码不能是声明变量:

10)break和goto: