《C++PrimerPlus 6th Edition》第6章 分支語句和邏輯運算符 要點記錄

《C++PrimerPlus 6th Edition》第6章 分支語句和邏輯運算符 要點記錄

  1. cin.get(ch);逐字符計數時,字符總數中包括按回車鍵生成的換行符

  2. 對於char ch;注意cout<<++ch;cout<<ch+1;的區別(前者類型char、後者類型int)

  3. C++規定,||運算符是個順序點(sequence point),即先修改左側的值,再對右側的值進行判定。例如:i++ < 6 || i == j,若i原來的值爲10,則i與j比較時已是11;&&也如此

  4. ||第一項爲true時結束對後面的判定,因爲此時表達式必爲true;&&的第一項爲false結束對後面的判定,因爲此時表達式必爲false

  5. if(17 < age < 35)合法,但並非判斷age介於[17,35]之間,且表達式總爲true

  6. and、or、not分別對應&&、||、!,都是C++保留字,使用它們無需使用頭文件,但對於C語言則需要頭文件iso646.h

  7. 【函數庫cctype】(or ctype.h)

    函 數 名 稱返 回 值
    isalnum()如果參數是字母或數字,返回true
    isalpha()如果參數是字母,返回true
    iscntrl()如果參數是控制字符,返回true
    isdigit()如果參數是數字(0-9),返回true
    isgraph()如果參數是除空格外的打印字符,返回true
    islower()如果參數是小寫字母,返回true
    isprint()如果參數是打印字符,返回true
    ispunct()如果參數是標點符號,返回true
    isspace()如果參數是標準空白字符,如空格、進紙、換行符、回車、水平製表符或垂直製表符,返回true
    isupper()如果參數是大寫字母,返回true
    isxdigit()如果參數是十六進制數字,即0-9、a-f或A-F,返回true
    tolower()如果參數是大寫字母,則返回其小寫,否則返回該參數
    toupper()如果參數是小寫字母,則返回其大寫,否則返回該參數
  8. 條件運算符?:是C++中唯一的三元運算符,即需要三個操作數的運算符

  9. 如果既可以使用if else if語句,也可以使用switch語句,則當選項不少於3個時,應使用switch語句,但switch的標籤只能是整數常量(char、枚舉量也行)

  10. 對於for循環來說,continue語句雖然會導致程序跳過循環體的剩餘部分,但不會跳過循環的更新表達式(如果有的話)

  11. 程序發現用戶輸入錯誤內容時,應採取3個步驟:①重置cin以接受新的輸入;②刪除錯誤輸入;③提示用戶再輸入。 一個處理錯誤輸入的示例:

    for (int i=0; i<Max;++i){
    	cout<<"round #"<<i+1<<": ";
    	while (!(cin>>golf[i])){
    		cin.clear(); //reset input
    		while (cin.get() != '\n') // 濾去錯誤輸入的字符
    			continue;
    		cout<<"Please enter a number: ";
    	}
    }
    

    說明:如果省略cin.clear(),程序將拒絕繼續讀取輸入;內置的while循環中cin.get()用於讀取行尾之前的所有輸入,從而刪除這一行中的錯誤輸入

  12. 所有可用於cout的操作和方法(如<<、endl和setf())都可用於ofstream對象,所有可以用於cin的操作和方法都可以用於ifstream對象

    cout<<fixed;
    cout.setprecision(2);
    cout.setf(ios_base:: showpoint);
    //...
    ofstream outFile;
    //打開等操作
    outFile << fixed;
    outFile.setprecision(2);
    outFile.setf(ios_base:: showpoint);
    //...
    
  13. 打開已有的文件,以接受輸出時,默認將它長度截短爲0,因此原來的內容將丟失

  14. open()方法接受一個C-風格字符串作爲參數

  15. 函數exit()的原型是在頭文件cstdlib中定義的;方法is_open()用於檢查文件是否成功打開,如果編譯器不支持它,可以使用較老的方法good()來代替,但方法good()在檢查可能存在的問題方面,沒有is_open()那麼廣泛

  16. 檢查文件是否被成功打開非常重要,下面是一些可能出現問題的地方:①制定的文件可能不存在;②文件可能位於另一個目錄;③訪問可能被拒絕;④用戶可能輸錯了文件名或省略了擴展名

  17. 讀取文件時,有幾點需要檢查:①程序讀取文件時不應超過EOF。如果最後一次讀取數據時遇到EOF,方法eof()將返回true;②程序可能遇到類型不匹配的情況,此時方法fail()返回true(如果遇到EOF該方法也會返回true);③可能出現意外的問題,如文件受損或硬件故障,此時方法bad()返回true。
    然而不用分別檢查這些情況,一種更簡單的方法是使用good()方法,該方法在沒有發生任何錯誤時返回true

  18. 表達式inFile >> value一般情況下的結果爲inFile,而在需要一個bool值的情況下,inFile的結果爲inFile.good(),即true或false

【部分習題】

  1. 請認真考慮下面程序:

    #include<iostream>
    using namespace std;
    int main(){
    	char ch;
    	int ct1,ct2;
    	
    	ct1=ct2=0;
    	while((ch=cin.get()) != '$'){
    		cout<<ch;
    		ct1++;
    		if(ch='$')
    			ct2++;
    		cout<<ch;
    	}
    	cout<<"ct1= "<<ct1<<", ct2= "<<ct2<<"\n";
    	return 0;
    }
    

    假設輸入如下(請在每行末尾按回車鍵):

    Hi!
    Send $10 or $20 now!
    

    則輸出將是什麼?

  2. 與使用數字相比,使用字符(a或c)表示菜單選項和case標籤有何優點?

【習題參考答案】

  1. 輸入和輸出結果
    Hi!
    H$i$!$
    $Send $10 or $20 now!
    S$e$n$d$ $ct1= 9, ct2= 9
    
    
  2. 如果使用整數標籤,且用戶輸入了非整數(如q),則程序將因爲整數輸入不能處理字符而掛起。但是,如果使用字符標籤,而用戶輸入了整數(如5),則字符輸入將5作爲字符處理。然後,switch語句的default部分將提示輸入另一個字符。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章