一、什么是语句?
通俗来讲,以分号(;)结尾的一段代码就是一条语句。
C语句可分为五类:
1.表达式语句
表达式后面加一个";"便构成了表达式语句。如:
a=5+b;
2.函数调用语句
3.复合语句
多条语句用{}括起来便是一条复合语句。如:
//实现两数交换
{
int temp;
temp = a;
a = b;
b = temp;
}
4.空语句
仅由";"构成的语句叫做空语句。
5.控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式。可分为三类:
1> 分支语句:if语句、switch语句
2>循环语句:do-while语句、while语句、for语句
3>转向语句:break语句、continue语句、goto语句
二、分支语句
分支语句用来实现选择结构
1.if语句
单分支:
if(表达式)
语句;
双分支:
if(表达式)
语句1;
else
语句2;
多分支:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
C语言中0表示假,非零表示真。当表达式的结果为真时,执行对应的语句。
tips:注意悬空else!
else总是与距离它最近的可匹配的if相匹配。例:
int main()
{
int a=0;
int b=1;
if(a==1)
if(b==1)
printf("b=1");
else
printf("a=0");
return 0;
}
本例中,else与第二个if语句匹配,构成了一条语句。由于a==1的结果为假,这条if-else语句不会执行,因此什么都不会打印!
因此,大家在写程序的时候一定要注意这样的细节,才能提高程序的可读性哦。
2.switch语句
switch也是一种分支语句,常常用于多分支的情况。
switch(整型表达式)
{
case 1: 语句1;
break;
case 2: 语句2;
break;
case 3: 语句3;
break;
......
default: 语句n;
break;
}
tips:注意break的使用,如果没有break语句,执行完本条case语句后会继续执行下一条case语句!
三、循环语句
循环语句实现循环结构。
1.while循环
while(表达式)
{
循环体;
}
循环体由一系列语句构成。
当表达式为真时,执行循环体的内容;执行完毕后再次判断表达式,若为真,继续执行循环体……如此循环往复,知道表达式为假,退出循环。
因此,一般情况下,循环体内必须含有能使表达式变为假的语句,避免出现死循环。
tips:while循环遇到break,会立马退出整个循环;遇到continue,会跳过本次循环,进入下一次循环。
2.do---while循环
do
{
循环体;
} while(表达式);
do---while循环先执行循环体,然后再判断表达式,若为真,继续执行循环体,若为假,退出循环。
因此,do---while循环至少执行一次循环体,而while循环可能一次都不执行。
tips:与while类似,do---while循环遇到break退出整个循环,遇到continue跳过本次循环,进入下一次循环。
3.for循环
for(表达式1; 表达式2; 表达式3)
{
循环体;
}
表达式1用于初始化循环变量;
表达式2用于循环条件的判断,若为真,执行循环体,若为假,退出循环;
表达式3为调整部分,用于改变循环变量。
tips:for循环遇到break,立即退出整个循环;
遇到continue,跳过本次循环体后面的语句,直接执行表达式3,然后进行表达式2的判断,进入下一次循环。
四、转向语句
在转向语句中,break和continue常常与循环语句结合使用,使用效果前文已经通过tips叙述。
goto语句
goto语句又称跳转语句,利用跳转标记可以跳转到本函数的任意位置。(注意:goto语句只能在同一个函数内部跳转,不能跨函数跳转)
goto语句的使用场景:
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
}
…
error:
if(disaster)
// 处理错误情况
可见,goto语句可以终止深度嵌套的结构,而用一次break是无法实现的。
但在实际情况中,建议少用goto语句,否则滥用goto语句会造成程序混乱,带来不必要的麻烦。