1. 程式人生 > >第五章 5.2節練習 & 5.3.1節練習

第五章 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匹配,從而消除了程式的二義性。