第五章 5.2节练习 & 5.3.1节练习

练习5.4

说明下列例子的含义,如果存在问题,试着修改它

(a) while(string::iterator iter != s.end()){/*...*/}

(b) while(bool status = find(word)) {/* .. */}

         if(!status){/* ... */}

解答:

(a) 每次创建迭代器,并确定它不为end()。while的括号中应该是一个赋值语句,而不是判定语句。

while(string::iterator iter = s.begin(), iter != s.end()){/*...*/} (其中begin只是做个例子,并不一定代表表达式的原始意义)

(b) 每次试图查找某个词,在这个词被找到的时候,再做一系列操作。

while(bool status = find(word)) {

         if(!status){/* ... */}

         // ...

}


练习5.5

写一段自己的程序,使用if else语句实现把数字成绩转换为字母成绩的要求。

解答:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

string res[3] = { "fail", "pass", "high pass" };

int main(){
	int grade;
	while (cin >> grade){
		if (grade > 90){
			cout << res[2] << endl;
		}
		else{
			cout << res[grade / 60] << endl;
		}
	}
}

练习5.6

改写上一题的程序,使用条件运算符,代替if else语句。

解答:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

string res[3] = { "fail", "pass", "high pass" };

int main(){
	int grade;
	while (cin >> grade){
		grade > 90 ? (cout << res[2] << endl) : (cout << res[grade / 60] << endl);
	}
}

练习5.7

改正下列代码段中的错误

(a) if (ival1 != ival2)

          ival1 = ival2

     else ival1  = ival2 = 0;

(b) if (ival < minval)

         minval = ival;

         occurs = 1;

(c) if (int ival = get_value())

         cout << "ival = " << ival << endl;

      if (!ival)

         cout << "ival = 0 \n";

(d) if (ival = 0)

         ival = get_value();

解答:

(a) 第二行缺少分号

(b) 第二行和第三行应该用大括号括起来

(c) ival不能再第二个if中使用 

(d) 这段没什么错误。不过if语句中的代码永远不会被执行


练习5.8

什么是“悬垂else”?C++语言是如何处理else子句的?

解答:

【引用】确定else是和哪个if进行匹配的问题,通常称为“悬垂else”

【引用】C++规定else与离它最近的尚未匹配的if匹配,从而消除了程序的二义性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值