从C++0基础到C++入门(第十四节:流程程序结构第三部分【三目运算符与多种书写方式)】)
一. 三目运算符
1.1 基本概念
三目运算符(条件运算符)是C++中唯一的三元运算符,语法形式为:条件表达式 ? 表达式1 : 表达式2
。
其逻辑为:若条件表达式为真,则返回表达式1的值;否则返回表达式2的值。
1.2 三目运算符的语法结构
变量 = (条件) ? 值1 : 值2;
- 若条件成立,变量赋值为
值1
;否则赋值为值2
。 - 条件可以是任何能转换为布尔值的表达式。
1.3 三目运算符的典型用法
示例1:比较两个数的大小
int a = 5, b = 3;
int max = (a > b) ? a : b; // max的值为5
示例2:判断奇偶性
int num = 4;
string result = (num % 2 == 0) ? "偶数" : "奇数"; // result为"偶数"
1.4 三目运算符的嵌套使用
三目运算符可以嵌套,但需注意可读性:
int x = 10, y = 20, z = 30;
int largest = (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z);
// 等效于找出x、y、z中的最大值
1.5 三目运算符与if-else的对比
简洁性
三目运算符适合简单条件赋值,减少代码行数:// if-else实现 int score = 85; string grade; if (score >= 60) grade = "及格"; else grade = "不及格";// 三目运算符实现 string grade = (score >= 60) ? "及格" : "不及格";
局限性
复杂逻辑或多分支条件建议使用if-else
或switch
,避免嵌套三目运算符导致代码晦涩。
1.6 注意事项
优先级问题
三目运算符优先级较低,建议用括号明确运算顺序:int a = 1, b = 2; int c = (a == b) ? 0 : a + b; // 括号避免歧义
类型一致性
表达式1和表达式2的类型需兼容,否则可能引发隐式转换:int d = (true) ? 3.14 : 2; // d被赋值为3(double转int)
二. 实践练习
2.1 基础练习
进阶挑战
用嵌套三目运算符实现三个变量的最小值查找:int p = 5, q = 2, r = 7; int min = (p < q) ? ((p < r) ? p : r) : ((q < r) ? q : r);
2.2实战案例(比较数字大小)
要求:通过三目运算符实现两个输入值的比较,输出较大值。
#include<iostream>
using namespace std;
int main()
{int a, b, c;cout << "请输入两个值,我将为您比较大小" << endl;cin >> a >> b;// 写法1:直接赋值a > b ? c = a : c = b;cout << "(三目运算符的第一种写法)最大值:" << c << endl;// 写法2:表达式返回值赋值c = (a > b ? a : b);cout << "(三目运算符的第二种写法)最大值:" << c << endl;// 写法3:输出时直接计算(避免赋值)cout << "(三目运算符的第三种写法)最大值:" << (a > b ? a : b) << endl;return 0;
}
2.3 案例具体剖析:三目运算(三种不同写法)
直接赋值式
a > b ? c = a : c = b;
通过分支直接修改变量c的值。
表达式返回值式
c = (a > b ? a : b);
整个三目表达式返回a或b的值后赋值给c,推荐此写法。
内联输出式
cout << (a > b ? a : b);
直接在输出流中使用,避免中间变量,适合简单场景。
注意事项
- 避免在输出语句中混合赋值操作(如原第三种写法),可能引发未定义行为。
- 三目运算符优先级较低,复杂表达式建议加括号明确优先级。
- 可嵌套使用但会降低可读性,例如比较三个数:
int max = (a > b) ? (a > c ? a : c) : (b > c ? b : c);
扩展应用
三目运算符可用于任何需要条件选择的场景,如初始化、函数返回值等:
// 初始化应用
const char* msg = (score >= 60) ? "及格" : "不及格";// 函数返回应用
int getMax(int x, int y) {return (x > y) ? x : y;
}