| | | 精通C++(第9版)/清華計算機圖書譯叢 | 該商品所屬分類:計算機/網絡 -> 程序設計 | 【市場價】 | 1683-2440元 | 【優惠價】 | 1052-1525元 | 【介質】 | book | 【ISBN】 | 9787302503163 | 【折扣說明】 | 一次購物滿999元台幣免運費+贈品 一次購物滿2000元台幣95折+免運費+贈品 一次購物滿3000元台幣92折+免運費+贈品 一次購物滿4000元台幣88折+免運費+贈品
| 【本期贈品】 | ①優質無紡布環保袋,做工棒!②品牌簽字筆 ③品牌手帕紙巾
| |
版本 | 正版全新電子版PDF檔 | 您已选择: | 正版全新 | 溫馨提示:如果有多種選項,請先選擇再點擊加入購物車。*. 電子圖書價格是0.69折,例如了得網價格是100元,電子書pdf的價格則是69元。 *. 購買電子書不支持貨到付款,購買時選擇atm或者超商、PayPal付款。付款後1-24小時內通過郵件傳輸給您。 *. 如果收到的電子書不滿意,可以聯絡我們退款。謝謝。 | | | | 內容介紹 | |
![](https://bnmppic.bookuu.com/goods/06/03/18/2018092230272875-25088.jpg)
-
出版社:清華大學
-
ISBN:9787302503163
-
作者:(美)托尼·加迪斯//朱迪·沃爾特斯//戈德弗雷·穆甘...
-
頁數:1214
-
出版日期:2018-09-01
-
印刷日期:2018-09-01
-
包裝:平裝
-
開本:16開
-
版次:1
-
印次:1
-
字數:1891千字
-
-
\"(1)知識體繫完善,循序漸進,容易掌握。
(2)編寫體例適合教學,充分考慮到教學的進度和需要。
(3)圖示講解,一目了然;示例程序,精心設計。
(4)編程挑戰極具可擴展性。
(5)練習題447道,復習題586道,挑戰編程題304道,程序362個。\"
-
\"本書自第1版出版以來,就深受廣大讀者歡迎,成為學習C++的經典教材,這是最新的第9版。本書共分19章,從計算機科學的基礎知識和內容開始,介紹C++程序的基本組成部分,C++語言的語法和結構,類與面向對像編程,文件與I/O操作,遞歸的應用,多態與虛函數,異常處理,模板實現與標準模板庫使用,鏈表的概念與操作,棧與隊列的概念與操作,二叉樹及其操作等。
本書的知識體繫完整,編寫體例充分考慮了教學的需要,全書給出了思考題447道,復習與練習題586道,挑戰編程題304道,完整程序362個,非常適合作為高等院校計算機及相關專業程序設計與數據結構的教材,也是精通C++程序設計的首選用書。\"
-
目??錄
第1章 計算機和編程簡介 1 1.1 為什麼要使用程序 1 1.2 計算機繫統:硬件和軟件 2 1.2.1 硬件 2 1.2.2 軟件 5 1.2.3 思考題 6 1.3 程序和編程語言 6 1.3.1 程序的定義 7 1.3.2 編程語言 8 1.3.3 源代碼、目標代碼和可執行 代碼 9 1.3.4 思考題 11 1.4 程序的組成 11 1.4.1 語言元素 11 1.4.2 代碼行和語句 13 1.4.3 變量 14 1.4.4 變量定義 14 1.5 輸入、處理和輸出 15 思考題 15 1.6 編程過程 16 1.6.1 設計和創建程序 16 1.6.2 軟件工程的定義 19 1.6.3 思考題 20 1.7 綜合演練:顯示個性化消息 20 1.7.1 復習和練習 21 1.7.2 編程挑戰 23 第2章 C++簡介 24 2.1 C++程序的部件 24 思考題 27 2.2 cout對像 27 2.3 #include指令 32 思考題 33 2.4 變量和賦值語句 33 2.5 常數 35 2.5.1 有時數字並不是數字 36 2.5.2 思考題 36 2.6 標識符 37 2.7 整型數據類型 39 2.7.1 整數和長整型常數 42 2.7.2 十六進制和八進制常數 43 2.7.3 思考題 43 2.8 浮點數據類型 44 2.8.1 浮點常數 45 2.8.2 將浮點值分配給整型變量 46 2.8.3 思考題 47 2.9 char數據類型 47 2.10 C ++ string類 51 2.10.1 使用string類 51 2.10.2 思考題 52 2.11 bool數據類型 52 2.12 確定數據類型的大小 53 2.13 變量賦值和初始化詳解 54 2.14 作用域 56 2.15 算術運算符 56 思考題 60 2.16 注釋 60 2.16.1 單行注釋 61 2.16.2 多行注釋 61 2.17 編程風格 62 2.18 綜合演練:笑臉! 63 2.18.1 復習和練習 64 2.18.2 編程挑戰 68 第3章 表達式和交互 71 3.1 cin對像 71 3.1.1 輸入多個值 74 3.1.2 思考題 76 3.2 數學表達式 77 3.2.1 運算符的優先級 79 3.2.2 關聯性 80 3.2.3 用圓括號分組 80 3.2.4 將代數表達式轉換為編程 語句 81 3.2.5 指數問題詳解 81 3.2.6 思考題 83 3.3 數據類型轉換和類型強制轉換 85 3.3.1 類型強制轉換 86 3.3.2 思考題 89 3.4 溢出和下溢 90 3.5 命名常量 91 思考題 93 3.6 多變量和組合賦值 94 3.6.1 組合賦值運算符 94 3.6.2 思考題 96 3.7 格式化輸出 97 3.7.1 setprecision序設計: 快速排序算法 915 14.7 漢諾塔 919 14.8 關於問題解決:窮舉和枚舉算法 923 14.9 關於軟件工程:遞歸與迭代 926 14.10 綜合演練:中綴和前綴表達式 926 14.10.1 復習和練習 930 14.10.2 編程挑戰 932 **5章 多態和虛函數 935 15.1 繼承層次結構中的類型兼容性 935 15.1.1 繼承的層次結構 935 15.1.2 繼承的類型兼容性 935 15.1.3 基類指針的類型強制 轉換 939 15.2 多態和虛成員函數 941 15.2.1 動態和靜態綁定 946 15.2.2 C++ 11的override和 final關鍵字 947 15.2.3 防止成員函數被覆蓋 949 15.3 抽像基類和純虛函數 949 思考題 952 15.4 關於面向對像編程:組合與繼承 的對比 956 15.5 Secure Encryption System公司 案例研究 960 15.5.1 理解問題 960 15.5.2 一個簡單的加密/解密 框架 961 15.6 綜合演練:移動圖形 964 15.6.1 復習和練習 971 15.6.2 編程挑戰 973 **6章 異常、模板和標準模板庫 975 16.1 異常 975 16.1.1 拋出異常 976 16.1.2 處理異常 976 16.1.3 異常未被捕獲的情形 978 16.1.4 面向對像的異常處理類 978 16.1.5 多個異常 980 16.1.6 從異常類中提取信息 982 16.1.7 處理由new引發的 bad_alloc異常 985 16.1.8 棧展開 986 16.1.9 重新拋出異常 986 16.1.10 思考題 987 16.2 函數模板 987 16.2.1 swap函數模板 990 16.2.2 在函數模板中使用 運算符 992 16.2.3 使用多種類型的函數 模板 993 16.2.4 函數模板重載 994 16.2.5 定義模板函數 995 16.2.6 思考題 995 16.3 類模板 995 16.4 類模板和繼承 1001 思考題 1004 16.5 標準模板庫簡介 1005 16.5.1 順序容器 1005 16.5.2 關聯容器 1005 16.5.3 迭代器 1006 16.5.4 迭代器的使用 1006 16.5.5 vector容器 1009 16.5.6 算法 1010 16.6 綜合演練:單詞變形遊戲 1018 16.6.1 復習和練習 1021 16.6.2 編程挑戰 1022 **7章 鏈表 1026 17.1 鏈表ADT簡介 1026 17.1.1 鏈表對數組和矢量的 優點 1026 17.1.2 鏈表的結構 1026 17.1.3 鏈表的C++表示 1027 17.1.4 使用構造函數初始化 結點 1029 17.1.5 建立一個鏈表 1030 17.1.6 遍歷鏈表 1030 17.1.7 思考題 1032 17.2 鏈表操作 1032 17.2.1 添加一個元素到 鏈表中 1034 17.2.2 顯示鏈表 1035 17.2.3 銷毀鏈表 1035 17.2.4 按排序順序建立鏈表 1037 17.2.5 將結點插入排序鏈表 1037 17.2.6 思考題 1040 17.2.7 從鏈表中刪除元素 1040 17.2.8 思考題 1043 17.3 鏈表模板* 1044 17.4 遞歸鏈表操作 1048 17.4.1 遞歸鏈表函數 1048 17.4.2 遞歸成員函數 1051 17.4.3 遞歸add成員函數 1052 17.4.4 遞歸remove成員函數 1054 17.5 鏈表的變體 1057 17.6 STL list容器* 1058 17.7 Reliable Software Systems公司 案例研究 1060 17.7.1 問題陳述 1060 17.7.2 修改和類設計規劃 1061 17.7.3 類成員函數的實現 1061 17.8 綜合演練:跑步穿過屏幕動畫 1064 17.8.1 使用圖像映射表示 形狀 1064 17.8.2 動畫基礎 1066 17.8.3 實施細節 1066 17.8.4 復習和練習 1070 17.8.5 編程挑戰 1073 **8章 棧和隊列 1076 18.1 棧ADT簡介 1076 18.1.1 定義 1076 18.1.2 棧的應用 1076 18.1.3 靜態棧和動態棧 1077 18.1.4 棧操作 1077 18.1.5 靜態棧類 1077 18.1.6 處理棧異常 1082 18.1.7 棧模板 1083 18.2 動態棧 1083 18.3 標準模板庫stack容器* 1087 ??思考題 1089 18.4 隊列ADT簡介 1089 18.4.1 定義 1089 18.4.2 隊列的應用 1089 18.4.3 靜態隊列和動態隊列 1090 18.4.4 隊列操作 1090 18.4.5 使用循環數組檢測滿隊列 和空隊列 1092 18.4.6 靜態隊列類 1092 18.4.7 靜態隊列中的溢出和 下溢異常 1096 18.5 動態隊列 1096 18.6 標準模板庫deque和queue 容器* 1100 18.6.1 deque容器 1100 18.6.2 queue容器適配器 1102 18.7 關於問題解決和程序設計: 消除遞歸 1103 18.8 綜合演練:將後綴表達式轉換為 中綴表達式 1107 18.8.1 復習和練習 1110 18.8.2 編程挑戰 1112 **9章 二叉樹 1116 19.1 二叉樹的定義和應用 1116 19.1.1 二叉樹的實現 1116 19.1.2 二叉樹的應用 1118 19.1.3 思考題 1119 19.2 二叉搜索樹操作 1119 19.2.1 創建二叉搜索樹 1119 19.2.2 二叉搜索樹操作的實現 1122 19.2.3 插入一個元素 1123 19.2.4 遍歷樹 1124 19.2.5 搜索二叉搜索樹 1126 19.2.6 刪除元素 1128 19.2.7 思考題 1136 19.3 二叉搜索樹模板注意事項 1136 19.4 綜合演練:譜繫樹 1137 19.4.1 復習和練習 1142 19.4.2 編程挑戰 1143 附錄A ASCII 字符集 1146 附錄B 運算符優先級和關聯性 1150 附錄C 思考題答案 1151 附錄D 復習和練習奇數題的答案 1193
操作符 100 3.7.2 fixed操作符 103 3.7.3 showpoint操作符 104 3.7.4 left和right操作符 105 3.7.5 思考題 107 3.8 處理字符和字符串 107 3.8.1 輸入字符串 108 3.8.2 輸入一個字符 110 3.8.3 使用cin.get 110 3.8.4 混合使用cin >>和cin.get 112 3.8.5 使用cin.ignore 112 3.8.6 實用的string成員函數和 運算符 113 3.8.7 使用C字符串 115 3.8.8 為C字符串賦值 116 3.8.9 跟蹤一個C字符串的大小 117 3.8.10 讀取一行輸入 119 3.8.11 思考題 120 3.9 *多數學庫函數 120 3.10 隨機數字 122 3.10.1 限制隨機數的範圍 125 3.10.2 思考題 125 3.11 關於調試:手動跟蹤程序 126 3.12 Green Fields Landscaping案例 研究——**部分 127 3.12.1 問題陳述 127 3.12.2 程序設計 128 3.12.3 程序 128 3.12.4 General Crates公司案例 研究 130 3.13 綜合演練:單詞遊戲 130 3.13.1 復習和練習 132 3.13.2 編程挑戰 137 第4章 條件選擇 143 4.1 關繫運算符 143 4.1.1 關繫的值 144 4.1.2 真值和假值 145 4.1.3 思考題 147 4.2 if語句 148 4.2.1 編程風格和if語句 151 4.2.2 要注意的3個常見錯誤 151 4.2.3 真值詳解 153 4.2.4 標記 154 4.2.5 整數標記 155 4.2.6 思考題 155 4.3 if-else語句 156 4.3.1 使用if 或if-else的時機 157 4.3.2 比較浮點數 159 4.3.3 思考題 161 4.4 if-else if語句 161 4.4.1 使用結尾else 166 4.4.2 思考題 167 4.5 菜單驅動程序 168 4.6 嵌套if語句 170 思考題 173 4.7 邏輯運算符 174 4.7.1 &&運算符 174 4.7.2 || 運算符 176 4.7.3 ! 運算符 178 4.7.4 布爾變量和?!運算符 179 4.7.5 邏輯運算符的優先級和 關聯性 181 4.7.6 使用邏輯運算符檢查數字 範圍 182 4.7.7 思考題 182 4.8 驗證用戶輸入 183 4.9 塊和作用域詳解 185 4.9.1 同名變量 186 4.9.2 思考題 187 4.10 字符和字符串詳解 188 4.10.1 比較字符 188 4.10.2 比較string對像 189 4.10.3 測試字符 191 4.10.4 思考題 193 4.11 條件運算符 194 4.11.1 使用條件表達式的值 195 4.11.2 思考題 197 4.12 switch語句 197 4.12.1 在菜單驅動繫統中使用 switch 203 4.12.2 思考題 205 4.13 枚舉數據類型 206 思考題 209 4.14 關於測試和調試:驗證輸出結果 210 4.15 Green Fields Landscaping案例研 究——第2部分 212 4.15.1 問題陳述 212 4.15.2 程序設計 213 4.15.3 程序 214 4.15.4 Crazy A1的計算機商業 案例研究 216 4.16 綜合演練:算命遊戲 217 4.16.1 復習和練習 218 4.16.2 編程挑戰 222 第5章 循環 228 5.1 循環介紹:while循環 228 5.1.1 while循環 228 5.1.2 while是一個預測試循環 230 5.1.3 無限循環 231 5.1.4 編程風格和while循環 232 5.1.5 思考題 234 5.2 使用while循環驗證輸入 235 5.3 遞增和遞減運算符 237 5.3.1 後綴和前綴模式 239 5.3.2 在數學表達式中使用遞增 和遞減運算符 241 5.3.3 在關繫表達式中使用遞增 和遞減運算符 241 5.3.4 思考題 242 5.4 計數器 243 5.5 保持累計彙總 245 5.6 標記符號 247 思考題 248 5.7 do-while循環 249 5.7.1 toupper函數 251 5.7.2 與菜單一起使用do-while 252 5.7.3 思考題 254 5.8 for循環 254 5.8.1 for循環是一個預測試循環 257 5.8.2 避免修改for循環體中的 計數器變量 257 5.8.3 *新表達式的其他形式 258 5.8.4 定義for循環初始化表達式 中的變量 258 5.8.5 創建用戶控制的for循環 258 5.8.6 在初始化和*新表達式中 使用多個語句 259 5.8.7 省略for循環的表達式或 循環體 260 5.8.8 思考題 260 5.9 關於軟件工程:決定使用哪個 循環 261 5.9.1 while循環 261 5.9.2 do-while循環 262 5.9.3 for循環 262 5.10 嵌套循環 262 5.11 打破循環 265 5.11.1 在嵌套循環中使用break 266 5.11.2 continue語句 267 5.11.3 思考題 268 5.12 使用文件進行數據存儲 269 5.12.1 文件類型 270 5.12.2 文件訪問方法 271 5.12.3 文件名和文件流對像 271 5.12.4 為輸入輸出文件設置 程序 272 5.12.5 創建文件流對像並打開 文件 273 5.12.6 關閉文件 274 5.12.7 將數據寫入文件 274 5.12.8 從文件讀取數據 276 5.12.9 讀取位置 278 5.12.10 讓用戶指定一個文件名 279 5.12.11 使用舊版本C++中的 c_str成員函數 280 5.12.12 檢測文件的末尾 280 5.12.13 測試文件打開的錯誤 282 5.12.14 思考題 284 5.13 關於測試和調試:創建良好的 測試數據 284 5.14 Central Mountain Credit Union 案例研究 287 5.14.1 問題陳述 287 5.14.2 計算 287 5.14.3 變量 287 5.14.4 程序設計 288 5.14.5 詳細偽代碼 288 5.14.6 程序 289 5.14.7 測試程序 291 5.14.8 Lightening Lanes案例 研究 291 5.15 綜合演練:多彩世界 291 5.15.1 復習和練習 294 5.15.2 編程挑戰 299 第6章 函數 305 6.1 模塊化編程 305 6.2 定義和調用函數 306 6.2.1 空函數 307 6.2.2 調用函數 307 6.2.3 思考題 313 6.3 函數原型 314 6.4 將數據發送到函數中 315 6.5 按值傳遞數據 320 思考題 322 6.6 使用return語句 323 6.7 從函數返回值 325 6.7.1 定義一個返回值函數 325 6.7.2 調用返回值函數 326 6.8 返回一個布爾值 330 思考題 332 6.9 在菜單驅動程序中使用函數 332 6.10 局部變量和全局變量 336 6.10.1 局部變量 336 6.10.2 局部變量生存期 338 6.10.3 使用形參值初始化本地 變量 338 6.10.4 全局變量 338 6.10.5 全局常數 340 6.10.6 具有相同名稱的局部 變量和全局變量 342 6.11 靜態局部變量 343 思考題 345 6.12 默認實參 346 6.13 使用引用變量作為形參 349 6.13.1 按引用傳遞實參和 按值傳遞實參的時機 353 6.13.2 將文件傳遞給函數 355 6.13.3 思考題 358 6.14 重載函數 359 6.15 使用exit()函數 364 思考題 365 6.16 樁模塊和驅動模塊 366 6.17 小樂透案例研究 369 6.17.1 問題陳述 369 6.17.2 程序設計 369 6.17.3 程序 371 6.17.4 High Adventrue Travel Agency旅行社案例研究 374 6.18 綜合演練:發光的南瓜燈 374 6.18.1 復習和練習 378 6.18.2 編程挑戰 381 第7章 類和對像簡介 388 7.1 抽像數據類型 388 7.1.1 抽像 388 7.1.2 在軟件開發中使用抽像 389 7.1.3 抽像數據類型 389 7.2 面向對像編程 389 7.3 關於類的介紹 391 7.3.1 使用已經知道的類 391 7.3.2 創建自己的類 392 7.3.3 訪問修飾符 393 7.3.4 private和public成員的 位置 393 7.4 創建和使用對像 394 7.4.1 訪問對像的成員 395 7.4.2 訪問器和設置器 396 7.5 定義成員函數 397 7.5.1 類成員函數的命名約定 399 7.5.2 避免陳舊數據 402 7.5.3 內聯函數詳解 402 7.5.4 思考題 403 7.6 構造函數 403 7.6.1 重載構造函數 407 7.6.2 默認構造函數 408 7.7 析構函數 409 思考題 410 7.8 私有成員函數 412 7.9 將對像傳遞給函數 415 7.9.1 常量引用形參 418 7.9.2 從函數返回一個對像 419 7.9.3 思考題 422 7.10 對像組合 422 思考題 425 7.11 關於軟件工程:分離類規範、 實現和客戶端代碼 426 7.11.1 使用多個文件的優點 431 7.11.2 在類對像中執行輸入 輸出 432 7.11.3 思考題 432 7.12 結構 432 7.12.1 訪問結構成員 433 7.12.2 顯示和比較結構變量 435 7.12.3 初始化結構 436 7.12.4 嵌套結構 437 7.12.5 思考題 440 7.12.6 將結構傳遞給函數 441 7.12.7 從函數返回一個結構 443 7.12.8 思考題 444 7.13 枚舉數據類型詳解 445 7.13.1 在同一個語句中聲明enum 數據類型並定義變量 445 7.13.2 將整數賦值給enum 變量 445 7.13.3 將枚舉量賦值給int 變量 446 7.13.4 使用數學運算符改變 enum變量的值 446 7.13.5 使用枚舉量輸出值 446 7.13.6 使用枚舉量控制循環 447 7.13.7 使用C++ 11中的強類型 enum 448 7.14 Home Software公司OOP案例 研究 449 7.14.1 私有成員變量 450 7.14.2 公共成員函數 450 7.14.3 類聲明 450 7.14.4 withdraw會員函數 451 7.14.5 類接口 452 7.14.6 實現類 452 7.15 面向對像分析與設計介紹 456 7.15.1 尋找類 459 7.15.2 確定類的責任 462 7.15.3 這僅僅是個開始 465 7.15.4 對像的可重用性 465 7.15.5 面向對像與基於對像的 編程 465 7.15.6 思考題 465 7.16 屏幕控制 466 7.16.1 屏幕光標定位 466 7.16.2 創建一個屏幕輸入表單 469 7.17 綜合演練:溜溜球動畫 471 7.17.1 復習和練習 473 7.17.2 編程挑戰 479 第8章 數組 486 8.1 保存多個值的數組 486 8.2 訪問數組元素 488 8.3 輸入和顯示數組內容 489 8.3.1 將數據從文件讀入數組 491 8.3.2 將數組的內容寫入文件 493 8.3.3 C++中沒有數組邊界檢查 493 8.3.4 注意大小差一錯誤 495 8.3.5 思考題 496 8.4 數組初始化 497 8.4.1 從數組元素1開始 501 8.4.2 數組部分初始化 501 8.4.3 隱式數組大小 503 8.4.4 初始化變量的新方法 503 8.5 基於範圍的for循環 504 8.6 處理數組內容 507 8.6.1 復制一個數組到另一個 509 8.6.2 比較兩個數組 510 8.6.3 對數字數組中的值求和 511 8.6.4 查找數字數組中數值的 平均值 511 8.6.5 在數字數組中查找*高值 和*低值 512 8.6.6 部分填充數組 514 8.6.7 為什麼要使用數組 515 8.6.8 處理字符串 517 8.7 使用並行數組 519 思考題 521 8.8 typedef聲明 523 8.9 數組作為函數參數 523 8.9.1 使用const數組形參 529 8.9.2 一些有用的數組函數 529 8.9.3 思考題 532 8.10 二維數組 533 8.10.1 將二維數組傳遞給函數 537 8.10.2 對二維數組的所有元素 求和 539 8.10.3 對二維數組的行求和 539 8.10.4 對二維數組的列求和 540 8.11 三維或三維以上數組 541 思考題 543 8.12 矢量 544 8.12.1 定義和初始化矢量 545 8.12.2 存儲和檢索矢量中的值 546 8.12.3 使用C++ 11中基於範圍 的for循環和vector 548 8.12.4 使用push_back成員 函數 549 8.12.5 確定矢量的大小 550 8.12.6 從矢量中刪除元素 552 8.12.7 清理矢量 553 8.12.8 檢測一個空矢量 554 8.12.9 矢量成員函數彙總 556 8.12.10 思考題 556 8.13 對像數組* 557 8.13.1 思考題 562 8.13.2 結構數組 563 8.13.3 思考題 566 8.14 National Commerce Bank案例 研究 567 8.15 綜合演練:石頭、剪刀、布 569 8.15.1 復習和練習 571 8.15.2 編程挑戰 575 第9章 搜索、排序和算法分析 585 9.1 搜索算法簡介 585 9.1.1 線性搜索 585 9.1.2 二分搜索 588 9.2 搜索對像數組 591 思考題 595 9.3 排序算法簡介 595 9.3.1 冒泡排序 595 9.3.2 選擇排序 599 9.3.3 思考題 604 9.4 對像數組排序 604 9.5 矢量排序和搜索 607 9.6 算法分析簡介 609 9.6.1 計算問題和基本步驟 610 9.6.2 算法的復雜度 611 9.6.3 算法的*壞情況下的 復雜度 613 9.6.4 平均情況下的復雜度 615 9.6.5 漸近復雜度與大O表示法 615 9.6.6 思考題 617 9.7 案例研究 617 9.8 綜合演練:秘密消息 617 9.8.1 復習和練習 622 9.8.2 編程挑戰 623 **0章 指針 627 10.1 指針和地址運算符 627 10.2 指針變量 629 10.3 數組與指針之間的關繫 632 10.4 指針的算術運算 637 10.5 初始化指針 638 思考題 640 10.6 比較指針 641 10.7 使用指針作為函數形參 643 10.8 指向常量的指針和常量指針 647 10.8.1 指向常量的指針 647 10.8.2 將一個**量實參傳遞到 一個指向常量的指針中 648 10.8.3 常量指針 649 10.8.4 指向常量的常量指針 651 10.9 關於軟件工程:動態內存分配 651 10.10 關於軟件工程:從函數返回 指針 655 10.10.1 停止內存洩漏 658 10.10.2 思考題 660 10.11 類對像和結構的指針 662 10.11.1 類對像的動態分配 663 10.11.2 使用指向類對像的指針 作為函數形參 665 10.12 關於軟件工程:選擇對像成員 667 ?思考題 668 10.13 智能指針 669 10.13.1 unique_ptr類 669 10.13.2 指向數組的獨占指針 672 10.13.3 unique_ptr類的成員 函數 673 10.13.4 shared_ptr類 675 10.13.5 共享指針組 676 10.13.6 雙重管理的危險 677 10.13.7 make_shared() 函數 677 10.13.8 shared_ptr成員函數 677 10.13.9 指向數組的共享指針 678 10.14 綜合演練:對不起,考試時間 已到 678 10.14.1 復習和練習 681 10.14.2 編程挑戰 685 **1章 類和面向對像編程詳解 688 11.1 this指針和常量成員函數 688 11.1.1 this指針 688 11.1.2 常量成員函數 692 11.2 靜態成員 693 11.2.1 靜態成員變量 694 11.2.2 靜態成員函數 697 11.3 類的友元 700 思考題 705 11.4 按成員賦值 705 11.5 復制構造函數 707 11.5.1 默認復制構造函數 708 11.5.2 默認復制構造函數的 缺陷 709 11.5.3 程序員定義的復制構造 函數 712 11.5.4 復制構造函數的調用 715 11.5.5 思考題 716 11.6 運算符重載 716 11.6.1 重載賦值運算符 716 11.6.2 類賦值運算符的返回值 718 11.6.3 類賦值運算符的實現 718 11.6.4 重載其他運算符 722 11.6.5 運算符重載的一些基本 問題 723 11.6.6 運算符重載的方法 724 11.6.7 重載算術和關繫運算符 724 11.6.8 在獨立函數和成員函數 運算符之間作出選擇 727 11.6.9 重載前綴++運算符 729 11.6.10 重載後綴++運算符 729 11.6.11 重載流插入和提取 運算符 730 11.6.12 重載[ ]運算符 734 11.6.13 思考題 738 11.7 右值引用和移動操作 738 11.7.1 左值和右值 739 11.7.2 移動構造函數和移動 賦值運算符 740 11.7.3 編譯器使用移動操作的 時機 748 11.7.4 默認操作 748 11.8 函數對像和Lambda表達式 749 11.8.1 謂詞函數 750 11.8.2 使用函數對像作為函數 的形參 751 11.8.3 排序數組和矢量 751 11.8.4 從矢量中刪除元素 752 11.8.5 可存儲值的函數對像 754 11.8.6 返回void的函數對像 755 11.8.7 在C++庫中的函數類 756 11.8.8 Lambda表達式 758 11.8.9 思考題 759 11.9 類型轉換運算符 759 11.10 轉換構造函數 762 思考題 765 11.11 聚合和組合 766 11.11.1 成員初始化列表 766 11.11.2 通過指針聚合 768 11.11.3 聚合、組合和對像生 命周期 769 11.11.4 Has-a關繫 771 11.12 繼承 772 11.12.1 普遍性和特殊性 772 11.12.2 繼承與Is-a關繫 772 11.12.3 繼承和指針 774 11.12.4 超類和子類 777 11.12.5 多繼承 777 11.13 受保護的成員和類訪問 777 11.13.1 基類訪問規範 780 11.13.2 思考題 781 11.14 構造函數、析構函數和繼承 782 11.14.1 將實參傳遞給基類構造 函數 784 11.14.2 思考題 786 11.15 覆蓋基類函數 788 11.15.1 在基類函數和派生類覆 蓋版本之間做出選擇 790 11.15.2 重載和覆蓋的區別 790 11.15.3 獲取被覆蓋成員函數的 訪問權限 790 11.16 綜合演練:將數據發布到 互聯網 791 11.16.1 復習和練習 795 11.16.2 編程挑戰 800 **2章 C字符串和string類詳解 804 12.1 C字符串 804 12.1.1 字符串常數 805 12.1.2 程序員定義的字符數組 806 12.1.3 指向char的指針 807 12.2 處理C字符串的庫函數 809 12.2.1 strlen函數 809 12.2.2 傳遞C字符串實參 809 12.2.3 strcat函數 809 12.2.4 strcpy函數 810 12.2.5 比較C字符串 811 12.2.6 strcmp函數 812 12.2.7 結合使用?! 運算符與 strcmp 815 12.2.8 排序字符串 815 12.2.9 思考題 816 12.3 數字和字符串之間的轉換 818 12.3.1 使用字符串流對像進行 數字轉換 818 12.3.2 數字轉換函數 820 12.3.3 思考題 822 12.4 編寫自己的C字符串處理函數 822 12.4.1 使用指針傳遞C字符串 實參 826 12.4.2 思考題 827 12.5 C++ string類詳解 828 12.6 Advanced Software Enterprises 案例研究 830 12.7 綜合演練:程序執行環境 831 12.7.1 復習和練習 833 12.7.2 編程挑戰 836 **3章 **文件和I/O操作 841 13.1 輸入和輸出流 841 13.1.1 文件流類 841 13.1.2 文件打開模式 844 13.1.3 使用構造函數打開文件 844 13.1.4 輸出格式化和I/O 操作符 844 13.1.5 思考題 848 13.2 詳細的錯誤測試 849 13.3 讀取和寫入文件的成員函數 852 13.3.1 getline函數 853 13.3.2 get繫列成員函數 857 13.3.3 peek成員函數 858 13.3.4 put成員函數 860 13.3.5 倒回文件的開始位置 861 13.3.6 思考題 863 13.4 二進制文件 865 13.5 使用結構創建記錄 869 思考題 873 13.6 隨機訪問文件 873 13.6.1 seekp和seekg成員函數 874 13.6.2 tellp和tellg成員函數 878 13.7 打開文件進行輸入和輸出 880 思考題 885 13.8 Online Friendship Connections 案例研究:對像序列化 885 13.8.1 對像序列化 886 13.8.2 設計程序需要的類 886 13.8.3 確定序列化方案 887 13.9 綜合演練:合並文件和設置 HTML顏色 891 13.9.1 復習和練習 895 13.9.2 編程挑戰 898 **4章 遞歸 902 14.1 遞歸介紹 902 14.1.1 直接遞歸和間接遞歸 907 14.1.2 思考題 907 14.2 遞歸計算階乘函數 908 14.3 遞歸計算*大公約數函數 910 14.4 解決遞歸式定義的問題 911 14.5 遞歸二分搜索函數 913 14.6 關於問題解決和程
-
第5章 循??環
主要內容:
5.1 循環介紹:while循環
5.2 使用while循環驗證輸入
5.3 遞增和遞減運算符
5.4 計數器
5.5 保持累計彙總
5.6 標記符號
5.7 do-while循環
5.8 for循環
5.9 關於軟件工程:決定使用哪個循環
5.10 嵌套循環
5.11 打破循環
5.12 使用文件進行數據存儲
5.13 關於測試和調試:創建良好的測試數據
5.14 Central Mountain Credit Union案例研究
5.15 綜合演練:多彩世界
5.1 循環介紹:while循環
核心概念:循環是重復的程序的一部分。 在本書第4章中有幾個程序是根據學生的數字成績給出相應的字母評級。但是,如果一個班有20個學生,那麼要為每一個學生評級該怎麼辦?豈不是要運行程序20次。如果可以簡單地指示代碼在一次運行中重復20次,那不就是很容易了嗎?幸運的是,確實有一個機制可以做到這一點,那就是所謂的循環。 循環(Loop)是一個控制結構,它會導致語句或語句組重復。C++有3種循環控制結構:while循環、do-while循環和for循環。這些結構之間的區別是它們控制重復的方式。 5.1.1 while循環
while循環有兩個重要組成部分:①進行true值或false值判斷的表達式,②隻要表達式為true就重復執行的語句或塊。圖5-1顯示了while循環的一般格式,右側流程圖直觀地描繪了其工作原理。
?
圖5-1 while循環的語句結構及流程圖
現在來看一看while循環的每個部分。**行,有時稱為循環頭(Loop Header),由關鍵字while組成,後跟待測試的條件(Condition),括在括號中。條件由任何可被判斷為true或false的表達式表示。接下來是循環體(Body of the Loop),它包含一個或多個C++語句(Statement)。 循環的工作原理如下:首先判斷條件表達式的值,如果它是真的,則循環體中的每個語句都被執行;然後,再次測試條件。如果條件表達式仍然為true,則循環體中的每個語句將再次被執行。如此循環往復,直到條件表達式被判斷為false。 請注意,與if語句一樣,在有條件執行的主體中的每個語句都以分號結尾,但在括號中的條件表達式後面沒有分號,這是因為while循環不完整,後面沒有跟隨的語句。而且,與if語句一樣,當循環體包含兩個或多個語句時,這些語句必須用大括號括起來。當循環的主體隻包含一個語句時,可以省略括號。基本上,while循環就像是一個可以執行一遍又一遍的if語句。隻要括號中的表達式為true,則有條件執行的語句將不斷重復。 程序5-1使用了while循環打印“Hello”字符串5次。
程序5-1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// This program demonstrates a simple while loop.
#include
using namespace std;
int main()
{
int count = 1;
while (count<= 5)
{
cout << \"Hello \";
count = count + 1;
}
cout << \"\\nThat's all!\\n\";
return 0;
}
程序輸出結果
Hello Hello Hello Hello Hello
That's all!
現在來仔細看一看這個程序。在第7行中,整數變量count被定義並用值1初始化。在第9行中,while循環以下面的語句開頭:
while (count<= 5)
該語句測試變量count以確定其值是否小於或等於5。因為它確實小於5,所以循環體(**1行和**2行)中的語句被執行:
cout << \"Hello \";
count = count + 1;
**1行中的語句將顯示字符串“Hello”。**2行中的語句則給變量count加上1,使其值變成了2。這是循環體中的*後一個語句,因此在執行之後循環又一次開始。它再次測試表達式“count <= 5”,並且由於仍然為true,循環體中的語句將再次執行。該循環不斷重復,直到變量count等於6,使表達式“count<= 5”為false,然後退出循環,如圖5-2所示。
| | | | | |