选择结构指的是进行逻辑判断,当满足与某些条件的时候才会执行某些语句。
C语言包括两类选择语句,if语句和switch语句。
- if语句
if语句通过测试表达式的值从两种选项中选择一种,if语句的一般形式为:
if (表达式)
语句
else
语句
其中表达式的括号是必须的。
if语句的执行步骤是先计算括号内表达式的值,如果表达式的值非零,则结果为真,执行圆括号后面的语句。
(C语言中0为假,非0为真)
注意区分关系运算符中的==和赋值运算符,因为在C语言中两则可以同时作为if语句的表达式但具有完全不同的意义,出现这种情况时gcc编译器在开启-Wall选项会产生警告。
这里来区分一下==和=
- “=”并不等于符号,而是赋值操作符,如 x=3。除此之外,还可以在一个语句中向多个变量赋同一个值,即多重赋值。例如,在下面代码中把 0 同时赋给 x、y 与 z。
x = y = z = 0;
- 相对于只有一个等号的赋值操作符,关系操作符中的等于操作符采用两个等号“==”来表示。
看个例子
看起来是不是在比较X和Y的大小?
但是=是赋值符号,这样在if语句里等于直接将Y赋值给了X!
怎么修正错误呢?
只需要将=换成==就可以进行判断了。
if语句中可以包含else子语句,表示在圆括号内的表达式值为零时,执行else后面的语句,其基本形式如下:
if (表达式)
语句
else
语句
if 语言内部的语句可以是C语言支持的任何类型的语句,包括if语句本身,并且对嵌套层次没有限制。内部语句通常采用缩进形式。当嵌套层次造成程序混乱,像在表达式中使用圆括号一样使用大括号{}。
当在else语句的子语句中嵌套另一个if语句时,一般不对它进行缩进,而是把每个else都与最初的if对齐,形成级联式if语句的书写形式,这种形式可以避免判定数量过多时造成的过度缩进问题,同时也更清晰地显示这是一连串的判定:
if (表达式)
语句
else if (表达式)
语句
else if (表达式)
语句
else
语句
来个例子
我们平时只要注意格式即可
注:if或者else的括号后没有; 千万别忽略了!
- switch语句
在编程中,常常需要把表达式和一组值相比较,从中找到匹配项,执行相应的语句。
级联式if
语句可以实现这个需求,但是对于整型的表达式值和可选项来说,C语言提供了switch
语句。switch
语句比级联式if
更易读,并且执行速度往往比较快。
它的基本形式如下:
switch (表达式)
{
case 常量表达式: 多条语句
...
case 常量表达式: 多条语句
default: 多条语句
}
switch语句由以下三部分组成:
- 控制表达式 switch后面跟的由圆括号括起来的整型表达式称为控制表达式,该表达式的结果必须是整型或是字符型。
- 情况标号 每一种情况以case 常量表达式 :开始,常量表达式不能包含变量及函数调用,且结果必须为整数值。case后面只能跟一个常量表达式,但多个情况标号可以放在同一组语句前面,表示对多组情况执行同一组语句。
- 语句 情况标号后面可跟任意数量的语句,不需要用大括号把这些语句括起来,且最后一条语句通常是break语句。在switch语句中,执行break语句时,程序会跳出switch语句,而继续执行switch语句后面的语句。忘记’break’语句,程序就会继续执行下面情况的语句,也是编程时常犯的错误。
举个例子: