C语言编写的程序都是由一条条语句组成的,程序默认是按照顺序执行,但我们可以通过语句来改变程序的执行流程,语句大致分为以下几类:
- 条件判断语句,if语句族(if、else if、else)
- 选择语句,switch语句
- 循环语句,while语句、do while语句、for语句
- break语句
- continue语句
- goto语句
- 空语句
1. if语句族
1.1 if语句
if语句用于条件判断,if语句是由if关键字、表达式expression、statement语句集组成,当满足一定的条件时,就会执行if代码块中的代码,它的表现形式为:
if(expression)
statement
//或者
if(expression){
statement
}
如果expression满足条件,即为真时,就执行后面的statement语句;当只有一条statement语句的时候,大括号可以省略不写。
int a = 5;
if(a == 5)
printf("a的值为%d\n",a);//a == 5满足条件,所以调用printf()函数
如果有多条语句的时候,就要加上大括号组成复合语句。
int a = 5;
if(a == 5){ //执行多条语句,需要加上大括号
a = 3;
printf("a的值为%d\n",a);//a == 5符合条件,进入if代码块执行printf()函数
}
1.2 else if语句
else if语句是if语句的分支,实现多重判断,它只能和if语句配合使用,不能单独使用,表现形式:
if(expression1)
statement
else if(expression2)
statement
else if(expression3)
statement
在多重判断的情况下,从最开始的表达式expression1开始匹配,哪个else if对应的表达式expression符合条件,就执行哪个else if里的语句或代码块,最好不要使用三个以上else if,会影响效率。
int a = 5;
if(a == 2)
printf("a的值为%d\n",a);
else if(a == 3)
printf("a的值为%d\n",a);
else if(a == 5)
printf("a的值为%d\n",a);//满足条件,输出
1.3 else语句
else语句也是和if搭配使用的,当if语句和else if条件都不满足时,会进入到else的代码块。
//形式1
if(expression)
statement
else
statement
//形式2
if(expression1)
statement
else if(expression2)
statement
else if(expression3)
statement
else
statement
if语句嵌套使用时,else与最近的if相匹配,并且建议加上大括号,确保if与对应的else匹配,以免造成混乱。
int a = 5;
if(a == 2)
printf("a的值为%d\n",a);
else if(a == 3)
printf("a的值为%d\n",a);
else if(a == 4)
printf("a的值为%d\n",a);
else
printf("a的值为%d\n",a);//上面都不满足条件,执行else里的代码
//嵌套使用if语句
int b = 10;
if(a == 5){
if(b == 10){
printf("b的值为%d\n",b);//输出b的值为10
}
}else{
printf("a的值为%d\n",a);
}
2. switch语句
switch语句是选择类语句,和case、default语句配合使用,与if…else语句相似,如果有多个判断条件(3个以上),建议使用swtich语句代替if…else语句,表现形式:
//有break
switch(expression){
case v1:
statement
break;
case v2:
statement
break;
case v3:
statement
break;
default:
statement
}
switch语句根据expression的结果不同,执行对应的case分支,然后执行break语句跳出switch语句块,当所有的case都不匹配,就执行default里的语句。
int value = 2;
switch(value){
case 1:
printf("1");
break;
case 2:
printf("2");//输出2
break;
case 3:
printf("3");
break;
default:
printf("0");
}
如果case后面不跟break,则会执行下一个case或default语句,这就是case穿透。
int value = 2;
switch(value){
case 1:
case 2:
printf("2");//输出2
break;
case 3:
printf("3");
break;
default:
printf("0");
}
3. 循环语句
3.1 while语句
while语句用于实现循环,当条件满足时,就会进入循环体内并反复执行,直到条件不满足为止:
while(expression)
statement
如果表达式expression满足条件,就会执行statement,还需要一个循环变量,否则会进入死循环,或者使用break语句跳出循环
int a = 5;
while(a <= 10){
a++;//循环变量,当a>10时,则不符合条件,跳出循环
}
3.2 do while语句
do while语句是while的一种,它和while语句的区别就是,先执行一遍循环体,再判断条件是否满足:
do statement
while(expression)
do while先执行一遍statement,再进入while中判断expression是否满足条件,其他的都和while语句一样,如果有多个statement,则需要放到大括号里:
int a = 5;
do{
a++;
}while(a <= 10);//先执行a++,再进行while判断
3.3 for语句
for是另一种循环语句,也是最常用的循环语句,通常用于对循环次数明确的情景。for循环的条件由三个部分组成:
- init:初始化变量,首次进入循环的时候调用一次
- condition:条件表达式,和while的判断一样,为真则执行循环体
- ctrl:控制变量表达式,每次执行完循环体后执行该表达式
for (init;condition;ctrl)
statement;
for (init;condition;ctrl){//多个语句
statement;
statement;
...
}
下面是一个示例:
for(int i = 0;i <= 10;i++){
printf("i的值为%d\n",i);//循环输出i的值,直到i > 10时跳出循环
}
for循环的三个条件表达式部分不是必须的,可以全部为空,也可以省略任何一个,全部为空的话形成无限循环,但分号不能省略:
for(;;){
printf("无限循环\n");
}
4. break语句
break语句主要用于跳出循环和switch语句中结束case分支。其中,如果是嵌套循环的话,只能跳出当前的循环,不能跳出多个循环,也不能用于条件判断语句(if语句)。
for(int i = 0;i <= 10;i++){
if(i == 5){
break;//当i等于5的时候跳出循环
}
printf("i的值为%d\n",i);
}
5. continue语句
continue语句用于终止当前循环,循环体后面的内容就不会再执行了,接着进入下一轮循环:
for(int i = 0;i <= 10;i++){
if(i == 5){
continue;//当i等于5的时候进入下一轮循环,后面的printf()函数不再执行
}
printf("i的值为%d\n",i);
}
6. goto语句
goto语句用于无条件地跳转到指定的标号,也可以用于跳过代码的执行或者不受限制地退出多重循环,一般形式就是goto label:
int a = 5;
i:a = 10;
if(a == 5){
goto i;//a等于5时,跳转到标号i,执行a = 10的操作
}
7. 空语句
空语句是一个不执行任何操作的语句,只有一个分号“;”,常用作占位符。
有错误的地方、需要补充的知识欢迎评论区指正