什么是三目运算符
三目运算符是分支结构中的一种运算,根据不同的条件,执行不同的操作并返回不同的值。
语法:retvalue = expression ? retvalue1 : retvalue2;
如果表达式 expression 的值为真,那么就返回 retvalue1,否则,就返回 retvalue2。
也可以分开写:expression ? retvalue = retvalue1 : retvalue = retvalue2;
三目运算符怎么用
基本用法
我们看一下三目运算符与if
语句的关系。
if
语句:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
if(a>b) cout<<a;
else cout<<b;
return 0;
}
三目运算符:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
a>b?cout<<a:cout<<b;
return 0;
}
if(a>b) cout<<a;
else cout<<b;
对应着
a>b?cout<<a:cout<<b;
说明:
a>b?cout<<a:cout<<b
表示如果 a>b
为真,输出
a
a
a,否则输出
b
b
b。
进阶用法
嵌套用法,见下。
a>b?printf(">"):(a==b?printf("="):printf("<"));
对应着
if(a>b) printf(">");
else
{
if(a==b) printf("=");
else printf("<");
}
以上代码为 B2039 整数大小比较 的部分代码。
注意事项
- 三目运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此
max=(a>b)?a:b
可以去掉括号而写为 max=a>b?a:b
。
- 三目运算符
?
和 :
是一对运算符,不能分开单独使用。
- 三目运算符的结合方向是自右至左。
- 三目运算符两种情况的返回值需要相同。(见此题)
相关题目
B2035 判断数正负
https://www.luogu.com.cn/problem/B2035
给定一个整数
N
N
N,判断其正负。如果
N
>
0
N>0
N>0, 输出 positive
; 如果
N
=
0
N=0
N=0, 输出 zero
; 如果
N
<
0
,
N<0,
N<0, 输出 negative
。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
cin>>n;
// if(n>0) cout<<"positive";
// if(n==0) cout<<"zero";
// if(n<0) cout<<"negative";
cout<<(n>0?"positive":(n==0?"zero":"negative"));
return 0;
}
B2037 奇偶数判断
https://www.luogu.com.cn/problem/B2037
给定一个整数,判断该数是奇数还是偶数。如果
n
n
n 是奇数,输出 odd
;如果
n
n
n 是偶数,输出 even
。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
// if(n&1) cout<<"odd";
// else cout<<"even";
cout<<(n&1?"odd":"even");
return 0;
}
B2052 简单计算器
https://www.luogu.com.cn/problem/B2052
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
char c;
cin>>a>>b>>c;
c=='+'?cout<<a+b:(c=='-'?cout<<a-b:(c=='*'?cout<<a*b:(c=='/'?(b!=0?cout<<a/b:cout<<"Divided by zero!"):cout<<"Invalid operator!")));
return 0;
}
注意:这道题有个小坑。
如果你写成了
cout<<(c=='+'?a+b:(c=='-'?a-b:(c=='*'?a*b:(c=='/'?(b!=0?a/b:"Divided by zero!"):"Invalid operator!"))));
会编译错误,出现
[Error] operands to ?: have different types 'int' and 'const char*'
是因为三目运算符两种情况的返回值需要相同。
遇到此种情况,将代码改为
cout<<(c=='+'?a+b:(c=='-'?a-b:(c=='*'?a*b:(c=='/'?(b!=0?a/b:"Divided by zero!"):"Invalid operator!"))));
或者老老实实写 if
语句吧!
创作不易,希望点赞+收藏。
关注作者 PineappleSummer,学习更多实用算法知识!