TOP
0
0
【23號簡體館日】限時三天領券享優惠!!
人民幣定價:88 元
定  價:NT$ 528 元
優惠價:87459
領券後再享88折
海外經銷商無庫存,到貨日平均30天至45天
可得紅利積點:13 點
相關商品
商品簡介
作者簡介
名人/編輯推薦
目次
書摘/試閱

商品簡介

該教程分四部分:
第一部分從開發基礎語言入手,深入淺出的講解了C語言和面向對象的Object_C語言,詳細介紹了開發蘋果iOS應用所需要的基礎知識,其中大量實際案例幫助讀者深入理解基礎開發語言和后續開發之間的關聯。
第二部分,iOS開發中高級進階,這一部分詳細闡述了蘋果iOS開發工具、基本視圖、UI框架,幫助讀者掌握使用蘋果優秀的開發工具XCode來進行蘋果應用程序的開發流程,并詳細介紹了蘋果iOS框架下的一些高級應用,如音頻、視頻、照相機使用、極速其使用、地圖框架、短信、郵件等應用,并介紹了蘋果真機調試的技巧。
第三部分,項目實訓,這一部分選取了睿峰科技公司承擔的幾項重大項目,如中國工商銀行移動智慧銀行、中國人壽移動保險系統等,通過對從項目策劃到設計開發,再到測試部署等環節的具體分析,引導讀者了解掌握蘋果iOS平臺開發的整體流程和技術要點。
第四部分,專題講座,這部分教程分專題向讀者介紹了在iOS開發領域的高級知識,如色彩搭配、體驗設計、原型設計等,幫助讀者迅速掌握該領域的高級知識。

作者簡介

馬泳宇
英國劍橋大學網絡、視音頻技術博士
美國蘋果公司核心開發工程師
深圳市政大型項目云計算平臺總策劃及總工程師
中國人壽保險e動力系統平臺研發總負責人
中國工商銀行移動智慧銀行系統平臺研發總負責人
中國交通銀行移動智慧查詢系統平臺研發總負責人

名人/編輯推薦

隨著蘋果iPhone、iPad等移動終端的持續熱銷,蘋果AppStore上面的應用程序下載已超過400億次,這些應用程序的開發,所使用的正是蘋果iOS平臺。iOS平臺是蘋果智能設備使用的操作系統,其界面美觀、簡潔,穩定性高,與硬件配合度極高。“蘋果iOS6開發從入門到實戰”是一本詳細介紹蘋果iOS6最新平臺軟件開發應用的書籍。

2012年開始,移動互聯行業呈爆炸式的增長,智能移動終端數量在中國已突破6億,大量移動應用的出現在很大程度上改變了人們生活、溝通以及獲取信息的方式。蘋果在2012年推出了ipad mini,這款產品迅速成為銷售增速最快的產品。究其原因,輕巧便攜,體驗良好,相對低廉的價格等等,都成為用戶選擇的原因。與此同時,企業級應用越來越被中國企業所接受,BYOD(Bring Your OwnDevice)已成為一種新的趨勢,大型企業,如銀行、保險、醫院、物流等行業越來越多地把自己的業務搬到移動終端上來。行業移動應用的廣泛出現,又從另一個層面將移動互聯產業推向了一個全新的高度。
蘋果iOS平臺,由于其良好的體驗,完善的生態體系,使其成為當下最流行的操作系統。由于蘋果采用了良好的分賬體系,使得i 平臺上的應用開發者能有良好的回報,大量優秀的應用得以在這個平臺上出現和發展。在企業級市場,因架構完善、安全可控、成熟等特點,i 已逐漸成為企業應用的首選平臺。
2013年蘋果i 開發勢必迎來新一波增長高峰,一方面蘋果iphone、ipad等已有了龐大的市場基礎,需要更多的應用來滿足人們多方面的需求;另一方面,越來越多的企業選用i 設備來部署企業應用,眾多企業建立起自己的應用市場,每個企業都對通過移動互聯改變自己的商業模式有著自己的理解和方式,每個企業都需要開發適合自己的應用。因此,i 開發需求在2013年出現井噴
隨著行業的深入發展,現在i 開發不再局限于一些小型應用,更多地需要以ios設備特性為基礎,開發一些互動體驗良好、運行穩定、前后端密切協作的大型應用。尤其是企業級的應用,更需要開發者深刻理解蘋果i 開發的精髓,并具有扎實的基本功和創新能力。
睿峰科技作為中國最大的蘋果iOS平臺開發企業,為眾多行業客戶開發了蘋果iOS平臺行業級應用,通過多年的實踐,建立了完整的iOS開發體系。我們對這個行業理解深刻,也深知在該領域缺乏真正有價值、實用的教程。很多翻譯過來的開發教程,并不能很好地貼合中國的實際,對國內開發者最需要的知識缺乏必要的梳理。因此,我們結合國內開發實際,推出了此書。本書對iOS開發體系所用到的知識,從基礎到實踐的全過程進行了全面的梳理。
本書作者全部來自于行業的一線開發工程師,他們參加過銀行、保險、郵政、電信等行業的大型應用程序開發,不僅對前端有深刻的理解,對前后臺數據的交互和優化,如何將ios設備效能發揮到極致有著豐富的經驗。本書所涉及的所有代碼和實例均來自于睿峰科技實際項目,來自于國內iOS行業開發的第一線,具有一定的參考價值。
由于本書成書時間短和作者知識水品有限,其中錯誤之處難免出現,懇請讀者提出寶貴意見。

馬泳宇
2013年4月18日

目次

目錄
第一部分 C語言基礎
第一章數據類型、運算符、表達式 11
1.1 C語言的字符集 11
1.2 語言詞匯 11
1.3 數據類型 12
1.3.1 常量與變量 13
1.3.2 常量和符號常量 13
1.4 算術運算符和算術表達式 14
1.4.1 C運算符簡介 14
1.4.2 算術表達式 16
第二章結構化程序設計 17
2.1 C語句概述 17
2.2 賦值語句 18
2.3 分支結構程序 19
2.4 if語句的嵌套 20
2.5 switch語句 21
2.6 循環控制 23
2.6.1 goto語句以及用goto語句構成循環 23
2.6.2 while語句 23
2.6.3 do-while語句 24
2.6.4 for語句 24
2.6.5 循環的嵌套 26
2.6.6 幾種循環的比較 27
2.7 break語句 27
2.8 continue語句 27
第三章數組、函數、指針 29
3.1 一維數組的定義 29
3.2 一維數組元素的引用 30
3.3 一維數組的初始化 31
3.4 二維數組的定義 31
3.5 二維數組元素的引用 32
3.6 二維數組的初始化 32
3.7 字符數組 33
3.7.1 字符數組的定義 33
3.7.2 字符數組的初始化 33
3.7.3 字符數組的引用 34
3.8 字符串和字符串結束標志 34
3.9 函數概述 34
3.10 函數定義的一般形式 36
3.11函數的參數和函數的值 37
3.11.1 形式參數和實際參數 37
3.11.2 函數的返回值 39
3.12 函數的調用 39
3.12.1 函數調用的一般形式 39
3.12.2 函數調用的方式 39
3.12.3 被調用函數的聲明和函數原型 40
3.12.4 函數的嵌套調用 41
3.12.5 函數的遞歸調用 42
3.13 局部變量和全局變量 43
3.13.1 局部變量 43
3.13.2 全局變量 44
3.14 指針 44
3.15 地址指針的基本概念 44
3.16 變量的指針和指向變量的指針變量 45
3.16.1 定義一個指針變量 46
3.16.2 指針變量的引用 46
3.17 數組指針和指向數組的指針變量 50
3.17.1 指向數組元素的指針 50
3.17.2 通過指針引用數組元素 51
3.18 函數指針變量 53
3.19 指針型函數 54
3.20 指針數組和指向指針的指針 55
3.20.1 指針數組的概念 55
3.20.2 指向指針的指針 57
3.21 有關指針的數據類型的小結 58
3.22 指針運算的小結 59
3.23 void指針類型 59
第四章結構體、共用體、枚舉、預處理 61
4.1 定義一個結構的一般形式 61
4.2 結構類型變量的說明 61
4.3 結構變量成員的表示方法 63
4.4 結構變量的賦值 64
4.5 結構變量的初始化 64
4.6 結構數組的定義 65
4.7 結構指針變量的說明和使用 66
4.7.1 指向結構變量的指針 66
4.7.2 指向結構數組的指針 67
4.8 枚舉類型 68
4.8.1 枚舉類型的定義和枚舉變量的說明 68
4.8.2 枚舉類型變量的賦值和使用 69
4.9 宏定義 70
4.9.1 無參宏定義 70
4.9.2 帶參宏定義 73
4.10 類型定義符typedef 76
4.11 用extern聲明外部變量 77
4.12 用static聲明局部變量 78
4.13 用const聲明常量 79
第五章數據結構與算法簡介 81
5.1 數據結構基本概念和術語 81
5.2 程序的靈魂—算法 82
5.2.1 算法的概念 82
5.2.2 算法的特點 82
5.2.3 簡單算法舉例 82
第二部分 Objective-C語言
第六章 Objective–C基礎 85
6.1 Objective-C概述 85
6.2 開發工具Xcode 85
6.3 HelloWorld解析 86
6.3.1 #import 88
6.3.2 NSLog() 88
6.3.3 @”字符串” 88
6.3.4 注釋 88
6.3.5 #progma mark 89
6.4面向對象和面向過程 89
第七章類和對象 91
7.1認識對象 91
7.2 認識類 91
7.3 OC中類的定義 91
7.3.1 接口(interface) 91
7.3.2 實現(implementation) 92
7.3.3 Struct和Class比較 92
7.4 創建對象 93
7.4.1 類方法和實例方法 93
7.4.2 內存分配 95
7.4.3 初始化 95
7.4.4 便利構造器 97
第八章屬性及點語法 98
8.1 屬性 98
8.2 屬性關鍵字 99
8.3 點語法 101
第九章字符串、集合 103
9.1 數據類型 103
9.1.1 與C共有的數據類型 103
9.1.2 OC擴展的數據類型 103
9.2 字符串(NSString) 104
9.2.1 NSString 對象初始化 104
9.2.2 字符串長度獲取 105
9.2.3獲取字符串的子串 105
9.2.4字符串的比較 106
9.2.5類型轉換 107
9.2.6 字符串(NSMutableString) 107
9.3 數組 107
9.3.1 NSArray 107
9.3.2 NSArray簡化 108
9.3.3 NSMutableArray 109
9.4 字典 110
9.4.1 NSDictionary 110
9.4.2 NSMutableDictionary 111
9.5 集 112
9.5.1 NSSet 112
9.5.2 NSMutableSet 112
9.6 快速枚舉 113
第十章內存管理 115
10.1 程序內存分配 115
10.2 Objective-C內存管理 115
10.2.1所有權機制 115
10.2.2 內存管理黃金法則 116
10.2.3 便利構造器內存管理 118
10.2.4 設置器,訪問器內存管理 119
10.2.5 常見錯誤 120
10.2.6 規則總結 121
10.2.7 ARC(Automatic Reference Counting)機制 121
第十一章封裝、繼承、多態 123
11.1 封裝 123
11.2 繼承 124
11.3 多態 126
第十二章類目、延展、協議、單例 127
12.1 類目Category 127
12.1.1 類目的聲明和實現 127
12.1.2 類目的使用 127
12.1.3 舉例 128
12.1.4 類目的局限性 130
12.2 延展Extension 130
12.3 協議Protocol 132
12.3.1 協議的定義 132
12.3.2 協議的作用 133
12.3.3 協議的特點 134
12.4 單例Singleton 134
第三部分核心框架
第十三章程序基本結構 136
13.1 Main函數 136
13.2 創建工程 136
13.3 應用程序的委托 138
13.4 UIWindow 139
第十四章視圖 141
14.1 UIView的初始化方式 141
14.2 UIView的常見屬性及含義 141
14.3 UIView的常用方法 141
14.4 自定義UIView 142
第十五章簡單視圖控件 147
15.1 按鈕UIButton 147
15.1.1 UIButton的初始化 147
15.1.2 事件與回調 147
15.1.3 設置背景和文字 148
15.1.4 自定義按鈕 148
15.2 標簽UILabel 150
15.2.1 UILabel的常用屬性 150
15.2.2 UILabel的初始化 150
15.2.3更好的文本展示 151
15.3 其他簡單控件 152
15.3.1 開關控件UISwitch 152
15.3.2 滑塊控件UISlider 152
15.3.3 多選控件UISegmentedControl 153
第十六章視圖控制器 154
16.1 基本視圖控制器 154
16.1.1 UIViewController的初始化 154
16.1.2 常用方法和執行順序 154
16.1.3 自定義視圖控制器 154
16.1.4 視圖控制器的切換 155
16.2導航控制器 156
16.2.1 導航控制器的推送和返回 156
16.2.2 導航欄的自定義 157
16.3 標簽控制器 158
16.3.1 標簽控制器的切換關系 159
16.3.2 標簽控制器的初始化 159
16.3.3 設置文字與圖片 160
16.3.4 UITabBarController的自定義 161
16.4自動布局 163
16.4.1 AutoLayout簡介 163
16.4.2 創建約束條件 163
16.4.3添加約束條件 165
第十七章 UIView動畫以及觸摸手勢 168
17.1 UIView動畫簡述 168
17.2 建立UIView動畫 168
17.3 動畫回調 169
17.4 過渡動畫 170
17.5 動畫Blocks的使用 170
17.6圖像視圖動畫 170
17.7 觸摸事件 171
17.8 手勢 172
第十八章滾動視圖的使用 176
18.1 UIScrollView滾動視圖 176
18.1.1 UIScrollView的工作機制 176
18.1.2 UIScrollView的常用屬性 176
18.1.3 UIScrollView的實際使用 177
18.2 UIPageControl頁面指示器控件 179
18.3 構建UIPickerView多輪表格 181
18.3.1 創建UIPickerView 181
18.3.2 創建基于視圖的選取器 183
18.4 使用UIDatePicker時間選取器 184
第十九章創建和管理表格視圖 187
19.1 UITableView和UITableViewController簡介 187
19.2 創建表格 187
19.4 字體表格實例 189
19.5 使用內置單元格類型 190
19.5.1 修改內置單元格 192
19.6 定制自己的單元格 194
19.7 修改單元格的選中樣式 195
19.8 記住定制單元格的控制狀態 196
19.9 移出單元格選中時的高亮顯示狀態 196
19.10 單元格的配件樣式 196
19.11 編輯單元格 197
19.11.1 處理刪除請求 197
19.11.2 滑動單元格 197
19.11.3 對單元格重新排序 197
19.12 表格數據排序 197
19.13 創建分段表格 198
19.13.1 創建標題 199
19.13.2 創建分段索引 199
19.13.3 定制表頭和腳注 200
19.14 創建分組表格 200
19.15 創建搜索表格 200
19.16 下拉刷新(ios6新特征) 202
19.17 UICollectionView(ios6新特征) 203
19.17.1 配置數據源 204
19.17.2 使用UICollectionViewFlowLayout 207
19.17.3 刪除和添加項 212
19.17.4 使用UICollectionViewLayout 212
第二十章輸入控件 216
20.1 文本輸入 216
20.2 取消鍵盤 217
20.3 輸入控制 218
第二十一章網絡開發 220
21.1 檢查網絡狀態 220
21.2 同步請求 221
21.3 異步請求 221
21.4 GET與POST 222
21.5 數據上傳與下載 223
21.5.1 XML與XML解析 223
21.5.2 JSON與JSON解析 225
21.6 ASIHTTPRequest簡介 225
21.7 網頁視圖 226
第二十二章音頻與視頻 229
22.1音頻 229
22.2 視頻 231
第四部分高級應用
第二十三章高級動畫 233
23.1 圖層 233
23.1.1圖層的坐標系 233
23.1.2 指定圖層的幾何 233
23.1.3 圖層的幾何變換 235
23.1.4 變換函數 236
23.1.5 修改變換的數據結構 237
23.1.6 通過鍵值路徑修改變換 237
23.2 使用Core Animation Transitions 238
23.3 深入了解 Core Animation 239
23.3.1 基本概念 239
23.3.2 CALayer及時間模型 239
23.3.3 顯式動畫Animation 242
23.3.4 CABasicAnimation的實際使用 246
23.3.5 CAKeyframeAnimation的實際使用 247
23.3.6 CAAnimationGroup組合動畫的使用 249
第二十四章使用相冊和照相機 251
24.1 使用圖像拾取器 251
24.2 使用照相機 253
24.3 圖像的存儲 253
24.4 圖像的重構 254
第二十五章數據持久性 256
25.1 應用程序的沙盒 256
25.2 獲取文件路徑 257
25.3 屬性列表序列化 258
25.4 對象歸檔 258
25.4.1 遵守并實現NSCoding 258
25.4.2 對對象進行歸檔 259
25.4.3 讀取歸檔的數據 260
25.5 文件管理 260
25.6 Core Data的使用 261
第二十六章多線程 266
26.1 線程與多線程 266
26.2 開辟子線程 266
26.3 定時器NSTimer 267
26.4 通知 267
第二十七章地圖 269
27.1 定位 269
27.2 地圖視圖 269
27.3 地圖注解 270
27.4 自定義地圖注解 272
第二十八章真機調試 275
第二十九章訪問設備能力(真機) 288
29.1 加速計 288
29.1.1 加速計的物理特性 288
29.1.2 訪問加速計 288
29.2 控制屏幕的亮度 289
29.3 獲取當前設備信息 289
29.4 監控電池狀態 290
29.5 啟用和禁用接近傳感器 291
29.6 檢測設備晃動 292

書摘/試閱

第一章數據類型、運算符、表達式
1.1 C語言的字符集
字符是組成語言的最基本的元素,C語言字符集由字母,數字,空格,標點和特殊字符組成,字符串常量和注釋中還可以使用漢字或其它可表示的圖形符號。
1.字母
小寫字母a~z共26個
大寫字母A~Z共26個
2.數字
0~9共10個
3.空白符
空格符、制表符、換行符等統稱為空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出現時,只起間隔作用,編譯程序對它們忽略不計。因此在程序中使用空白符與否,對程序的編譯不發生影響,但在程序中適當的地方使用空白符將增加程序的清晰性和可讀性。
4.標點和特殊字符
1.2 語言詞匯
在C語言中使用的詞匯分為六類:標識符、關鍵字、運算符、分隔符、常量、注釋符。
1.標識符
在程序中使用的變量名、函數名、標號等統稱為標識符。除庫函數的函數名由系統定義外,其余都由用戶自定義。C規定,標識符只能是字母(A~Z,a~z)、數字(0~9)、下劃線(_)組成的字符串,并且其第一個字符必須是字母或下劃線。
以下標識符是合法的:
a,x,x3,XXL_1,sum1
以下標識符是非法的:
3s 以數字開頭
A*T 出現非法字符*
-5x 以減號開頭
boy-1 出現非法字符-(減號)
在使用標識符時還必須注意以下幾點:
(1)標準C不限制標識符的長度,但它受各種版本的C語言編譯系統限制,同時也受到具體機器的限制。例如在某版本C中規定標識符前八位有效,當兩個標識符前八位相同時,則被認為是同一個標識符。
(2)在標識符中,大小寫是有區別的。例如name和NAME是兩個不同的標識符。
(3)標識符雖然可由程序員隨意定義,但標識符是用于標識某個量的符號。因此,命名應盡量有相應的意義,以便于閱讀理解,做到“顧名思義”。
2.關鍵字
關鍵字是由C語言規定的具有特定意義的字符串,通常也稱為保留字。用戶定義的標識符不應與關鍵字相同。C語言的關鍵字分為以下幾類:
(1)類型說明符
用于定義、說明變量、函數或其它數據結構的類型。如int,double等。
(2)語句定義符
用于表示一個語句的功能。如if else就是條件語句的語句定義符。
(3)預處理命令字
用于表示一個預處理命令。如include。
3.運算符
C語言中含有相當豐富的運算符。運算符與變量,函數一起組成表達式,表示各種運算功能。運算符由一個或多個字符組成。
4.分隔符
在C語言中采用的分隔符有逗號和空格兩種。逗號主要用在類型說明和函數參數表中,分隔各個變量。空格多用于語句各單詞之間,作為間隔符。在關鍵字,標識符之間必須要有一個以上的空格符作間隔,否則將會出現語法錯誤,例如把int a;寫成inta;C編譯器會把inta當成一個標識符處理,其結果必然出錯。
5.常量
C語言中使用的常量可分為數字常量、字符常量、字符串常量、符號常量、轉義字符等多種。在后面章節中將專門給予介紹。
6.注釋符
C語言的注釋符是以“/*”開頭并以“*/”結尾的串。在“/*”和“*/”之間的即為注釋。程序編譯時,不對注釋作任何處理。注釋可出現在程序中的任何位置。注釋用來向用戶提示或解釋程序的意義。在調試程序中對暫不使用的語句也可用注釋符括起來,使編譯跳過不做處理,待調試結束后再去掉注釋符。
1.3 數據類型
程序中使用的各種變量都應預先加以定義,即先定義,后使用。對變量的定義可以包括三個方面:數據類型、存儲類型、作用域。
在本章中,我們只介紹數據類型的說明。其它說明在以后各章中陸續介紹。所謂數據類型是按被定義變量的性質,表示形式,占據存儲空間的多少,構造特點來劃分的。在C語言中,數據類型可分為:基本數據類型,構造數據類型,指針類型,空類型四大類。


1.基本數據類型:基本數據類型最主要的特點是,其值不可以再分解為其它類型。也就是說,基本數據類型是自我說明的。
2.構造數據類型:構造數據類型是根據已定義的一個或多個數據類型用構造的方法來定義的。也就是說,一個構造類型的值可以分解成若干個“成員”或“元素”。每個“成員”都是一個基本數據類型或又是一個構造類型。在C語言中,構造類型有三種:數組類型、結構體類型、共用體(聯合)類型。
3.指針類型:指針是一種特殊的,同時又是具有重要作用的數據類型。其值用來表示某個變量在內存儲器中的地址。雖然指針變量的取值類似于整型量,但這是兩個類型完全不同的量,因此不能混為一談。
4.空類型:在調用函數值時,通常應向調用者返回一個函數值。這個返回的函數值是具有一定的數據類型的,應在函數定義及函數說明中給以說明,例如函數頭為:int max(int a,int b);其中“int ”類型說明符即表示該函數的返回值為整型量。但是,也有一類函數,調用后并不需要向調用者返回函數值,這種函數可以定義為“空類型”,其類型說明符為void,在后面函數中還要詳細介紹。
1.3.1 常量與變量
對于基本數據類型,按其取值是否可改變又分為常量和變量兩種。在程序執行過程中,其值不發生改變的量稱為常量,其值可變的量稱為變量。它們可與數據類型結合起來分類。例如,可分為整型常量、整型變量、浮點常量、浮點變量、字符常量、字符變量、枚舉常量、枚舉變量。在程序中,常量是可以不經說明而直接引用的,而變量則必須先定義后使用。整型量包括整型常量、整型變量。
1.3.2 常量和符號常量
在程序執行過程中,其值不發生改變的量稱為常量。
直接常量(字面常量):
整型常量:12、0、-3;
實型常量:4.6、-1.23;
字符常量:‘a’、‘b’。
標識符:用來標識變量名、符號常量名、函數名、數組名、類型名、文件名的有效字符序列。
符號常量:用標識符代表一個常量。在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量。
1.4 算術運算符和算術表達式
C語言中運算符和表達式數量之多,在高級語言中是少見的。正是豐富的運算符和表達式使C語言功能十分完善。這也是C語言的主要特點之一。
C語言的運算符不僅具有不同的優先級,而且還有一個特點,就是它的結合性。在表達式中,各運算量參與運算的先后順序不僅要遵守運算符優先級別的規定,還要受運算符結合性的制約,以便確定是自左向右進行運算還是自右向左進行運算。這種結合性是其它高級語言的運算符所沒有的,因此也增加了C語言的復雜性。
1.4.1 C運算符簡介
C語言的運算符可分為以下幾類:
算術運算符 — 用于各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增(++)、自減(--)共七種。
關系運算符 —用于比較運算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<>
邏輯運算符 —用于邏輯運算。包括與(&&)、或(||)、非(!)三種。
位操作運算符 —參與運算的量,按二進制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<)、右移(>>)六種。
賦值運算符 —用于賦值運算,分為簡單賦值(=)、復合算術賦值(+=,-=,*=,/=,%=)和復合位運算賦值(&=,|=,^=,>>=,<>
條件運算符 —這是一個三目運算符,用于條件求值(?:)。
逗號運算符 —用于把若干表達式組合成一個表達式(,)。
指針運算符 —用于取內容(*)和取地址(&)二種運算。
求字節數運算符 —用于計算數據類型所占的字節數(sizeof)。
特殊運算符 —有括號(),下標[],成員(->,.)等幾種。
下表列出了運算符的優先級
優先級 運算符 名稱或含義 使用形式 結合方向 說明
1 [] 數組下標 數組名[常量表達式] 左到右
() 圓括號 (表達式)/函數名(形參名)
. 成員選擇(對象) 對象.成員名
-> 成員選擇(指針) 對象指針->成員名
2 - 負號運算符 -表達式 右到左 單目運算符
(類型) 強制類型轉換 (數據類型)表達式
++ 自增運算符 ++變量名/變量名++ 單目運算符
-- 自減運算符 --變量名/變量名-- 單目運算符
* 取值運算符 *指針變量 單目運算符
& 取地址運算符 &變量名 單目運算符
! 邏輯非運算符 !表達式 單目運算符
~ 按位取反運算符 ~表達式 單目運算符
sizeof 長度運算符 sizeof(表達式)
3 / 除 表達式/表達式 左到右 雙目運算符
* 乘 表達式*表達式 雙目運算符
% 余數(取模) 整型表達式/整型表達式 雙目運算符
4 + 加 表達式+表達式 左到右 雙目運算符
- 減 表達式-表達式 雙目運算符
5 < 左移=""><表達式 左到右="">
>> 右移 變量>>表達式 雙目運算符
6 > 大于 表達式>表達式 左到右 雙目運算符
>= 大于等于 表達式>=表達式 雙目運算符
< 小于=""><表達式>
<= 小于等于=""><=表達式>
7 == 等于 表達式==表達式 左到右 雙目運算符
!= 不等于 表達式!=表達式 雙目運算符
8 & 按位與 表達式&表達式 左到右 雙目運算符
9 ^ 按位異或 表達式^表達式 左到右 雙目運算符
10 | 按位或 表達式|表達式 左到右 雙目運算符
11 && 邏輯與 表達式&&表達式 左到右 雙目運算符
12 || 邏輯或 表達式||表達式 左到右 雙目運算符
13 ?: 條件運算符 表達式1?表達式2:表達式3 右到左 三目運算符
14 = 賦值運算符 變量=表達式 右到左
/= 除后賦值 變量/=表達式
*= 乘后賦值 變量*=表達式
%= 取模后賦值 變量%=表達式
+= 加后賦值 變量+=表達式
-= 減后賦值 變量-=表達式
<= 左移后賦值=""><=表達式>
>>= 右移后賦值 變量>>=表達式
&= 按位與后賦值 變量&=表達式
^= 按位異或后賦值 變量^=表達式
|= 按位或后賦值 變量|=表達式
15 , 逗號運算符 表達式,表達式,… 左到右 從左向右順序運算
同一優先級的運算符,運算次序由結合方向所決定,簡單記就是:! > 算術運算符 > 關系運算符 >&&> || > 賦值運算符。
1.4.2算術表達式
表達式是由常量、變量、函數和運算符組合起來的式子。一個表達式有一個值及其類型,它們等于計算表達式所得結果的值和類型。表達式求值按運算符的優先級和結合性規定的順序進行。單個的常量、變量、函數可以看作是表達式的特例。
算術表達式是用算術運算符和括號將運算對象(也稱操作數)連接起來的、符合C語法規則的式子。
以下是算術表達式的例子:
a+b
(a*2)/c
(x+r)*8-(a+b)/7
++i。
小結:
通過本章的學習,我們初步了解了C程序的一些概念知識,包括字符集、基本數據類型以及算數運算符和表達式。
數據類型有:基本類型,構造類型,指針類型,空類型。
基本類型的分類及特點:

常量類型有:整數,長整數,無符號數,浮點數,字符,字符串,符號常數轉義字符。
一般而言,單目運算符優先級較高,賦值運算符優先級低。算術運算符優先級較高,關系和邏輯運算符優先級較低。多數運算符具有左結合性,單目運算符、三目運算符、賦值運算符具有右結合性。

第二章結構化程序設計
從程序流程的角度來看,程序可以分為三種基本結構,即順序結構、分支結構、循環結構。這三種基本結構可以組成所有的各種復雜程序。C語言提供了多種語句來實現這些程序結構。本章介紹這些基本語句及其在順序結構中的應用,使讀者對C程序有一個初步的認識,為后面各章的學習打下基礎。
2.1 C語句概述
C程序的執行部分是由語句組成的。程序的功能也是由執行語句實現的,C語句可分為五類:
1.表達式語句
表達式語句由表達式加上分號“;”組成,其一般形式為:
表達式;
執行表達式語句就是計算表達式的值。
例如:
x=y+z; 賦值語句;
y+z; 加法運算語句,但計算結果不能保留,無實際意義;
i++; 自增1語句,i值增1。
2.函數調用語句
由函數名、實際參數加上分號“;”組成,其一般形式為:
函數名(實際參數表);
執行函數語句就是調用函數體并把實際參數賦予函數定義中的形式參數,然后執行被調函數體中的語句,求取函數值(在后面函數中再詳細介紹) 。
例如:
printf("C Program");調用庫函數,輸出字符串。
3.控制語句
控制語句用于控制程序的流程,以實現程序的各種結構方式。C語言有九種控制語句。可分成以下三類:
條件判斷語句:if語句、switch語句;
循環執行語句:do while語句、while語句、for語句;
轉向語句:break語句、goto語句、continue語句、return語句。
4.復合語句
把多個語句用括號{}括起來組成的一個語句稱復合語句,在程序中應把復合語句看成是單條語句,而不是多條語句。
例如:
{
x=y+z;
a=b+c;
printf(“%d%d”,x,a);
}
是一條復合語句。
復合語句內的各條語句都必須以分號“;”結尾,在括號“}”外不能加分號。
5.空語句
只有分號“;”組成的語句稱為空語句。空語句是什么也不執行的語句。在程序中空語句可用來作空循環體。
例如:
while(getchar()!=\n);
本語句的功能是,只要從鍵盤輸入的字符不是回車則重新輸入。這里的循環體為空語句。
2.2賦值語句
賦值語句是由賦值表達式再加上分號構成的表達式語句。
其一般形式為:
變量=表達式;
賦值語句的功能和特點都與賦值表達式相同,它是程序中使用最多的語句之一。在賦值語句的使用中需要注意以下幾點:
1.由于在賦值符“=”右邊的表達式也可以又是一個賦值表達式,因此,下述形式:
變量=(變量=表達式);
是成立的,從而形成嵌套的情形。其展開之后的一般形式為:
變量=變量=…=表達式;
例如:
a=b=c=d=e=5;
按照賦值運算符的右接合性,因此實際上等效于:
e=5;
d=e;
c=d;
b=c;
a=b;
2.注意在變量說明中給變量賦初值和賦值語句的區別。
給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結尾。
例如:
int a=5,b,c;
3.在變量說明中,不允許連續給多個變量賦初值。
如下述說明是錯誤的:
int a=b=c=5;
必須寫為
int a=5,b=5,c=5;
而賦值語句允許連續賦值。
4.注意賦值表達式和賦值語句的區別。
賦值表達式是一種表達式,它可以出現在任何允許表達式出現的地方,而賦值語句則不能。
下述語句是合法的:
if((x=y+5)>0) z=x;
語句的功能是,若表達式x=y+5大于0則z=x。
下述語句是非法的:
if((x=y+5;)>0) z=x;
因為x=y+5;是語句,不能出現在表達式中。
2.3分支結構程序
用if語句可以構成分支結構。它根據給定的條件進行判斷,以決定執行某個分支程序段。C語言的if語句有三種基本形式。
1.第一種形式為基本形式:if
if(表達式) 語句
其語義是:如果表達式的值為真,則執行其后的語句,否則不執行該語句。
【例2.1】
main(){
int a=1,b=2,max=0;
if (a
printf("max=%d",max);//輸出max=2
}
上面的代碼程序中用if語句判別a和b的大小,如a小于b,則把b賦予max,最后輸出max的值。
2.第二種形式為: if-else
if(表達式)
語句1;
else
語句2;
其語義是:如果表達式的值為真,則執行語句1,否則執行語句2。
【例2.2】
main(){
int a, b;
printf("input two numbers: ");
scanf("%d%d",&a,&b);
if(a>b)
printf("max=%d\n",a);
else
printf("max=%d\n",b);
}
輸入兩個整數,輸出其中的大數。
改用if-else語句判別a,b的大小,若a大,則輸出a,否則輸出b。
3.第三種形式為if-else-if形式
前二種形式的if語句一般都用于兩個分支的情況。當有多個分支選擇時,可采用if-else-if語句,其一般形式為:
if(表達式)
語句1;
else if(表達式2)
語句2;
else if(表達式3)
語句3;

else if(表達式m)
語句m;
else
語句n;
其語義是:依次判斷表達式的值,當出現某個值為真時,則執行其對應的語句。然后跳到整個if語句之外繼續執行程序。如果所有的表達式均為假,則執行語句n。然后繼續執行后續程序。
在使用if語句中還應注意以下問題:
1.在三種形式的if語句中,在if關鍵字之后均為表達式。該表達式通常是邏輯表達式或關系表達式,但也可以是其它表達式,如賦值表達式等,甚至也可以是一個變量。
例如:
if(a=5) 語句;
if(b) 語句;
都是允許的。只要表達式的值為非0,即為“真”。
如在:
if(a=5)…;
中表達式的值永遠為非0,所以其后的語句總是要執行的,當然這種情況在程序中不一定會出現,但在語法上是合法的。
又如,有程序段:
if(a=b)
printf("%d",a);
else
printf("a=0");
本語句的語義是,把b值賦予a,如為非0則輸出該值,否則輸出“a=0”字符串。這種用法在程序中是經常出現的。
2.在if語句中,條件判斷表達式必須用括號括起來,在語句之后必須加分號。
3.在if語句的三種形式中,所有的語句應為單個語句,如果想在滿足條件時執行一組(多個)語句,則必須把這一組語句用{}括起來組成一個復合語句。但要注意的是在}之后不能再加分號。
例如:
if(a>b)
{
a++;
b++;
}
else
{
a=0;
b=10;
}
2.4 if語句的嵌套
當if語句中的執行語句又是if語句時,則構成了if語句嵌套的情形。其一般形式可表示如下:
if(表達式)
if語句;
或者為
if(表達式)
if語句;
else
if語句;
在嵌套內的if語句可能又是if-else型的,這將會出現多個if和多個else重疊的情況,這時要特別注意if和else的配對問題。
例如:
if(表達式1)
if(表達式2)
語句1;
else
語句2;
其中的else究竟是與哪一個if配對呢?
應該理解為:
if(表達式1)
if(表達式2)
語句1;
else
語句2;
還是應理解為:
if(表達式1)
if(表達式2)
語句1;
else
語句2;
為了避免這種二義性,C語言規定,else總是與它前面最近的if配對,因此對上述例子應按前一種情況理解。在一般情況下較少使用if語句的嵌套結構。以使程序更便于閱讀理解。
2.5 switch語句
C語言還提供了另一種用于多分支選擇的switch語句,其一般形式為:
switch(表達式){
case常量表達式1: 語句1;
case常量表達式2: 語句2;

case常量表達式n: 語句n;
default : 語句n+1;
}
其語義是:計算表達式的值,并逐個與其后的常量表達式值相比較,當表達式的值與某個常量表達式的值相等時,即執行其后的語句,然后不再進行判斷,繼續執行后面所有case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執行default后的語句。
【例2.3】
main(){
int a;
printf("input integer number: ");
scanf("%d",&a);
switch (a){
case 1:printf("Monday\n");
case 2:printf("Tuesday\n");
case 3:printf("Wednesday\n");
case 4:printf("Thursday\n");
case 5:printf("Friday\n");
case 6:printf("Saturday\n");
case 7:printf("Sunday\n");
default:printf("error\n");
}
}
本程序是要求輸入一個數字,輸出一個英文單詞。但是當輸入3之后,卻執行了case3以及以后的所有語句,輸出了Wednesday及以后的所有單詞。這當然是不希望的。為什么會出現這種情況呢?這恰恰反應了switch語句的一個特點。在switch語句中,“case 常量表達式”只相當于一個語句標號,表達式的值和某標號相等則轉向該標號執行,但不能在執行完該標號的語句后自動跳出整個switch語句,所以出現了繼續執行所有后面case語句的情況。這是與前面介紹的if語句完全不同的,應特別注意。為了避免上述情況,C語言還提供了一種break語句,專用于跳出switch語句,break語句只有關鍵字break,沒有參數。在后面還將詳細介紹。修改例題的程序,在每一個case語句之后增加break語句,使每一次執行之后均可跳出switch語句,從而避免輸出不應有的結果。
【例2.4】
main(){
int a;
printf("input integer number: ");
scanf("%d",&a);
switch (a){
case 1:printf("Monday\n");break;
case 2:printf("Tuesday\n"); break;
case 3:printf("Wednesday\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
case 7:printf("Sunday\n");break;
default:printf("error\n");
}
}
在使用switch語句時還應注意以下幾點:
1)在case后的各常量表達式的值不能相同,否則會出現錯誤。
2)在case后,允許有多個語句,可以不用{}括起來。
3)各case和default子句的先后順序可以變動,而不會影響程序執行結果。
4)default子句可以省略不用。
2.6 循環控制
循環結構是程序中一種很重要的結構。其特點是,在給定條件成立時,反復執行某程序段,直到條件不成立為止。給定的條件稱為循環條件,反復執行的程序段稱為循環體。C語言提供了多種循環語句,可以組成各種不同形式的循環結構。
1)用goto語句和if語句構成循環;
2)用while語句;
3)用do-while語句;
4)用for語句;
2.6.1 goto語句以及用goto語句構成循環
goto語句是一種無條件轉移語句,與BASIC中的goto語句相似。goto語句的使用格式為:
goto 語句標號;
其中標號是一個有效的標識符,這個標識符加上一個“:”一起出現在函數內某處,執行goto語句后,程序將跳轉到該標號處并執行其后的語句。另外標號必須與goto語句同處于一個函數中,但可以不在一個循環層中。通常goto語句與if條件語句連用,當滿足某一條件時,程序跳到標號處運行。
goto語句通常不用,主要因為它將使程序層次不清,且不易讀,但在多層嵌套退出時,用goto語句則比較合理。
【例2.5】用goto語句和if語句構成循環,求1+2+3+…+100的和。
main()
{
int i,sum=0;
i=1;
loop:if(i<>
{
sum=sum+i;
i++;
goto loop;
}
printf("%d\n",sum);
}
2.6.2 while語句
while語句的一般形式為:
while(表達式)語句
其中表達式是循環條件,語句為循環體。
while語句的語義是:計算表達式的值,當值為真(非0)時, 執行循環體語句。
【例2.6】用while語句求1+2+3+…+100的和。
main()
{
int i,sum=0;
i=1;
while(i<>
{
sum=sum+i;
i++;
}
printf("%d\n",sum);
}
使用while語句應注意:while語句中的表達式一般是關系表達或邏輯表達式,只要表達式的值為真(非0)即可繼續循環,循環體如包括有一個以上的語句,則必須用{}括起來,組成復合語句。
2.6.3 do-while語句
do-while語句的一般形式為:
do
語句
while(表達式);
這個循環與while循環的不同在于:它先執行循環中的語句,然后再判斷表達式是否為真,如果為真則繼續循環;如果為假,則終止循環。因此,do-while循環至少要執行一次循環語句。
【例2.7】用do-while語句求1+2+3+…+100的和。
main()
{
int i,sum=0;
i=1;
do
{
sum=sum+i;
i++;
}
while(i<>
printf("%d\n",sum);
}
同樣,當有許多語句參加循環時,要用"{"和"}"把它們括起來。
2.6.4 for語句
在C語言中,for語句使用最為靈活,它完全可以取代while語句。它的一般形式為:
for(表達式1;表達式2;表達式3) 語句
它的執行過程如下:
1)先求解表達式1。
2)求解表達式2,若其值為真(非0),則執行for語句中指定的內嵌語句,然后執行下面第3步;若其值為假(0),則結束循環,轉到第5步。
3)求解表達式3。
4)轉回上面第2步繼續執行。
5)循環結束,執行for語句下面的一個語句。
for語句最簡單的應用形式也是最容易理解的形式如下:
for(循環變量賦初值;循環條件;循環變量增量) 語句
循環變量賦初值總是一個賦值語句,它用來給循環控制變量賦初值。循環條件是一個關系表達式,它決定什么時候退出循環。循環變量增量,定義循環控制變量每循環一次后按什么方式變化。這三個部分之間用“;”分開。
例如:
for(i=1;i<>
sum=sum+i;
先給i賦初值1,判斷i是否小于等于100,若是則執行語句,之后值增加1。再重新判斷,直到條件為假,即i>100時,結束循環。
相當于:
i=1;
while(i<>
{
sum=sum+i;
i++;
}
對于for循環中語句的一般形式,就是如下的while循環形式:
表達式1;
while(表達式2)
{
語句
表達式3;
}
使用for循環時注意以下幾點:
1)for循環中的“表達式1(循環變量賦初值)”、“表達式2(循環條件)”和“表達式3(循環變量增量)”都是選擇項,即可以缺省,但“;”不能缺省。
2)省略了“表達式1(循環變量賦初值)”,表示不對循環控制變量賦初值。
3)省略了“表達式2(循環條件)”,則不做其它處理時便成為死循環。

您曾經瀏覽過的商品

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 459
海外經銷商無庫存,到貨日平均30天至45天