当前位置: 首页 > news >正文

从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的对比

  1. 简洁性
    三目运算符适合简单条件赋值,减少代码行数:

    // if-else实现
    int score = 85;
    string grade;
    if (score >= 60) grade = "及格";
    else grade = "不及格";// 三目运算符实现
    string grade = (score >= 60) ? "及格" : "不及格";
    

  2. 局限性
    复杂逻辑或多分支条件建议使用if-elseswitch,避免嵌套三目运算符导致代码晦涩。

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 基础练习

  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  案例具体剖析:三目运算(三种不同写法)

  1. 直接赋值式

    a > b ? c = a : c = b;
    

    通过分支直接修改变量c的值。

  2. 表达式返回值式

    c = (a > b ? a : b);
    

    整个三目表达式返回a或b的值后赋值给c,推荐此写法。

  3. 内联输出式

    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;
}

 

http://www.lryc.cn/news/607976.html

相关文章:

  • 基于单片机一氧化碳CO检测/煤气防中毒检测报警系统
  • linux中挂载磁盘和卸载
  • Redis面试精讲 Day 7:GEO地理位置应用详解
  • WinForm之ListBox 控件
  • 通过filezilla在局域网下实现高速传输数据
  • 音频3A处理简介之AGC(自动增益控制)
  • C/C++常用字符串函数
  • C++音视频开发:基础面试题
  • Vue 响应式基础全解析2
  • Python 类三大方法体系深度解析:静态方法、类方法与实例方法
  • 归并排序(简单讲解)
  • 【13】VisionMaster入门到精通——测量--线圆测量
  • Coze Studio 概览(六)--知识库管理
  • Flutter开发 初识目录结构
  • #Linux内存管理# 用一个案例详细介绍ARMv7-A架构 缺页中断处理的原理
  • C#多数据库批量执行脚本工具
  • 服装MES系统高效解决方案
  • Apache ShardingSphere 初识使用
  • 语音识别数据集
  • 力扣 二叉树遍历 中序/前序/后序(递归和迭代版)
  • Dify 从入门到精通(第 10/100 篇):使用 Dify 工具集扩展功能
  • 测试环境 PostgreSQL 库连接不上—案例分享
  • 设计Mock华为昇腾GPU的MindSpore和CANN的库的流程与实现
  • 音视频学习(四十六):声音的三要素
  • 【故障处理】redis会话连接满导致业务系统某个模块数据不显示
  • 【Flutter3.8x】flutter从入门到实战基础教程(八):公共state的集中管理机制
  • Kafka——关于Kafka动态配置
  • LeetCode 65:有效数字
  • OSPF综合实验(一)
  • 如何在 Ubuntu 24.04 或 22.04 LTS Linux 上安装 Guake 终端应用程序