C++条件运算符(三目运算符+逗号运算符)案例实练

1.条件运算符“? :”

是C++中唯一的三目运算符,其形式为:     表达式1 ?表达式2 :表达式3

运算方式为:先计算表达式1的值,如果其值为非0(真), 则表达式2的值就是整个表达式的最终结果;否则表达式3的值就是整个表达式的值

表达式1是bool类型,表达式2、3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。 例如:用条件运算符定义求两个数a和b的最大值

#include<iostream>
using namespace std;
int main()
{
	int a = 3;
	int b = 4;
	int max = a > b ? a : b;
	cout << "第一种表达方式结果max=" << max << endl;
	int max2 = ((a > b) ? a : b);
	cout << "第二种表达方式结果max2=" << max2 << endl;
	system("pause");
	return 0;
}

输出结果截图

 可见,即使不加()对运算顺序做区分,三目运算符也遵循以下规则

1.2-条件运算符的结合性是自右向左 

    - a>b?a:c>d?c:d     相当于:  a>b?a:(c>d?c:d)

1.3-条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符

    - 例如:a>b?a-b:b-a   相当于:  (a>b)?(a-b):(b-a)


c


2.逗号运算符

- 格式:表达式1,表达式2,…,表达式n

- 求解顺序及结果: 先求解表达式1,再求解表达式2,最后求解表达式n的值 最终结果为表达式n的值

   例如:    d1,d2,d3,d4 此处,d1、d2、d3、d4都是一个表达式

- 整个表达式的值由最后一个表达式的值d4决定

- 计算顺序是从左至右依次计算各个表达式的值,最后计算的表达式的值和类型便是整个表达式的值和类型

例程1:

#include<iostream>
using namespace std;
int main()
{
	int a = 1, b, c;//int a=1; b,c也是int类型只不过没有在这一行初始化
	a = (b = a + 1, c = b + 1, a = c + 1) + a;//a=(b=2,c=2+1,a=3+1)+4
	//b = (a = c + 1, c = a + 2, b = a + 1) + b;//a=(a=2+1 +1,c=2+1+1 +2,b=4+1)+5
	cout << "a=" << a << "   "  << "b=" <<b<< "   " <<"c="<< c << endl;//a=8,b=2,c=3
	system("pause");
	return 0;
}

输出的a=?,b=?


-原理

*使用逗号运算符是为了把几个表达式放在一起

*整个逗号表达式的值为系列中最后一个表达式的值

*从本质上讲,逗号的作用是将一系列运算按顺序执行

<表达式1>  <表达式2>

/*求解过程是:先求解表达式 1,再求解表达式 2。整个逗号表达式的值是表达式 2 的值

最右边的那个表达式的值将作为整个逗号表达式的值,其他表达式的值会被丢弃*/

    int a = 1, b, c;//int a=1; b,c也是int类型只不过没有在这一行初始化
    a = (b = a + 1, c = b + 1, a = c + 1) + a;//a=8

在这里,首先把括号里的b赋值为a+1(1+1=2),把c赋值为b+1(2+1=3),把a赋值为c+1(2+1=3),尽管如此,还是取最右边的表达式,也就是a=c+1=(2+1)+(a+1)+1=,最后加上a的值a

值经过括号内的三个表达式赋值,已全部更新,b=2,c=3,a=4,取最右边的a=4和括号外的+a进行运算,则a=a+a=4+4=8;

这里有迭代赋值的思想,总之更新变量就行

下面这个例子充分体现了逗号运算符只取最右边表达式的结果

    int x = 1;
    x = (x + 1, x + 2, x + 3) + x;//(1+3)+1=5,(x+3)+x;
    cout << "x=" <<x<< endl;//x=5(运行结果)


b,c没有初始化,默认值是0,不信的话,运行下面这段代码,结果跟上面那段代码是一样的

#include<iostream>
using namespace std;
int main()
{
	int a = 1;
	int b = 0;
	int c = 0;
	a = (b = a + 1, c = b + 1, a = c + 1) + a;//a=(b=2,c=2+1,a=3+1)+4
	//b = (a = c + 1, c = a + 2, b = a + 1) + b;//a=(a=2+1 +1,c=2+1+1 +2,b=4+1)+5
	cout << "a=" << a << "   "  << "b=" <<b<< "   " <<"c="<< c << endl;//a=8,b=2,c=3
	system("pause");
	return 0;
}

var = (count=19, incr=10, count+1);

在这里,首先把 count 赋值为 19,把 incr 赋值为 10,然后把 count 加 1,最后,把最右边表达式 count+1 的计算结果 20 赋给 var。上面表达式中的括号是必需的,因为逗号运算符的优先级低于赋值操作符

    int x1 = 1;
    int x2 = 2;
    int x3 = 3;
    int y = (x1 =x2+ 1, x2 =x1+ 1, x3=x2 + 1) + 1;//(x1=3,x2=1+1=2,x3=x1+1+1
    int y1 = (x1 = 1, x2 = 4, x3 = x2+6) + x3;
    cout << "y1=" << y1 << endl;//y1=20(运行结果)
    cout << "y=" << y << endl;//y=6(运行结果)

解析1:

int y = (x1 =x2+ 1, x2 =x1+ 1, x3=x2 + 1) + 1

这一段含逗号运算符的括号内与最右边的表达式x3=x2+1有关的数据是:

x2,而x2=x1+1,这里的x1=x2+1  涉及到了前两个左边的表达式,所以依次计算

x1=x2+1=2+1=3         - ->                     x2=x1+1=3+1=4        -->                      x3=x2+1=4+1=5

最后再加上括号外的值1,就是y=5+1=6

解析2:

int y1 = (x1 = 1, x2 = 4, x3 = x2+6) + x3;

这一段含逗号运算符的括号内与最右边表达式x3=x2+6相关的数据是

x2,而x2与x2=4相关

所以括号内的最右边表达式结果为x3=4+6=10

最后在加上括号外的x3的最新值也是x3=4+6=10

最后y1=10+10=20

​​​​​​​这种方法应该叫倒推法叭~


尝试运行下面的实例,理解逗号运算符的用法

#include <iostream>
using namespace std;
 
int main()
{
   int i, j;
   
   j = 10;
   i = (j++, j+100, 999+j);
 
   cout << i;
   
   return 0;
}

这个程序中,j 最初的值为 10,然后自增到 11,接着再加上 100 并将结果赋值给 j,最后 j 再加上 999,得出结果 1110

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
三目运算符又称为三元运算符条件运算符,在多种编程语言中都有使用。它的作用是进行条件判断,可以理解为if条件判断的简化版。\[1\]一元运算符只需要一个数据进行操作,例如取反、自增、自减;二元运算符需要两个数据进行操作,例如加法、减法、乘法等等;而三元运算符则需要三个数据进行操作。\[2\]在JavaScript中,三目运算符的基本格式是:条件表达式 ? 表达式1 : 表达式2,其中条件表达式为真时返回表达式1,否则返回表达式2。\[3\]在Python中也有类似的三目运算符,但语法略有不同。 #### 引用[.reference_title] - *1* *3* [什么是三目运算符三目运算符怎么使用?](https://blog.csdn.net/zy1992As/article/details/127884410)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [JAVA 系列——>三元运算符三目运算符)](https://blog.csdn.net/qq_16397653/article/details/103601970)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值