本書(shū)是根據計算機等級考試二級的教學(xué)大綱中對C語(yǔ)言的要求而編寫(xiě)的“C語(yǔ)言程序設計”教材。在編撰過(guò)程中,針對初學(xué)C語(yǔ)言遇到的問(wèn)題,力求面向應用,重視實(shí)踐,精選了大量典型的程序實(shí)例和圖表,用通俗的語(yǔ)言,由淺入深系統地介紹了C語(yǔ)言的基本概念、語(yǔ)法規則和程序設計的方法,使讀者能正確、直觀(guān)地理解編程問(wèn)題,便于初學(xué)者學(xué)習和掌握。
本書(shū)以Visual C++ 6.0軟件系統作為C語(yǔ)言程序開(kāi)發(fā)環(huán)境,注重教材的可讀性和實(shí)用性,內容涵蓋了C語(yǔ)言和程序設計的主要基礎知識。書(shū)中所列的實(shí)例均能在Visual C++ 6.0環(huán)境下運行。每章后都有習題,習題類(lèi)型豐富,針對性強,基本涉及了所有關(guān)鍵的知識點(diǎn),使讀者既能加深對基本概念的理解,又能拓寬編程思路。書(shū)后有附錄,便于讀者查詢(xún)。
本書(shū)可以作為高校計算機程序設計課程的教材,也可作為計算機等級考試的教材。
馬杰,副教授,長(cháng)期從事程序設計教學(xué)。
第1章 C語(yǔ)言概述
1.1 C語(yǔ)言的出現及特點(diǎn)…………………………………………………………………………………………1
1.1.1計算機程序設計語(yǔ)言介紹……………………………………………………………………………1
1.1.2 C語(yǔ)言的特點(diǎn)………………………………………………………………………………………2
1.2簡(jiǎn)單C程序示例………………………………………………………………………………………………2
1.3 C語(yǔ)言程序的編譯和運行……………………………………………………………………………………6
1.3.1程序編寫(xiě)與運行步驟…………………………………………………………………………………6
1.3.2 Visual C++6.0 的上機過(guò)程…………………………………………………………………………6
1.4 算法 …………………………………………………………………………………………………………8
1.4.1 算法的概念 …………………………………………………………………………………………8
1.4.2 流程圖及N-S流程圖 ………………………………………………………………………………9
習題一…………………………………………………………………………………………………………10
第2章 數據類(lèi)型、運算符和表達式 ………………………………………………………………………11
2.1 概述…………………………………………………………………………………………………………11
2.2 標識符、常量和變量………………………………………………………………………………………12
2.2.1 標識符………………………………………………………………………………………………12
2.2.2 常量…………………………………………………………………………………………………13
2.2.3 變量…………………………………………………………………………………………………14
2.3 整型數據……………………………………………………………………………………………………15
2.3.1整型數據分類(lèi)………………………………………………………………………………………15
2.3.2整型數據在內存中的存儲形式…………………………………………………………………16
2.3.3整型常量……………………………………………………………………………………………17
2.3.4整型變量……………………………………………………………………………………………18
2.4 實(shí)型數據……………………………………………………………………………………………………19
2.4.1實(shí)型數據的分類(lèi)及在內存中存儲形式……………………………………………………………19
2.4.2實(shí)型常量與實(shí)型變量 ……………………………………………………………………………21
2.5 字符型數據………………………………………………………………………………………………22
2.5.1字符型數據在內存中存儲形式…………………………………………………………………22
2.5.2字符型常量的表示與字符型變量的定義方法…………………………………………………23
2.6算術(shù)運算符和算術(shù)表達式………………………………………………………………………………25
2.6.1 C語(yǔ)言中運算符簡(jiǎn)介……………………………………………………………………………25
2.6.2算術(shù)運算符和算術(shù)表達式………………………………………………………………………26
2.6.3運算符的優(yōu)先級、結合性………………………………………………………………………27
2.7 類(lèi)型轉換………………………………………………………………………………………………28
2.7.1隱式(自動(dòng))類(lèi)型轉換………………………………………………………………………………28
2.7.2強制類(lèi)型轉換………………………………………………………………………………29
2.8 賦值運算符和賦值表達式…………………………………………………………………………………30
2.8.1 賦值運算符和賦值表達式………………………………………………………………………30
2.8.2 復合賦值運算符…………………………………………………………………………………31
2.8.3 變量賦初始值………………………………………………………………………………………32
2.8.4 賦值運算中的類(lèi)型轉換……………………………………………………………………………33
2.9 自加、自減運算符和逗號運算符…………………………………………………………………………35
2.9.1 自加運算符(++)和自減運算符(--)……………………………………………………………35
2.9.2 逗號運算符和逗號表達式…………………………………………………………………………36
2.10 關(guān)系、邏輯運算符及表達式…………………………………………………………………………37
2.10.1關(guān)系運算符和關(guān)系表達式…………………………………………………………………………38
2.10.2邏輯運算符和邏輯表達式…………………………………………………………………………40
2.11 位運算…………………………………………………………………………………………………41
2.11.1位運算符和位運算……………………………………………………………………………41
2.11.2位運算符的運算功能…………………………………………………………………………42
習題二……………………………………………………………………………………………………………45
第3章 語(yǔ)句和程序控制………………………………………………………………………………………48
3.1 程序的三種基本結構及流程圖表示……………………………………………………………………48
3.2 C語(yǔ)言語(yǔ)句………………………………………………………………………………………………50
3.3 數據的輸入和輸出………………………………………………………………………………………51
3.3.1 putchar函數…………………………………………………………………………………………51
3.3.2 getchar函數…………………………………………………………………………………………52
3.3.3 printf函數…………………………………………………………………………………………52
3.3.4 scanf函數……………………………………………………………………………………………56
3.4 if語(yǔ)句……………………………………………………………………………………………………58
3.4.1 if語(yǔ)句的兩種基本形式……………………………………………………………………………58
3.4.2 if語(yǔ)句的嵌套………………………………………………………………………………………61
3.4.3 條件運算符與條件表達式…………………………………………………………………………64
3.5 switch語(yǔ)句………………………………………………………………………………………………65
3.6 for語(yǔ)句…………………………………………………………………………………………………67
3.7 while語(yǔ)句………………………………………………………………………………………………73
3.8 do-while語(yǔ)句…………………………………………………………………………………………74
3.9 break語(yǔ)句及continue語(yǔ)句……………………………………………………………………………77
3.9.1 break語(yǔ)句……………………………………………………………………………………………77
3.9.2 continue語(yǔ)句………………………………………………………………………………………78
3.10 goto語(yǔ)句………………………………………………………………………………………………80
3.11 程序舉例………………………………………………………………………………………………81
習題三…………………………………………………………………………………………………………92
第4章 函數與程序結構………………………………………………………………………………………96
4.1 函數及其定義……………………………………………………………………………………………97
4.2 函數的參數及函數的值…………………………………………………………………………………98
4.3 函數的調用……………………………………………………………………………………………100
4.4 遞歸……………………………………………………………………………………………………103
4.5 C語(yǔ)言程序的一般結構………………………………………………………………………………104
4.6 變量的作用域與存儲類(lèi)型……………………………………………………………………………104
4.6.1 變量的作用域……………………………………………………………………………………104
4.6.2 變量的存儲類(lèi)型…………………………………………………………………………………106
4.7 C語(yǔ)言編譯預處理命令…………………………………………………………………………………108
4.7.1 宏定義………………………………………………………………………………………………108
4.7.2 文件包含……………………………………………………………………………………………110
4.7.3 條件編譯……………………………………………………………………………………………112
習題四………………………………………………………………………………………………………113
第5章 數組……………………………………………………………………………………………………116
5.1 數組的概念……………………………………………………………………………………………116
5.2 一維數組………………………………………………………………………………………………117
5.2.1 一維數組的定義…………………………………………………………………………………117
5.2.2 一維數組元素的引用……………………………………………………………………………118
5.2.3 一維數組的初始化………………………………………………………………………………119
5.2.4一維數組的程序設計應用舉例……………………………………………………………………120
5.3 二維數組………………………………………………………………………………………………126
5.3.1 二維數組的定義…………………………………………………………………………………126
5.3.2 二維數組元素的引用……………………………………………………………………………127
5.3.3 二維數組的初始化………………………………………………………………………………127
5.3.4二維數組的程序設計應用舉例……………………………………………………………………129
5.4 數組在函數調用中的應用………………………………………………………………………………131
5.4.1 數組元素作為函數實(shí)參…………………………………………………………………………131
5.4.2 一維數組名作為函數參數………………………………………………………………………131
5.4.3 二維數組名作為函數參數………………………………………………………………………135
習題五………………………………………………………………………………………………………137
第6章 指針……………………………………………………………………………………………………141
6.1 指針與地址………………………………………………………………………………………………141
6.1.1計算機內存的基本組織……………………………………………………………………………141
6.1.2內存中的存儲單元…………………………………………………………………………………142
6.1.3存儲單元與變量……………………………………………………………………………………143
6.1.4指針的概念…………………………………………………………………………………………144
6.1.5變量指針的使用……………………………………………………………………………………146
6.1.6指針的類(lèi)型及表示…………………………………………………………………………………147
6.2指針變量定義和使用……………………………………………………………………………………148
6.2.1指針變量的定義及初始化…………………………………………………………………………148
6.2.2指針變量的引用……………………………………………………………………………………151
6.2.3指針變量的運算……………………………………………………………………………………153
6.2.4動(dòng)態(tài)存儲分配………………………………………………………………………………………157
6.2.5指針作為函數參數…………………………………………………………………………………159
6.3 數組與指針………………………………………………………………………………………………163
6.3.1用指針訪(fǎng)問(wèn)一維數組元素……………………………………………………………………………163
6.3.2 一維數組名與指針…………………………………………………………………………………165
6.3.3 多維數組和指針……………………………………………………………………………………168
6.3.4指向數組的行指針變量………………………………………………………………………………174
6.3.5用指向數組的指針作為函數的參數…………………………………………………………………177
6.4 指針數組…………………………………………………………………………………………………183
6.4.1 指針數組的定義及使用……………………………………………………………………………184
6.4.2 用指針數組訪(fǎng)問(wèn)二維數組元素……………………………………………………………………188
6.4.3 main函數的命令行參數……………………………………………………………………………189
6.5 指向函數的指針…………………………………………………………………………………………193
6.5.1 用指向函數的指針變量調用函數…………………………………………………………………193
6.5.2 用指向函數的指針變量作為函數的參數…………………………………………………………195
6.6 返回值類(lèi)型為指針的函數………………………………………………………………………………197
6.7 指向指針的指針…………………………………………………………………………………………199
6.8有關(guān)指針的應用舉例……………………………………………………………………………………203
習題六…………………………………………………………………………………………………………209
第7章 字符串…………………………………………………………………………………………………214
7.1字符串和字符數組………………………………………………………………………………………214
7.2常用的字符串處理函數…………………………………………………………………………………215
7.2.1字符串輸入輸出函數………………………………………………………………………………215
7.2.2字符串其它相關(guān)函數………………………………………………………………………………217
7.3 字符串與指針……………………………………………………………………………………………221
7.3.1指向字符串的指針…………………………………………………………………………………221
7.3.2字符指針作函數參數………………………………………………………………………………224
7.3.3返回值為字符指針的函數…………………………………………………………………………228
7.4存儲字符串的數組………………………………………………………………………………………229
7.5有關(guān)字符串的程序舉例…………………………………………………………………………………232
習題七…………………………………………………………………………………………………………235
第8章 結構體、共用體和枚舉類(lèi)型……………………………………………………………………237
8.1 概述………………………………………………………………………………………………………237
8.2用typedef說(shuō)明新類(lèi)型……………………………………………………………………………………237
8.3 結構體類(lèi)型………………………………………………………………………………………………238
8.3.1 結構體類(lèi)型的說(shuō)明…………………………………………………………………………………238
8.3.2 結構體變量的定義…………………………………………………………………………………239
8.3.3 結構體變量的初始化………………………………………………………………………………241
8.3.4結構體與指針…………………………………………………………………………………………241
8.3.5引用結構體變量中的數據……………………………………………………………………………242
8.3.6結構體數組……………………………………………………………………………………………243
8.3.7結構體與函數…………………………………………………………………………………………244
8.3.8自引用的結構體與鏈表………………………………………………………………………………249
8.4 共用體……………………………………………………………………………………………………259
8.4.1 共用體類(lèi)型的說(shuō)明和變量定義……………………………………………………………………259
8.4.2 共用體變量的引用…………………………………………………………………………………261
8.5 枚舉類(lèi)型…………………………………………………………………………………………………262
8.6 應用舉例…………………………………………………………………………………………………264
習題八…………………………………………………………………………………………………………269
第9章 文件……………………………………………………………………………………………………274
9.1 文件的概念………………………………………………………………………………………………274
9.2 文件指針…………………………………………………………………………………………………274
9.3 文件的打開(kāi)和關(guān)閉………………………………………………………………………………………275
9.4 文件的讀寫(xiě)……………………………………………………………………………………………277
9.4.1 文件的字符輸入和輸出…………………………………………………………………………277
9.4.2 文件的字符串輸入和輸出………………………………………………………………………279
9.4.3 文件的格式化輸入和輸出………………………………………………………………………280
9.4.4塊的讀寫(xiě)…………………………………………………………………………………………282
9.5 文件的定位……………………………………………………………………………………………285
9.5.1 rewind函數………………………………………………………………………………………285
9.5.2 fseek函數和隨機讀寫(xiě)…………………………………………………………………………286
9.5.3 ftell函數………………………………………………………………………………………287
9.6文件的出錯處理…………………………………………………………………………………………288
9.7文件的其它相關(guān)函數……………………………………………………………………………………288
習題九…………………………………………………………………………………………………………291
附錄………………………………………………………………………………………………………………292
附錄一 常見(jiàn)字符與ASCII代碼對照表……………………………………………………………………292
附錄二 C運算符的優(yōu)先級和結合性………………………………………………………………………293
附錄三 C常用的庫函數……………………………………………………………………………………294
參考文獻………………………………………………………………………………………………………298
現代信息社會(huì )的發(fā)展離不開(kāi)計算機技術(shù)。長(cháng)期以來(lái),我國的電子信息行業(yè)較偏重硬件,因此軟件的發(fā)展相對滯后。然而,隨著(zhù)時(shí)代的發(fā)展和技術(shù)的進(jìn)步,軟件的重要性越來(lái)越突顯,尤其是在強調自主創(chuàng )新的今天,掌握核心軟件技術(shù),擁有自主知識產(chǎn)權,已成為影響我國信息產(chǎn)業(yè)升級和技術(shù)進(jìn)步的重大戰略問(wèn)題。因此,作為普通高校的學(xué)生,尤其是非計算機專(zhuān)業(yè)的學(xué)生,不能只滿(mǎn)足于對一些諸如辦公、制表、上網(wǎng)等應用軟件的使用,而應該努力掌握一門(mén)計算機編程語(yǔ)言,并學(xué)會(huì )程序設計的方法,培養自己獨立編程和解決實(shí)際問(wèn)題的能力,才能更好地適應未來(lái)發(fā)展需要。
程序設計是計算機軟件技術(shù)的基礎。計算機只有通過(guò)運行程序才能正常工作,而程序設計的好壞,直接影響到計算機性能的高低。因此,程序設計是軟件開(kāi)發(fā)人員的基本功。計算機編程語(yǔ)言是實(shí)現程序設計的工具,C語(yǔ)言就是其中的一種。由于C語(yǔ)言的優(yōu)良特性和強大功能,因此使用C語(yǔ)言進(jìn)行程序設計已成為人們的首選。C語(yǔ)言和程序設計的關(guān)系就像中文語(yǔ)言和文章的關(guān)系一樣,密不可分,缺一不可。目前,C語(yǔ)言程序設計已成為普通高等院校一門(mén)重要的計算機基礎課程。
通常,C語(yǔ)言程序設計課程安排在大學(xué)一年級,而對于很多剛入校的學(xué)生而言,由于缺乏計算機方面的基礎知識,加上上機實(shí)踐經(jīng)驗不夠,往往會(huì )感到抽象難學(xué),甚至有些學(xué)生學(xué)完C語(yǔ)言后,不能根據實(shí)際需要設計出程序來(lái)解決問(wèn)題。
究其原因,一個(gè)關(guān)鍵的問(wèn)題就是學(xué)生在學(xué)習的過(guò)程中,忽視了對實(shí)際問(wèn)題抽象成數據以及對任務(wù)的要求進(jìn)行邏輯劃分,缺乏設計算法的思維訓練和能力培養。因為,這里的邏輯抽象和算法設計并不像數學(xué)那樣有公式推導和定律可循,而是需要反復通過(guò)實(shí)例進(jìn)行分析、綜合、理解和借鑒才逐漸培養而成的。實(shí)際上,程序的內容無(wú)非分為兩種:一是數據,二是操作。數據是任務(wù)處理的對象,操作則是任務(wù)處理的具體步驟。因此,程序設計的基本任務(wù)就是,根據實(shí)際問(wèn)題的需要,將問(wèn)題抽象成數據,并選擇合適的數據結構進(jìn)行表示,然后再根據任務(wù)要求劃分處理步驟并形成算法,最后再通過(guò)計算機語(yǔ)言編寫(xiě)出可運行的程序。在C語(yǔ)言中,數據的表示通過(guò)數據類(lèi)型等實(shí)現,而算法的操作步驟則由表達式、語(yǔ)句和函數等實(shí)現,C語(yǔ)言程序就是根據這些數據類(lèi)型和表達式、語(yǔ)句、函數等編寫(xiě)而成的。
學(xué)生感到難學(xué)的另一個(gè)關(guān)鍵問(wèn)題就是上機實(shí)踐的機會(huì )太少。C語(yǔ)言作為一種編程語(yǔ)言,其概念新穎,內容廣泛,語(yǔ)法細節和變化較多,不少學(xué)生因記不住而為此感到無(wú)所適從,這也反映了學(xué)生還沒(méi)有從過(guò)去的思維方式中轉變過(guò)來(lái)。實(shí)際上,對于理工科學(xué)生,作為剛步入大學(xué)就接觸的第一門(mén)專(zhuān)業(yè)基礎課程,C語(yǔ)言程序設計無(wú)論是思考問(wèn)題的角度,還是處理問(wèn)題的方法,都與以往他們在高中所學(xué)的數學(xué)、語(yǔ)文等課程的思維方式和學(xué)習方法有所不同。因此,C語(yǔ)言的學(xué)習要求多上機實(shí)踐,光靠聽(tīng)課和看書(shū)是學(xué)不會(huì )的。C語(yǔ)言的很多語(yǔ)法細節只有通過(guò)動(dòng)手編程,并親自上機調試運行才能深刻理解。因為,只要上機編譯,計算機就能立刻給出所有語(yǔ)法的錯誤提示,在這種背景下去修改錯誤才能更深刻地理解其中語(yǔ)法細節的來(lái)龍去脈。初學(xué)者一開(kāi)始就應該著(zhù)眼于學(xué)會(huì )看懂程序,并編寫(xiě)簡(jiǎn)單的程序,然后再逐步深入。語(yǔ)法細節是需要通過(guò)長(cháng)期的實(shí)踐和積累才能熟練掌握的,而且有些語(yǔ)法細節,對于初學(xué)者來(lái)說(shuō),不要濫用,比如用i=i+1能解決問(wèn)題的就不必非要強求用i++,只有熟悉了才適時(shí)選用??傊?,初學(xué)者一定要重視實(shí)踐環(huán)節,包括編程和上機,要既會(huì )編寫(xiě)程序,又會(huì )調試程序。C語(yǔ)言程序設計學(xué)得好與壞,不是看你能做對多少是非題和選擇題,而是看你能不能編寫(xiě)程序和調試程序。另外,對待上機出錯,不少初學(xué)者感到很沮喪。其實(shí),這是必須經(jīng)歷的階段,誰(shuí)也無(wú)法幸免。所謂的編程高手,都不是在一帆風(fēng)順、毫無(wú)差錯中成長(cháng)起來(lái)的,恰恰相反,是在不斷的出錯和糾錯中成長(cháng)起來(lái)的。初學(xué)者應該歡迎錯誤的出現并努力解決,而不是畏之如虎、有意躲避,而這也是跟以往思維方式截然不同的地方。
本書(shū)的作者根據長(cháng)期從事C語(yǔ)言程序設計課程的教學(xué)實(shí)踐,針對初學(xué)者遇到的問(wèn)題和情況,在編撰本教材的過(guò)程中,力求面向應用,重視實(shí)踐,精選了大量典型的程序實(shí)例和圖表,用通俗的語(yǔ)言,由淺入深系統地介紹了C語(yǔ)言的基本概念、語(yǔ)法規則和程序設計的方法,內容翔實(shí),重點(diǎn)突出,使讀者能正確、直觀(guān)地理解問(wèn)題,便于初學(xué)者學(xué)習和掌握。
全書(shū)以Visual C++ 6.0軟件系統作為C語(yǔ)言程序開(kāi)發(fā)環(huán)境,注重教材的可讀性和實(shí)用性,內容涵蓋了C語(yǔ)言和程序設計的主要基礎知識。書(shū)中所列的實(shí)例均能在Visual C++ 6.0環(huán)境下運行,便于讀者上機驗證。書(shū)后有附錄,便于讀者查詢(xún)。每章后都有習題,習題類(lèi)型豐富,針對性強,基本涉及了所有關(guān)鍵的知識點(diǎn),使讀者既能加深對基本概念的理解,又能拓寬編程思路。
全書(shū)共分9章,由桂林電子科技大學(xué)馬杰、張向利、覃匡宇和桂林理工大學(xué)陳基漓共同編寫(xiě)而成。其中第5、6章由馬杰編寫(xiě);第1、3、4章由張向利編寫(xiě);第8、9章由覃匡宇編寫(xiě);第2、7章由陳基漓編寫(xiě)。全書(shū)最后由馬杰、張向利統一審定。
本教材有配套輔助教材《C語(yǔ)言程序設計基礎學(xué)習指導》一書(shū)。該書(shū)包含本書(shū)各章的習題解答、C語(yǔ)言實(shí)驗指導、計算機等級考試樣題及分析、程序設計競賽試題及分析以及VC常用函數速查手冊、VC調試常見(jiàn)錯誤等內容,內容新穎,題型豐富,實(shí)用性強,適合初學(xué)者鞏固基礎,加強訓練,拓寬視野。
本教材參考和部分引用了國內外一些已有的C語(yǔ)言教材,對于他們寶貴的勞動(dòng)成果,我們表示由衷的欽佩和感謝。
由于編寫(xiě)時(shí)間倉促,再加上作者水平有限,書(shū)中的缺點(diǎn)和錯誤在所難免,殷切希望廣大讀者批評指正。
無(wú)
無(wú)
向高校推薦,作為計算機程序設計課教材。
無(wú)
![]() |
![]() |
![]() |
會(huì )員家 | 書(shū)天堂 | 天貓旗艦店 |
![]() | ![]() |
微信公眾號 | 官方微博 |
版權所有:廣西師范大學(xué)出版社集團 GUANGXI NORMAL UNIVERSITY PRESS(GROUP) | 紀委舉/報投訴郵箱 :cbsjw@bbtpress.com 紀委舉報電話(huà):0773-2288699
網(wǎng)絡(luò )出版服務(wù)許可證: (署) | 網(wǎng)出證 (桂) 字第008號 | 備案號:桂ICP備12003475號 | 新出網(wǎng)證(桂)字002號 | 公安機關(guān)備案號:45030202000033號