一、程序的流程控制
程序的流程控制指的是“程序怎么执行”。程序哪些先执行,哪些后执行,哪些不执行,哪些多次执行,属于流程控制的内容。
流程控制分为三类,顺序执行,选择执行和循环执行。顺序执行很简单,就是从第一行执行到最后一行,比如“hello world”。
#include <stdio.h>
int main(void){
printf("hello world!\n");
return 0;
}
1.1 选择执行
选择执行就是有些代码可能执行,有些代码可能不执行,程序会有选择的执行代码。也就是C语言中的if和switch语句。
1.1.1 if语句
if语句的基本格式如下:
if (expression is true) {
statement;
}
功能:如果表达式为真,就执行下面的语句;如果为假,就不执行下面的语句。
if…else语句基本格式如下:
if (expression 1) {
statement 2;
} else {
statement 3;
}
以上语句等同于运算符中的三目运算符
expression 1 ? statement 2 : statement 3
需要注意的是
- if语句最好加上else,虽然不会报错,但是存在漏洞
- else后面不能加表达式,只有if后面才能加表达式
1.1.2 switch语句
switch语句也是一种选择语句,也叫做多分支语句。实际上if和switch是可以相互替代的,但是如果if嵌套较多,在实际开发中是不可取的,所以会换成switch,一般嵌套if在三层以内时会使用if,大于三层会选择switch。基本格式如下:
switch (expression) {
case constant-expression 1: statement 1;
break; /*可选的*/
case constant-expression 2: statement 2;
case constant-expression 3: statement 3;
……
case constant-expression n: statement n;
default: statement n + 1; /*可选的*/
}
需要注意的是:
- switch后面的表达式必须是整数类型,可以是int型变量,char型变量,也可以是整数或字符常量。但绝不可以是float型变量,double型变量,小数常量。编译时会报语法错误
- switch下的case和default必须用一对大括号{}包含起来。
- 当switch后括号内的表达式与某个case后面的常量表达式的值相等时,就执行case后面的语句。执行完以后就会移到下一个case继续执行。如果不想执行其他case后面的语句,需要加上break语句,跳出switch
- 如果switch表达式的值与所有的case后面常量表达式的值都不相等,那就执行default语句。也可以选择不要default,但跟if…else一样,最好还是加上default。
- 每个case后面的常量表达式的值必须互不相同。case和default的顺序不影响最后结果,但是最好还是按照顺序写,便于阅读。
1.2 循环执行
循环执行就是“某些代码会被重复执行”。
1.2.1 for循环
for循环的基本格式如下:
for (init-expression; condition-expression; increment-expression) {
statement;
}
需要注意的是:
- for循环中的表达式是用分号“;”隔开的
- “for (init-expression; condition-expression; increment-expression)”语句后不要加分号,直接接大括号,也就是循环体。
for循环的执行过程如下:
- 求解“初始化表达式”。
- 求解“条件表达式”,若值为真,则执行for循环中的循环语句,然后执行第三步;若为假,则结束循环,转到第五步
- 求解“自增表达式”
- 转回第二步继续执行
- 循环结束,之心for语句下面的语句
1.2.2 while循环
while循环的格式如下:
while (condition-expression) {
statement;
}
while循环执行过程如下:
- 当条件表达式为真,就执行循环体
- 执行完成后判断表达式是否为真,如果为真,就继续执行
- 直到表达式为假,跳出循环
1.2.3 do…while循环
do…while循环的格式如下:
do {
statement;
} while (condition-expression);
do…while循环与while循环比较相似,唯一的区别在于do…while循环会先执行一次循环,然后在判断条件表达式是否为真,若为真,则重新执行循环体;若为假,则跳出循环。
注意:
- for循环可以和while循环等价转换,但do…while与while和for循环不等价