目录
条件的表示
·关系运算
关系运算符实现两个操作数的大小比较,关系运算符也称比较运算符。用关系运算符将两个操作数连接起来的式子叫关系表达式。
关系表达式的结果:
关系成立,运算结果为“1”,具有逻辑值“真”。
关系不成立,运算结果为“0”,具有逻辑值“假”。
优先级和结合性:
C语言中有6个关系运算符,它们的优先级相同,都是从左到右结合。
下面是这些运算符及其优先级的列表:
运算符 描述 优先级 结合性
== 判断两个操作数是否相等 7 左结合
!= 判断两个操作数是否不相等 7 左结合
> 判断左侧操作数是否大于右侧操作数 6 左结合
< 判断左侧操作数是否小于右侧操作数 6 左结合
>= 判断左侧操作数是否大于或等于右侧操作数 6 左结合
<= 判断左侧操作数是否小于或等于右侧操作数 6 左结合
注:相等运算符"=="和不等运算符"!="都具有相同的优先级。当多个关系运算符出现在一个表达式中时,需要根据运算符的优先级来确定它们的顺序。如果表达式中的操作符具有相同的优先级,则按照它们出现的顺序计算。
C语言中运算符的优先级从高到低的顺序:
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ()(函数调用) | 从左到右 |
2 | [](数组下标) | 从左到右 |
->(结构体指针成员) | ||
.(结构体成员) | ||
3 | ++(自增运算符) | 从右到左 |
--(自减运算符) | ||
+(正号) | ||
-(负号) | ||
!(逻辑非) | 从右到左 | |
~(按位取反) | ||
&(取地址) | ||
*(间接寻址) | ||
sizeof(大小) | ||
(类型)(类型转换) | ||
4 | *(乘法) | 从左到右 |
/(除法) | ||
%(取模) | ||
5 | +(加法) | 从左到右 |
-(减法) | ||
6 | <<(左移) | 从左到右 |
>>(右移) | ||
7 | <(小于) | 从左到右 |
<=(小于等于) | ||
>(大于) | ||
>=(大于等于) | ||
8 | ==(等于) | 从左到右 |
!=(不等于) | ||
9 | &(按位与) | 从左到右 |
10 | ^(按位异或) | 从左到右 |
11 | |(按位或) | 从左到右 |
12 | &&(逻辑与) | 从左到右 |
13 | ||(逻辑或) | 从左到右 |
14 | ?:(条件运算符) | 从右到左 |
15 | =(赋值) | 从右到左 |
+=(加后赋值) | ||
-=(减后赋值) | ||
*=(乘后赋值) | ||
/=(除后赋值) | ||
%=(取模后赋值) | ||
<<=(左移后赋值) | ||
>>=(右移后赋值) | ||
&=(按位与后赋值) | ||
^=(按位异或后赋值) | ||
|=(按位或后赋值) | ||
16 | ,(逗号) | 从左到右 |
·逻辑运算
C语言提供三种逻辑运算符:逻辑非(!),逻辑与(&&),逻辑或(||)
逻辑表达式:用逻辑运算符将操作数连接起来的式子。逻辑运算符的优先级和结合性见上图。
·短路求值
定义:指在逻辑运算符 && 和 || 中,当左侧条件已经能够确定表达式的结果时,就不会再去判断右侧的条件。
例如:在一个表达式 a && b 中,如果 a 为假,那么整个表达式的值一定为假,此时就不会再去判断 b 的值。同样地,在一个表达式 a || b 中,如果 a 为真,那么整个表达式的值一定为真,此时也不会再去判断 b 的值。
if语句
定义:根据给定条件是否成立来决定是否执行指定操作的语句
· 单边if:一个选项的if语句,为单分支结构。
一般形式:
if(表达式)
语句
·双边if—else:有两个选项的if语句,为双分支结构。
一般形式:
if(表达式)
语句1
else
语句2
·if—else嵌套:一个完整的控制结构,如if—else语句结构可以当作一条语句看待。若if语句中语句1又为if语句则为嵌套。(套娃)
一般形式:
if(表达式1)
if(表达式2)
语句1
else
语句2
else
if(表达式3)
语句3
else
语句4
·if语句级联:指在同一个if语句中使用多个条件语句。为多分支结构。
一般形式:
if (表达式1)
{
语句1 //选项1
}
else if (表达式2)
{
语句2 //选项2
}
else if (表达式3)
{
语句3 //选项3
}
...
else
{
语句n+1 //选项n+1
}
·if的控制范围:if语句的控制范围由花括号{}内的语句块确定。当if语句的条件为真(true)时,这个语句块内的代码将被执行;否则,这个语句块内的代码将被跳过。
eg:以下代码演示了如何使用if语句来判断一个数是否为正数,并输出相应的信息:
#include <stdio.h>
int main()
{
int num;
scanf_s("%d", &num);
if (num > 0)
{
printf("%d is a positive number.", num);
}
else
{
printf("%d is not a positive number.", num);
}
return 0;
}
在上面的代码中,只有当变量“num”的值满足相应条件时,if语句的相应语句块才会被执行。
·if 与else的匹配原则:
1.缺省花括号时,else总是与它上面离它最近的、未配对的if配对。
2.if与else是数目一样时,注意书写格式,采用锯齿形状。
3.if和else数目不一致时,可以加大括号来确定配对关系。
条件表达式
条件运算符是C语言中唯一的三目运算符,运算时需要三个操作数,由条件运算符及其运算对象构成的表达式成为条件表达式,一般形式:
表达式1 ? 表达式2:表达式3
表达式1 是一个布尔表达式(即结果为 true
或 false
)。
如果 表达式1 的值为 true
,则整个条件表达式的值为 表达式2 的值。
如果 (condition)
的值为 false
,则整个条件表达式的值为 (expression2)
的值。
这种条件表达式有时也被称为 "三元运算符",因为它将三个操作符组合在一起。条件表达式通常用于简化 if-else 语句的编写,比如下面这个例子:
if (a > b)
{
max = a;
}
else
{
max = b;
}
//用条件表达式替代
max = (a > b) ? a : b;
switch语句
该语句常用于从多个选项中选择一个,基于单个变量或者一个简单表达式(控制表达式)的值进行选择时,常用于各种分类统计、菜单设计等。一般形式如下:
switch(expression)
{
case constant-expression1:
语句组1;
case constant-expression2:
语句组2;
...
case constant-expressionn:
语句组n;
[default:
语句组n+1;]
}
说明:
1.expression
是要测试的表达式。该表达式的值将会与 case
常量表达式进行比较。
2.每一个case
分支都必须以常量表达式开始,并且在每个分支中,您可以放置任意数量的语句(包括其他 switch
语句)(语句可嵌套)。
3.break
语句用于退出当前分支并执行后续代码。如果省略了 break
则程序将会继续执行紧接着的下一个分支。
4.最后的 default
语句是可选的,但建议加上。当没有任何一个 case
分支匹配时,将会执行 default
分支
5.constant-expression(常量)是整型表达式,且值必须互不相同,通常使用int型数字和字符组成表达式。
6.case后可包含多个可执行语句,且不必加{}。
7.多个case也可共用一组执行语句。
eg:
case constant-expression1:
case constant-expression2:
case constant-expression3:
case constant-expression4:语句组;