当前课程知识点:C语言程序设计 > 第5章 选择结构程序设计 > 5.3 条件运算符和条件表达式 > 条件运算符和条件表达式
同学们大家好
本节我们来学习C语言中的条件运算符
和条件表达式
有时
if语句执行时
当被判别的表达式的值为
真或假时
都执行一个赋值语句
且向同一个变量赋值
如
if
a>b
max=a
else max=b
当a>b时将a的值赋给max
当a<=b时将b的值赋给max
可以看到无论a>b是否满足
都是给同一个变量赋值
C提供条件运算符和条件表达式
来处理这类问题
可以把上面的if语句改写为
max=(a>b)?a: b;
赋值号右侧的
( a>b)? a:b
是一个条件表达式
?:是条件运算符
如果
a>b
条件为真
则条件表达式的值等于a
否则取值b
如果a等于5
b等于3
则条件表达式
(a>b)? a:b 的值
就是a的值5
把它赋给变量max
因此max的值为5
条件运算符要求有3个操作对象
称为三目运算符
它是C语言中唯一的一个三目运算符
条件表达式的一般形式为
表达式1?表达式2:表达式3
条件运算符的执行顺序
先求解表达式1
若为非0真
则求解表达式2
此时表达式2的值就作为整个条件表达式的值
若表达式1的值为0
假
则求解表达式3
表达式3的值就是整个条件表达式的值
赋值表达式max=(a>b)? a:b
的执行结果
就是将条件表达式的值赋给max
也就是将a和b二者中大者赋给max
条件运算符优先级高于赋值运算符
低于关系运算符和算术运算符
因此max= (a>b)?a:b
等价于
max= a> b?a:b
a> b? a:b+1
等价于
a>b ? a:(b+1)
而不是
(a>b?a:b)+1
条件表达式中表达式2和表达式3
不仅可以是数值表达式
还可以是赋值表达式或函数表达式
例如
a>b ? (max=a):(max=b);
表达式加一个分号
就形成了表达式语句
相当于
此时
表达式2和表达式3是赋值表达式
注意
赋值表达式两侧有括号
请同学们想一想
为什么? 例如
a> b?printf
"%d,a:
printf
%d,b
上面条件表达式语句相当于
以下if...else语句
例题
输入一个字符
判别它是否为大写字母
如果是
将它转换成小写字母
如果不是
不转换
然后输出最后得到的字符
解题思路
可以用条件表达式来处理
当字母是大写时
转换成小写字母
否则不转换
编写程序如图所示
运行结果如图所示
在本程序中
条件表达式
ch>='A' && ch<='Z'
?(ch+32):ch
的作用是
如果字符变量ch的值为大写字母
则条件表达式的值为
ch+32
即相应的小写字母
32是小写字母和大写字母ASCII的差值
如果ch的值不是大写字母
则条件表达式的值为ch
即不进行转换
可以看到
条件表达式相当于一个if语句
用它处理简单的选择结构可使程序更简洁
本节的内容就讲到这里
同学们再见
-计算思维与计算机
--计算思维与计算机
--计算思维与计算机
--计算思维和计算机
-2.1 程序设计语言的发展及其特点和应用
--程序设计语言的特点及发展
- 2.2 C语言程序的基本结构及编制C语言程序的基本步骤
--C语言程序的结构和编制步骤
-3.1 C语言的数据类型
--C语言的数据类型
--C语言的数据类型
-3.2 常量
--常量
--常量
-3.3 什么是变量
--什么是变量
--什么是变量
-3.4 如何进行算术运算
--如何进行算术运算
--如何进行算术运算
-3.5 赋值运算符和逗号运算符
--赋值运算符和逗号运算符
-3.6 数据类型转换
--数据类型转换
--数据类型转换
-4.1 格式化输出printf
--格式化输出
-4.2 格式化输入scanf及字符数据的非格式化输入输出
--格式化输入
-5.1 关系运算符和关系表达式
--关系运算符和关系表达式
-5.2 逻辑运算符和逻辑表达式
--逻辑运算符和逻辑表达式
-5.3 条件运算符和条件表达式
--条件运算符和条件表达式
-5.4 if语句
--if语句
--if语句
-5.5 switch语句
--switch语句
--switch语句
-6.1 while语句
--while语句
--while语句
--do-while语句
-6.2 for语句
--for语句
--for语句
-6.3 循环的嵌套
--循环的嵌套
--循环的嵌套
-6.4 break语句和continue语句
--break和continue语句
-7.1 一维数组的定义和引用
--一维数组的定义和引用
-7.2 一维数组的赋值
--一维数组的赋值
--一维数组的赋值
-7.3 二维数组的定义和引用
--二维数组的定义和引用
-7.4 二维数组的赋值
--二维数组的赋值
--二维数组的赋值
-7.5 字符串的本质
--字符串的本质
--字符串的本质
-7.6 字符串操作的常用函数
--字符串常用函数
-7.7 字符串数组
--字符串数组
--字符串数组
-8.1 函数概述
--函数概述
--函数概述
-8.2 有参函数
--有参函数
--有参函数
-8.3 函数参数的传递方式
--函数参数的传递方式
-8.4 变量的作用域和生存期
--变量的作用域和生存期
-8.5 变量的存储类型
--变量的存储类型
--变量的存储类型
-8.6 函数的嵌套和递归调用
--函数的嵌套和递归调用
-8.7 函数的作用域与封装
--函数的作用域与封装
-9.1 指针变量的概念(上)
--指针变量的概念(上)
-9.2 指针变量的概念(下)
--指针变量的概念(下)
-9.3 指向一维数组的指针变量
--指向一维数组的指针变量
-9.4 指向二维数组的指针变量(上)
--指向二维数组的指针变量(上)
-9.5 指向二维数组的指针变量(下)
--指向二维数组的指针变量(下)
-9.6 动态内存分配
--动态内存分配
--动态内存分配
-10.1 编译预处理
--编译预处理
-11.1 用户自己建立数据类型
--用户自己建立数据类型
-11.2 定义结构体类型变量
--定义结构体类型变量
-11.3 结构体变量的引用与初始化
-11.4 结构体数组
--结构体数组
--结构体数组
-11.5 指向结构体类型数据的指针
--指向结构体类型数据的指针
-12.1 文件的基本概念和文件指针
--文件的基本概念和文件指针
-12,2 文件的打开和关闭
--文件的打开和关闭
--文件的打开和关闭
-12.3 文本文件读写
--文本文件读写
--文本文件读写
-12.4 二进制文件读写
--二进制文件读写
--二进制文件读写