一.流程控制语句
1.概念
C语言语句的执行默认顺序执行(从上往下依次执行),编程语言一般除了默认的顺序执行以外,还提供分支执行和循环执行的语法
2.分支结构
(1)if语句
if语句可以实现分支,作用是从几组无关的语句中选择一组来执行
if语句通过一个逻辑表达式的结果来选择一组语句执行
语法:
if(逻辑表达式){
语句;//如果只有一行,可以省略大括号
}
逻辑表达式为真,执行大括号中的语句,为假则不执行
如果有多组if语句,希望最多只执行其中一组可以用else将if语句连接
if(逻辑表达式1){
语句;
}
else if(逻辑表达式2){
语句;
}
else if(逻辑表达式3){
语句;
}
如果希望if语句任何时候都一定会执行其中一组,可以省略最后一个if和逻辑表达式
if(逻辑表达式1){
语句;
}
else if(逻辑表达式2){
语句;
}
else{
语句;
}
(2)switch…case语句
switch … case也可以实现分支,和if语句不一样的地方在于,switch…case通过算数表达式的值来决定分支的选择
由于switch…case语句的跳转效率高于if…else语句,在分支较多的情况下选择使用switch…case语句
语法:
switch(算数表达式){
case 值1:
语句;
break;//跳出switch...case
case 值2:
语句;
break;
case 值3:
语句;
break;
default://以上值都不满足的情况
语句;
}
3.循环结构
循环结构的作用是让一组语句反复执行,能够将程序中多次出现的语句合并然后多次执行
(1)for语句
for语句是一种实现循环的语句
语法:
for(循环变量初始化;循环结束条件;每次循环对循环变量的操作)
{
循环语句;
}
循环变量的初始化就是给循环变量赋初始值,设置循环开始变量的值
循环结束条件是一个逻辑表达式,为真继续循环,为假退出循环
每次循环对循环变量的操作通常是修改循环变量,让循环一定次数后导致循环条件不成立
循环语句就是每次循环要执行的语句
除了循环条件不成立可以让循环退出以外,也可以使用break退出所在循环,一旦遇到break语句,循环立即结束,不再往下执行
在循环结束后可以通过判断循环条件是否为真来区分循环是条件不成立退出还是break退出
当循环条件为真 --------- break退出
当循环条件为假 --------- 循环条件不成立退出
在循环中使用continue关键字可以将本次循环之后语句跳过,直接开始下一次循环
for循环的执行顺序,假设有如下语句
for(1;2;3)
{
4
}
它按照如下顺序执行:
[1,2] [4,3,2] [4,3,2] [4,3,2]…
正常情况下(没有break)循环在两组之间结束,每一组的最后一步判断循环条件是否为真,为真执行下一组,为假退出循环
正常结束循环条件一定为假,如果开始循环条件为假,循环有可能一次都不执行
for循环的多种写法
a.for循环的循环语句只有一条,可以省略大括号
b.小括号中的每一部分可以写多条语句,多条语句之间用,连接(结束条件要写到最后)
c.C99规范可以在for内部声明循环变量,这个时候循环变量只能在循环内部使用(编译加-std=c99)
d.小括号三个部分都可以省略,如果不写退出条件,退出条件就永远为真,循环就永不退出,这种循环叫死循环
e.for的死循环通常写成小括号内为空,省略小括号三部分,分号不能省略
for(;;){//死循环
....
}
f.如果省略for语句的循环语句,就变成空循环,大括号可以省略,但是需要在小括号后加分号
for(....);
(2)while循环
while语句也可以实现循环,while语句是通过判断一个逻辑表达式的值来控制循环执行
语法如下:
while(逻辑表达式)
{
循环语句;
}
for循环和while循环完全可以互相代替
while循环的执行顺序,假设有如下语句:
while(1){
2
}
按照如下顺序执行
[1] [2,1] [2,1] [2,1]…
每一组最后的逻辑表达式为真,继续下一组,为假,退出循环
while循环有可能一次都不执行
当while语句中的逻辑表达式永远为真,while循环变为死循环,while死循环通常以下写法
while(1){
....
}
while语句也有空循环,省略循环语句体,在小括号加分号
while(1);
while中break ,continue的用法和for语句中完全一样
(3)do…while循环
语法:
do
{
循环语句;
}while(逻辑表达式);
do…while和while的区别在于do…while先执行循环语句,在判断循环条件
do…while语句至少循环一次
do…while语句的执行顺序,假设有如下语句:
do{
1
}while(2);
按照以下顺序执行
[1,2] [1,2] [1,2]…
相当于去掉while中第一组语句