17.运算符-三目运算符
17.1 知识点
三目运算符是什么
三目运算符(也可以叫条件运算符)是根据一个条件表达式的真假来选择不同的值进行返回。
基本语法
- 套路:三个空位和两个符号
- 语法格式:
条件表达式 ? 为真时返回的值 : 为假时返回的值;
- 关键信息:
bool
结果决定返回值- 如果条件表达式为
true
,返回冒号前的值。 - 如果条件表达式为
false
,返回冒号后的值。
- 如果条件表达式为
- 三目运算符会有返回值,并且返回值的大类型必须一致。
三目运算符的具体使用
条件表达式(第一个空位)
- 必须是一个返回布尔值的表达式,能够表示真假的条件:
- 关系表达式:返回真假,例如
3 > 1
。 - 逻辑运算符表达式:返回真假,例如
true && false
。 - 算术运算表达式:返回数值,非 0 为真,0 为假。
- 关系表达式:返回真假,例如
第二、三个空位
- 可以是任何表达式,只需确保它们的结果大类型(精度)一致,类型会自动提升。
string str = false ? "条件为真" : "条件为假";
cout << str << endl; // 输出:条件为假
float d = 4 < 1 ? 1 : 0.5f;
cout << d << endl; // 输出:0.5
int i = true && false ? 1 : 2;
cout << i << endl; // 输出:2
i = 3 - 3 ? 1 : 2;
cout << i << endl; // 输出:2
bool b2 = true ? 3 > 1 : !false;
cout << b2 << endl; // 输出:1 (true)
非执行分支的代码不会运行
- 三目运算符会抛弃不执行的分支代码。
int i = 1;
int i2 = true ? i : ++i;
cout << i << endl; // 输出:1
i = 1;
i2 = false ? i : ++i;
cout << i << endl; // 输出:2
- 在
true ? i : ++i
中,由于条件为真,选择i
,因此++i
不会执行。 - 在
false ? i : ++i
中,由于条件为假,选择++i
,因此i
自增了。
三目运算符的结果可以作为左值
如果三目运算符的返回结果是变量,可以将其作为赋值符号中的左值。
int x = 5, y = 10;
(x > y ? x : y) = 999;
cout << x << endl; // 输出:5
cout << y << endl; // 输出:999
int a = 15, b = 10;
(a > b ? a : b) = 999;
cout << a << endl; // 输出:999
cout << b << endl; // 输出:10
- 在
(x > y ? x : y) = 999;
中:- 条件
x > y
为假,返回y
,因此将999
赋值给y
。
- 条件
- 在
(a > b ? a : b) = 999;
中:- 条件
a > b
为真,返回a
,因此将999
赋值给a
。
- 条件
17.2 知识点代码
Lesson17_运算符_三目运算符.cpp
#include <iostream>7
using namespace std;
int main()
{
std::cout << "三目运算符\n";
#pragma region 知识点一 三目运算符是什么
//三目运算符(也可以叫条件运算符)
//它是根据一个条件表达式的真假来选择不同的值进行返回
//套路: 3个空位 2个符号!!!
//固定语法:空位 ? 空位 : 空位;
//关键信息:bool结果 ? 为真时返回的内容 : 为假时返回内容;
//三目运算符 会有返回值,这个返回值大类型必须一致
#pragma endregion
#pragma region 知识点二 三目运算符 具体使用
// 第一个空位 始终是结果为bool类型的表达式(能够表示真假的表达式)
// 关系表达式 返回 真假
// 逻辑运算符表达式 返回真假
// 算数运算符表达式 返回数值(非0为真,0为假)
// 第二三个空位 什么表达式都可以 只要保证他们的结果大类型(精度会自动提升)是一致的
string str = false ? "条件为真" : "条件为假";
cout << str << endl;//条件为假
float d = 4 < 1 ? 1 : 0.5f;
cout << d << endl;//0.5
int i = true && false ? 1 : 2;
cout << i << endl;//2
i = 3 - 3 ? 1 : 2;
cout << i << endl;//2
bool b2 = true ? 3 > 1 : !false;
cout << b2 << endl;//1 true
//三目运算符会抛弃不执行的代码
//如果选择了一个空位,那么另一个空位中的代码逻辑不会执行
i = 1;
int i2 = true ? i : ++i;
cout << i << endl;//1
i = 1;
i2 = false ? i : ++i;
cout << i << endl;//2
#pragma endregion
#pragma region 知识点三 三目运算符结果可以作为左值
//如果三目运算符返回的结果为变量,我们可以将变量作为赋值符号中的左值进行赋值
int x = 5, y = 10;
(x > y ? x : y) = 999;
cout << x << endl;//5
cout << y << endl;//999
int a = 15, b = 10;
(a > b ? a : b) = 999;
cout << a << endl;//999
cout << b << endl;//10
#pragma endregion
}
17.3 练习题
比较两个数的大小,求出最大的
int a = 5;
int b = 10;
string str = a >= b ? "较大的数是a" : "较大的数是b";
cout << str << endl; // 较大的数是
提示用户输入一个姓名,然后再控制台输出姓名,只要输入的不是帅哥,就显示美女
cout << "请用户输入你的姓名" << endl;
string name;
cin >> name;
cout << (name == "帅哥" ? name : "美女") << endl;
依次输入学生的姓名,C++语言的成绩,UE的成绩,两门成绩都大于等于90分,才能毕业,请输出最后的结果
cout << "请用户输入你的姓名" << endl;
string myName;
cin >> myName;
cout << "请用户输入你的C++成绩" << endl;
int cpp;
cin >> cpp;
cout << "请用户输入你的UE成绩" << endl;
int ue;
cin >> ue;
cout << (cpp + ue >= 90 ? "顺利毕业" : "请再学一次!!!!") << endl;
要求用户输入一个年份,然后判断是不是闰年?
闰年判断条件:
- 年份能被400整除(如 2000)
- 或者年份能被4整除,但不能被100整除(如 2008)
cout << "请输入一个年份" << endl;
int year;
cin >> year;
cout << (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0) ? "闰年" : "不是闰年") << endl;
17.4 练习题代码
Lesson17_练习题.cpp
#include <iostream>
using namespace std;
int main()
{
std::cout << "三目运算符练习题\n";
#pragma region 练习题一
//比较两个数的大小,求出最大的。
int a = 5;
int b = 10;
string str = a >= b ? "较大的数是a" : "较大的数是b";
cout << str << endl;//较大的数是
#pragma endregion
#pragma region 练习题二
//提示用户输入一个姓名,然后再控制台输出姓名,只要输入的不是帅哥,就显示美女。
cout << "请用户输入你的姓名" << endl;
string name;
cin >> name;
cout << (name == "帅哥" ? name : "美女") << endl;
#pragma endregion
#pragma region 练习题三
//依次输入学生的姓名,C++语言的成绩,UE的成绩,两门成绩都大于等于90分,才能毕业,请输出最后的结果。
cout << "请用户输入你的姓名" << endl;
string myName;
cin >> myName;
cout << "请用户输入你的C++成绩" << endl;
int cpp;
cin >> cpp;
cout << "请用户输入你的UE成绩" << endl;
int ue;
cin >> ue;
cout << (cpp + ue >= 90 ? "顺利毕业" : "请再学一次!!!!") << endl;
#pragma endregion
#pragma region 练习题四
/*要求用户输入一个年份,然后判断是不是闰年?
闰年判断条件:
年份能被400整除(2000)
或者
年份能被4整除,但是不能被100整除(2008)*/
cout << "请输入一个年份" << endl;
int year;
cin >> year;
cout << (year % 400 == 0 || year % 4 == 0 && year % 100 != 0 ? "闰年" : "不是闰年") << endl;
#pragma endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com