C语言主要有三种结构构成,顺序,选择,循环,任何一个程序都是这三种构成的。
我们今天先看一下选择结构。在学习选择结构之前,先了解一下关系运算符。
1.关系运算符>,>=,<,<=,==,!=
关系表达式的值反映关系成立与否,用0表示不成立(假),用1表示成立(真)。关系表达式的值为int型。C语言中用int型记录逻辑结果。其中任何等于零的东西都被认为是假,任何等于非零值的东西都被认为是真,-1也为真。
2.逻辑运算符&&、||、!
&& 与:一假则假,为双目运算,格式:表达式1&&表达式2
|| 或:一真则真,为双目运算,格式:表达式1||表达式2,优先级比&&低
!非:真假相对,单目运算
&&和||都具有截断特性,即&&运算时先算表达式1,由于它的运算规则为一假则假,若表达式1为假,则直接判断为假,无法继续计算表达式2。同理进行||运算时,若表达式1为真,则直接判断为真,表达式2不计算。
3.三目运算符 ?:
它是C语言中唯一的三目运算符,因为它接受三个操作数,并且根据一个条件的真假来选择返回其中的两个操作数之一。
语法结构:
condition ? expr1 : expr2
condition
是一个表达式,它的值被计算为真(非零)或假(零)。- 如果
condition
为真,则整个表达式的值为expr1
的值。 - 如果
condition
为假,则整个表达式的值为expr2
的值。
eg:int a = 10, b = 5;
int max = (a > b) ? a : b; // 如果a大于b,则max为a的值,否则为b的值
在这个例子中,如果 a
大于 b
,则 max
将等于 a
的值(即 10
),否则 max
将等于 b
的值(即 5
)。
特性与注意事项
- 返回值类型一致性:
expr1
和expr2
必须具有相同的数据类型或者能够隐式转换为相同的数据类型,因为整个表达式的类型由这两个表达式的类型决定。 - 副作用:使用三目运算符时,要注意避免对变量进行非预期的改变。因为三目运算符返回的是一个值,而不是一个变量,所以不能通过三目运算符来改变变量的值。
- 可读性:适度使用三目运算符可以简化代码,但过度使用可能会降低代码的可读性,尤其是对于复杂的条件和表达式。
了解了这些运算符,让我们来做一下下面的练习:
if语句
if语句的三种结构
1.if 语句:根据条件的真假决定执行不同的代码块。
2.if-else 语句:在 if 条件为假时执行 else 后的代码块。
3.if-else if-else 语句:用于处理多个条件的判断
1.if语句
if (condition) {
// 如果条件为真(非零),执行这里的代码块
} else {
// 如果条件为假(零),执行这里的代码块
}
condition
是一个表达式,其值被计算为真(非零)或假(零)。- 如果
condition
的值为真,则执行if
后面大括号{}
内的代码块。 - 如果
condition
的值为假,则直接跳过整个if
语句块,继续执行后面的代码。
2.if-else语句
if (condition) {
// 如果条件为真(非零),执行这里的代码块
} else {
// 如果条件为假(零),执行这里的代码块
}
if
语句可以与 else
配合使用,以处理条件为假时的情况.
3.if-else-if-else.....语句
在C语言中,if-else if-else
结构是一种多分支条件语句,允许根据多个条件依次执行不同的代码块。这种结构可以处理多个条件并根据这些条件的真假情况执行相应的代码
if (condition1) {
// 如果条件1为真(非零),执行这里的代码块
} else if (condition2) {
// 如果条件1为假(零),且条件2为真(非零),执行这里的代码块
} else if (condition3) {
// 如果条件1和条件2都为假(零),且条件3为真(非零),执行这里的代码块
}
// 可以有更多的 else if 条件分支
else {
// 如果以上所有条件都为假(零),执行这里的代码块
}
特性与注意事项
- 多条件判断:
if-else if-else
结构可以根据多个条件依次进行判断和执行,每个else if
只有在前面所有条件都不满足时才会被检查。 - 执行顺序:从上到下依次检查条件,如果某个条件为真,则执行相应的代码块,并跳过后续条件的检查。
- 最终的 else 块:如果所有条件都不满足,则执行最后的
else
块内的代码。 - 代码块:每个条件分支的代码块可以是一条语句或者多条语句,根据需要使用大括号
{}
包裹。
实际应用
if-else if-else
结构通常用于处理多种情况的逻辑判断,例如根据不同的输入或状态执行不同的操作。这种结构能够有效地组织代码,并根据具体情况执行不同的代码路径,提高程序的灵活性和适应性。
总结来说,if-else if-else
结构是C语言中用于多条件判断的标准语法,它允许根据多个条件依次执行不同的代码块,是实现复杂逻辑判断的重要工具之一。
他们的流程图结构为
switch语句
在C语言中,switch
语句是一种用于多分支选择的控制流语句,通常用于根据表达式的值来执行不同的代码块。它比多个嵌套的 if-else if-else
结构更为简洁和直观,特别适合处理多个固定值的情况。
基本语法
switch (expression) {
case constant1:
// 如果 expression 的值等于 constant1,执行这里的代码块
break;
case constant2:
// 如果 expression 的值等于 constant2,执行这里的代码块
break;
// 可以有更多的 case 分支
default:
// 如果 expression 的值与所有 case 的常量都不匹配,执行这里的代码块(可选)
}
expression
是一个整型表达式(或可以转换为整型的表达式),它的值用来与case
后面的常量进行比较。case constant1:
、case constant2:
等是switch
语句中的分支标签,后面跟着一个常量表达式,用来指定可能的值。- 每个
case
后面的代码块称为一个分支,用来执行相关操作。 break;
语句用来结束switch
语句的执行,如果省略break;
,程序会继续执行下一个case
中的代码,这称为 fall-through。default:
是可选的分支,用来处理expression
的值与所有case
常量不匹配的情况。如果没有default
分支,当expression
的值与所有case
常量都不匹配时,switch
语句不会执行任何代码。
流程图为
特性与注意事项
- 整数表达式:
switch
语句中的expression
必须是整数类型,包括char
、int
、enum
类型等。 - 多分支选择:
switch
语句适用于多个固定值的选择,可以减少代码的复杂性。 - fall-through:如果某个
case
分支没有break;
,程序会继续执行下一个case
中的代码,这种情况有时可以用于简化代码逻辑,但容易引起错误,应谨慎使用。 - default 分支:
default:
分支是可选的,用来处理expression
的值与所有case
常量都不匹配的情况,类似于else
分支。
其中case:和default:都是一个标签switch语句会自行匹配他们如果default写错也不会报错,只是switch语句不认识了,无法执行了。
eg: