分支语句就是隶属于C语言三大结构中的选择结构
其中的内容有:
单分支:if语句;
双分支:if……else语句;
多分支:if……else if语句和Switch语句。
#if,单分支语句
if语句格式为:
其中,需要(表达式)的求值为真,才会执行语句,否则跳过语句,语句内容可以使一条单语句,也可以是复合语句即为:
如图所示,复合语句即为“ { } ”括起来的多条语句。
#注意,即使if语句由复合语句构成,但整个if语句仍被视为一条语句。
表达式中,用逻辑操作符与关系操作符将多个表达式连起来的式子,称为关系表达式,if语句就是通过关系表达式来判断值是否为 “ 非0 ” ,然后执行语句。
#if……else,双分支语句
if……else语句的格式为:
继补充if语句的双分支,当表达式内求值为0时则会执行else后的语句2,同样,这里的语句2,也可以是复合语句,重点:复合语句必须用花括号“ { } ”括起来不然会这样:
编译器会报错,应该改成下面这样:
在C语言中,这些缩进并非必须,但这是标准风格,目的是让以后的自己或别人能够一目了然的读懂这些代码。
#关系操作符与逻辑操作符(条件操作符)
关系操作符有:<(小于),<=(小于等于),>(大于),>=(大于等于)
==(绝对等于),!=(不等于)
操作符 | 含义 | 优先级 |
< | 小于 | 四个操作符优先级相等,高于另外两个操作符 |
<= | 小于等于 | |
> | 大于 | |
>= | 大于等于 | |
== | 绝对等于 | 两者中==的优先级高于!= |
!= | 不等于 |
当关系表达式成立时,其值非0(不单指为1),若不成立则为0
在C语言中(非0)为真,(0)为假
逻辑操作符有:&&(逻辑与),||(逻辑或),!(逻辑非)
&&与||属于双目运算符,要求两个运算量,如“a>&&a<c”;
!属于单目运算符,只要求一个运算量,如“!a”。
逻辑操作符的优先级:
&&的优先级高于||;
逻辑运算符的优先级高于赋值运算符(=),又低于关系运算符(<,<=,>,>=,==,!=)!属于单目运算符,单目运算符是优先级仅此于初级运算符的存在!高于算数运算符(+、-、*、/、%)。
#条件运算符
条件运算符:“ ?”属于三目操作符,优先级低于逻辑操作符,高于赋值运算符。
格式如下:
表达式1 ? 表达式2: 表达式3
判断表达式1的值是否为真,若为真,则执行表达式2;若为假,则执行表达式3
所以,可以用条件运算符来代替双分支语句
#注意;“ ?”与“ :”成对出现,不能单独使用
#if……else if语句和Switch语句,多分支语句
单分支和双分支仅能面对一种和两种选择,现实情况是我们会面对多种抉择,这是就需要多分支结构了。
C语言中,使用if……else if,if……else嵌套,及Switch语句来实现多分支
if……else if的结构为:
或这样写:
if(表达式1)
语句1;
else if(表达式2)
语句2;
……
else
语句n+1;
实际上if……else if为if……else语句的变式,如果表达式1值为真,则执行语句1,若为假则判断表达式2,为真则执行语句2,为假则依次往下判断,直至遇到else,而非else if;其中,只能执行一条语句
#else 与if的匹配
如果程序中有许多if和else,那么编译器该如何知道那个if对应那个else?例如:
if (num > 6)
if(num > 12)
printf("num > 12");
else
printf("num < 6");
结果是else与第二个if匹配。
规则:如果没有花括号,else与离它最近的if匹配,除非最近的if被花括号括起来了:
if (num > 6)
{
if(num > 12)
printf("num > 12");
}
else
printf("num < 6");
这样else才会与第一个if匹配。
多层嵌套的if语句
if语句的嵌套其实在前面的if与else的匹配问题中出现了,结构如下:
if(x > 0)
{
if(y > 0)
printf("该点位于第一象限");
else
printf("该点位于第四象限");
}
else
{
if(y > 0)
printf("该点位于第二象限");
else
printf("该点位于第三象限");
}
Switch语句
虽然在面对多个选项的时候,我们可以使用if……else if来完成,但是,在大多数情况下,我们使用Switch语句会更加方便,结构如下:
switch(表达式)
{
case 常量1:语句1;break;
case 常量2:语句2;break;
……
case 常量n:语句n;break;
case 常量n+1:语句n+1;break;
default:语句;break
}
switch语句通过将表达式的值与常量值进行比对,如果相等则执行后面的语句,如果不相等则跳到下一个case语句,若没有相等的,则从default开始往下执行,如果没有default,则跳出Switch,执行Switch之后的代码。其中,执行完语句,若下一句遇到了break,则跳出Switch;
顺带一提,break语句也可用于循环中,但continue只能用于循环中,但当Switch处于一个循环中时,continue便可以作为Switch的一部分
#goto语句
goto语句分为两部分:
goto 标签;
要让这条语句正常执行,函数还必须包含另一条标为标签的语句,该语句以标签名后跟一个冒号开始:
标签:printf("从此处开始运行\n");
一般来说,我们会使用选择结构来使用goto语句,例如:
while(x > 0)
{
for(i = 1;i <= 100; i++)
{
if(表达式)
goto a;
其他语句;
}
其他语句;
}
其他语句;
a : 语句;
但其实我们在C语言中应当避免使用goto语句,如果习惯使用goto,试着改掉这个毛病。