条件判断
用
if
语句分支结构实现分支
结构
用
switch
语句实现分支结构
条件判断
根据某个条件成立与否,决定是否执行指定的任务(操作)。
条件判断的结果是逻辑值(布尔类型值,也就是说分支语句的条件可以使用关系表达式和逻辑表达
式),在程序中用真(
1
)和假(
0
)来表示。
关系运算及其表达式
关系运算符及其优先级次序
关系运算符是用来进行比较的符号,
C
语言中提供了
6
种关系运算符:

关系表达式
关系表达式是指用关系运算符将两个表达式连接起来组成的有意义的式子。

在
C
语言中,用
1
(非
0
)表示关系表达式的值为真(条件成立),
0
表示关系表达式的值为假(条件
不成立),即关系表达式的值要么为
1
(条件成立),要么为
0
(条件不成立)
逻辑运算符及其优先级
逻辑运算符是构成复杂的复合条件的运算符。
C
语言中提供了
3
种逻辑运算符:
符号 名称 分类 说明
&& 逻辑 与 双目运算 符 两个量都为真时为真(1)
,否则为假
(0)
|| 逻辑 或 双目运算 符 两个量中只要有一个为真即为真(1)
,只有两个量都为假时才为 假(0)
! 逻辑 非 单目运算 符 运算量真时变为假(0)
,假时变为真
(1)
逻辑表达式
a
b
!a
!b
a&&b
a||b
非
0 非0 0 0 非0 非0
非
0 0 0 非0 0 非0
0 非0 非0 0 0 非0
0 0 非0 非0 0 0
用逻辑运算符将关系表达式或逻辑表达式连接起来的构成有意义的式子。
逻辑表达式中各种运算符的优先级顺序如下:
!(
逻辑非
) →
算术运算符
(+-*/%)→
关系运算符
(>
、
<
、
>=
、
<=
、
==
、
!=)→&&
和
|| →
赋值运算符
(=
、
+=...)
C
语言编译系统在表示逻辑运算符结果时:用
1
表示真,用
0
表示假。
案例:
假设
a = 4,b = 5
,则:
!
a
--
0
a
&&
b
--
1
a
||
b
--
1
!
a
||
b
--
1
4
&&
0
||
2
--
1
小贴士:
实际上,逻辑运算符两侧的运算对象不但可以是
0
和
1
,或者是
0
和非
0
,而且也可以是字符型、
实型和指针型等。系统最终是以
0
和非
0
来判定他们的真假的,例如:
'c' && 'd'
结果为
1
用
if
语句实现分支结构
单分支:
if..
语法:
//
语法
1
:舍弃
{}
if
(
条件表达式
)
单语句
;
//
语法
2
:保留
{}
if
(
条件表达式
)
{
单语句或者复合语句
;
功能
若表达式值为真(非
0
),则执行表达式后面的语句,执行完该语句后继续执行
if
语句后的语
句。
若表达式值为假(
0
)则不执行表达式后面的语句而直接执行
if
语句后面的语句。
说明:
如果表达式后面的是复合语句,则要用一对花括号
{}
括起来,单语句可有可无。
功能
若表达式值为真(非
0
),则执行表达式后面的语句,执行完该语句后继续执行
if
语句后的语
句。
若表达式值为假(
0
)则不执行表达式后面的语句而直接执行
if
语句后面的语句。
说明:
如果表达式后面的是复合语句,则要用一对花括号
{}
括起来,单语句可有可无。

案例:
需求:有
a,b,c
三个数,要求从控制台输入,并且求出最大值
分析:
1.
通过控制输入
a,b,c
的值
2.
创建一个变量
max
,用来存放
a,b,c
中的最大值,默认
a
是最大值(这样可以减少一次
判断)
3.
让
b,c
和
max
进行比较,将最大值存入
max
代码:
/*************************************************************************
> File Name: demo02.c
> Author: FPF
> Description:
单分支案例:有
a,b,c
三个数,要求从控制台输入,并且求出最大值
> Created Time: 2025
年
02
月
11
日 星期二
10
时
58
分
16
秒
************************************************************************/
#include <stdio.h>
int
main
(
int
argc
,
char *
argv
[])
{
//
创建四个变量
a,b,c,max
int
a
,
b
,
c
,
max
;
//
通过键盘录入数据给
a,b,c
printf
(
"
请输入三个整数:
\n"
);
scanf
(
"%d%d%d"
,
&
a
,
&
b
,
&
c
);
//
默认
a
是最大值
max
=
a
;
//
让最大值分别和
b
和
c
比较
if
(
max
<
b
)
max
=
b
;
// b
是
a,b
中的最大值
if
(
max
<
c
)
max
=
c
;
//
其实就是
a
,
b
中的最大值和
c
比较,得到三者中的最大值
printf
(
"%d,%d,%d
中的最大值是
%d\n"
,
a
,
b
,
c
,
max
);
return
0
;
}
运行结果:

有可能产生的问题:
① scanf()
同时输入多个变量时,默认使用空格、
Tab
键、回车键进行区分。
②
在变量赋值前使用变量,导致运算结果错误(变量未赋值前,系统会给变量分配随机
值)
双分支:
if..else..
语法:
//
语法
1
:舍弃
{}
if
(
条件表达式
)
单语句
1
;
else
单语句
2
;
//
语法
2
:保留
{}
if
(
条件表达式
)
{
单语句
1
或者复合语句
1
;
}
else
{
单语句
2
或者复合语句
2
;
}
注意:
else
语句本身不能单独存在,必须和
if
配合使用
功能:
若表达式的值为
1
,则执行语句
1
;否则执行语句
2
。不管条件表达式成不成立都要执行一个语
句,其次需要注意的是,语句
1
和语句
2
都可以是单语句或者复合语句。
说明:
if..else..
结构可以实现双分支选择结构。
C
语言允许
if..else..
结构嵌套。即在语句
1
与语句
2
中又可
以包含完整的
if
语句或者
if..else..
结构,并且这种嵌套可以多层(为了保证程序的执行效率,建议不
超过
4
层)。利用
if..else..
结构的嵌套,可以实现多分支选择结构
功能:
若表达式的值为
1
,则执行语句
1
;否则执行语句
2
。不管条件表达式成不成立都要执行一个语
句,其次需要注意的是,语句
1
和语句
2
都可以是单语句或者复合语句。
说明:
if..else..
结构可以实现双分支选择结构。
C
语言允许
if..else..
结构嵌套。即在语句
1
与语句
2
中又可
以包含完整的
if
语句或者
if..else..
结构,并且这种嵌套可以多层(为了保证程序的执行效率,建议不
超过
4
层)。利用
if..else..
结构的嵌套,可以实现多分支选择结构
代码:
/*************************************************************************
> File Name: demo03.c
> Author: FPF
> Description:
双分支案例:计算并输出分段函数的值
> Created Time: 2025
年
02
月
11
日 星期二
11
时
31
分
17
秒
#include <stdio.h>
int
main
(
int
argc
,
char *
argv
[])
{
//
创建两个变量存储
x,y
int
x
,
y
;
//
通过键盘录入
x
printf
(
"
请输入一个整数:
\n"
);
scanf
(
"%d"
,
&
x
);
//
校验
if
(
x
<
0
)
y
= -
2
;
else
y
=
2
;
//
打印输出测试结果
printf
(
"x=%d,y=%d\n"
,
x
,
y
);
return
0
;
}
运行结果:

注意:对于单语句的双分支,我们可以使用三目(三元)运算符的写法简化
三目运算符
语法:
表达式
1
?
表达式
2
:
表达式
3
;
说明:
①
如果表达式
1
的结果为真,就执行表达式
2
,否则就执行表达式
3
②
三目运算符的写法实际上就是单语句的双分支的缩略写法
案例:
需求:将上面双分支的案例改造为三目运算符的的写法
代码:
/*************************************************************************
> File Name: demo03.c
> Author: FPF
> Description:
双分支案例:计算并输出分段函数的值
> Created Time: 2025
年
02
月
11
日 星期二
11
时
31
分
17
秒
************************************************************************/
#include <stdio.h>
int
main
(
int
argc
,
char *
argv
[])
{
//
创建两个变量存储
x,y
int
x
,
y
;
//
通过键盘录入
x
printf
(
"
请输入一个整数:
\n"
);
scanf
(
"%d"
,
&
x
);
//
校验
y
=
x
<
0
? -
2
:
2
;
//
打印输出测试结果
printf
(
"x=%d,y=%d\n"
,
x
,
y
);
return
0
;
}
运行结果:

多分支:
if..else if....else..
语法:
//
写法
1
:嵌套
if..else..(
不推荐
)
if
(
表达式
1
)
语句
1
;
else
if
(
表达式
2
)
语句
2
;
else
...
else
if
(
表达式
n
)
语句
n
;
else
语句
n
+
1
;
//
写法
2
:并列
if..else if....else..(
推荐
)
if
(
表达式
1
)
语句
1
;
else if
(
表达式
2
)
语句
2
;
...
[
else if
(
表达式
n
)
语句
n
;]
[
else
语句
n
+
1
;]
// else
是可选,写不写由我们最终的需求决定
流程图:
注意:多分支中,同一时刻只能满足一个分支。
案例:
需求:根据学生的成绩,对学生进行分级:
成绩
>= 90 A
成绩
>= 80 B
成绩
>= 60 C
成绩
< 60 D
代码:
/*************************************************************************
> File Name: demo04.c
> Author: FPF
> Description:
多分支案例:根据学生的考试成绩分级
> Created Time: 2025
年
02
月
11
日 星期二
14
时
39
分
22
秒
************************************************************************/
#include <stdio.h>
//
方式
1
:借助于执行顺序,减少判断条件
int
if_test1
()
{
//
创建一个变量,用来存储输入的成绩
int
score
;
//
通过键盘录入成绩
printf
(
"
请输入一个整数:
\n"
);
scanf
(
"%d"
,
&
score
);
//
校验
if
(
score
>=
90
)
printf
(
"A\n"
);
else if
(
score
>=
80
)
printf
(
"B\n"
);
else if
(
score
>=
60
)
printf
(
"C\n"
);
else
printf
(
"D\n"
);
}
//
方式
2
:不借助执行顺序,做更精确的判断
int
if_test2
()
{
//
创建一个变量,用来存储输入的成绩
int
score
;
//
通过键盘录入成绩
当前第
13
页,共
25
页
if..else
结构注意点
if..else
结构中的语句
1
和语句
2
都可以是复合语句。
在
if..else
结构中,语句
1
和语句
2
都可以是空语句。
printf
(
"
请输入一个整数:
\n"
);
scanf
(
"%d"
,
&
score
);
//
校验
if
(
score
>=
60
&&
score
<
80
)
printf
(
"C\n"
);
else if
(
score
>=
80
&&
score
<
90
)
printf
(
"B\n"
);
else if
(
score
>=
90
)
printf
(
"A\n"
);
else
printf
(
"D\n"
);
}
int
main
(
int
argc
,
char *
argv
[])
{
if_test1
();
if_test2
();
return
0
;
}
if..else
结构注意点
if..else
结构中的语句
1
和语句
2
都可以是复合语句。
在
if..else
结构中,语句
1
和语句
2
都可以是空语句。
if
语句的嵌套
语法:
if
(..)
if
(..)
语句
1
;
else
语句
2
;
else
if
(..)
语句
3
;
else
语句
4
;
流程图:
注意:
① else
总是与前面最近的未配对的
if
配对使用
②
可通过增加
{}
来确定配对关系
③
只要
if
中包含
if
,都属于是
if
语句的嵌套
案例:
/*************************************************************************
> File Name: demo04.c
> Author: FPF
> Description:
多分支:
if..else if....else..
> Created Time: 2024
年
11
月
29
日 星期五
14
时
20
分
18
秒
************************************************************************/
/**
*
要求:根据学生的成绩,对学生进行分级,
成绩
>= 90,A
成绩
>= 80,B
成绩
>= 60,C
成绩
< 60,D
*/
#include <stdio.h>
//
方式
1
:借助于执行顺序,减少判断的条件
int
if_test1
()
{
//
创建一个变量,用来存放输入的成绩
int
score
;
//
通过控制台输入一个成绩
printf
(
"
请输入一个整数:
\n"
);
scanf
(
"%d"
,
&
score
);
//
校验,分级
95
if
(
score
<
0
||
score
>
100
)
{
printf
(
"
您的输入不合法!
\n"
);
}
else
{
if
(
score
>=
90
)
{
printf
(
"A\n"
);
}
else if
(
score
>=
80
)
{
printf
(
"B\n"
);
}
else if
(
score
>=
60
)
{
printf
(
"C\n"
);
}
else
{
printf
(
"D\n"
);
}
}
}
//
方式
2
:不借助于执行顺序,做更精准的判断
int
if_test2
()
{
//
创建一个变量,用来存放输入的成绩
int
score
;
//
通过控制台输入一个成绩
printf
(
"
请输入一个整数:
\n"
);
scanf
(
"%d"
,
&
score
);
//
校验,分级
if
(
score
<
0
||
score
>
100
)
{
printf
(
"
您的输入不合法!
\n"
);
}
else if
(
score
>=
60
&&
score
<
80
)
{
printf
(
"C\n"
);
}
else if
(
score
>=
80
&&
score
<
90
)
{
printf
(
"B\n"
);
}
else if
(
score
>=
90
)
{
print
f
(
"A\n"
);
}
else
{
printf
(
"D\n"
);
}
}
int
if_test3
()
{
//
需求:判断一个数是奇数还是偶数
int
num
;
printf
(
"
请输入一个整数:
\n"
);
scanf
(
"%d"
,
&
num
);
//
校验
if
(
num
==
0
)
{
printf
(
"0
既不是偶数也不是奇数!
"
);
}
else
{
if
(
num
%
2
==
0
)
{
printf
(
"%d
是偶数!
\n"
,
num
);
}
else
{
printf
(
"%d
是奇数!
\n"
,
num
);
}
}
}
int
main
(
int
argc
,
char *
argv
[])
{
if_test1
();
if_test2
();
if_test3
();
return
0
;
}