17.三目运算符

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

×

喜欢就点赞,疼爱就打赏