4.7 条件运算符

练习4.21

	int main() 
	{
		vector<int> a = { 0,1,2,3,4,5,6,7,8,9 };
		for (auto i : a)
		{
			cout << (i % 2 == 0 ? i : 2 * i) << " ";
		}

     }

在这里插入图片描述
练习4.22

int main() 
	{
		int grade = 0;
		cin >> grade;
		string fg;

		fg = (grade > 90) ? "high pass" : (grade > 75) ? "pass":(grade < 60)?"fail":"low pass";
		cout << fg;

     }
int main() 
	{
		int grade = 0;
		cin >> grade;
		string fg;

		if (grade > 90)
			cout << "high pass";
		else {
			if (grade > 75)
				cout << "pass";
			else
			{
				if (grade < 60)
					cout << "fail";
				else
					cout << "low pass";
			}
		}
     }

我觉得条件运算符好理解一些,但是会要求表达式类型相同或可能转换为某个公共类型,所以更加束缚一些。

练习4.23
错误在于==两端的值,一个是字符串字面值,一个是字符字面值,无法比较,将右侧的字符更改成字符串即可。

int main() 
	{
		string s = "word";
		string p1 = s + s[s.size() - 1];
		cout << p1 << endl; //wordd

		string p2 =s + s[s.size() - 1] == "s" ? "" : "s";
		//先加法,wordd
		//再==, "wordd" = "s" ?
		//再条件?:
		//0?"":"s"
		cout << p2 << endl; //"s"
     }`

练习4.24
举例解释左结合律和右结合律:

关系运算符满足左结合律

if(i < j < k) //拿i<j的布尔值结果和k比较

if条件语句部分首先将i、j和第一个<运算符组合在一起,其返回的布尔值再作为第二个<运算符的左侧运算对象。也就是说,k比较的对象是第一次比较得到的那个或真或假的结果。

赋值运算满足右结合律

int ival, jval;
ival = jval = 0; //正确:都被赋值为0

靠右的赋值运算jval = 0作为靠左的赋值运算符的右侧运算对象。又因为赋值运算返回的是其左侧运算对象,所以靠右的赋值运算的结果(即jval)被赋给了ival。

下面此题左结合律的算法:

fg = ((grade > 90) ? "high pass"(grade<60))?"fail":"pass";

"high pass"和grade<60不是同一类型,编译错误,但能运行。
在这里插入图片描述

运行时是上图中的代码

  • 如果grade大于90
//实际上给fg赋值分为2步
fg = grade > 90 ? " high pass" : (grade <60); //grade > 90 为真, 返回“high pass”
fg = "high pass" ? "fail" : "pass"; //非空字符串,条件为真,返回“fail”
  • 如果grade小于等于90,大于等于60
fg = grade > 90 ? " high pass" : (grade <60); //grade > 90 为假,返回 (grade < 60)
fg = (grade < 60) ? "fail" : "pass"; //条件为假,返回“pass”
  • 如果grad小于60,输出fail
fg = grade > 90 ? " high pass" : (grade <60); //grade > 90 为假,返回 (grade < 60)
fg = (grade < 60) ? "fail" : "pass";  //条件为真,返回“fail”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值