程序設計是從事軟件開發(fā)工作的技能,是一種需要創(chuàng)造性的智力密集型勞動。讓學生掌握程序設計的思想和方法,并通過一門具體的程序設計語言掌握程序設計的基本理論和具體語法表達,是高級程序設計語言教學的主要目標。
C語言是國際上廣泛流行的計算機語言之一,C語言具有很多突出的優(yōu)點,具備很強的數據處理能力,目前已成為計算機程序設計的主流語言。C語言不僅適用于系統軟件的設計,還適用于應用軟件設計,在操作系統、工具軟件、圖形圖像處理軟件、數值計算、人工智能、數據庫處理、嵌入式系統等多個方面都得到了廣泛的應用。目前,全國計算機等級考試、職業(yè)資格認定、技能大賽等都將C語言列入考查范圍。學習和使用C語言已經成為廣大計算機應用人員和學生的迫切需求。因此,我國絕大部分高等院校都以C語言作為學生程序設計入門的語言,同時,C語言也為進一步學習C 以及Visual C 奠定了基礎。
本書作為C語言程序設計的入門與應用教材,具有以下特色。
1.簡單易學,循序漸進
充分考慮到初學者學習C語言的特點,本書按照循序漸進、難點分散的原則組織內容。通過通俗易懂的敘述,闡明復雜、靈活的概念。對于難點與重點,通過豐富的例題,進行詳盡的解釋。力求做到語言通俗、概念清晰、易學實用,以使讀者能夠做到學得會、上手快、用得著。
2.注重基礎,突出實用
C語言博大精深。本書精選了對初學者而言最基本、最重要、最實用的內容進行介紹,不刻意追求所謂的全面和詳盡。對于較生僻的內容,也從概念講解入手進行簡單介紹,以保證C語言的完整性。力求做到內容新穎、實用,邏輯性強,完整性好,且又突出重點。
3.強化編程,理實結合
本書不只是講解C語言的語法規(guī)則,更重要的是培養(yǎng)讀者的C語言程序設計能力。本書始終強化編程思想,通過例題、程序案例、習題,給讀者以潛移默化的影響。由于程序設計語言是實踐性很強的課程,故每章都配有編程題,以使學生盡快掌握C語言的編程方法和提高調試程序的能力。
4.與時俱進,代碼規(guī)范
本書參照ISO/IEC 9899:2018,簡稱C18標準編寫程序,同時也符合全國計算機等級考試二級C語言程序設計考試大綱(2022年版)的要求,從第6章開始,大部分問題求解都以模塊化的方式進行程序設計,引導學生掌握模塊化程序設計思想。本書介紹的知識和程序具有通用性,基本可以適用于任何計算機系統和C版本,但是應說明,不同的C版本是有一些區(qū)別的。本書所有程序均在Visual C 6.0開發(fā)環(huán)境中調試通過。
本書適合作為高職高專院校及職業(yè)技術大學C語言程序設計課程教材,也可作為參加培訓、考級、考試的人員及廣大C語言愛好者的自學和參考用書。
本書的編者均為武漢職業(yè)技術大學人工智能學院(信創(chuàng)產業(yè)學院)從事軟件技術專業(yè)教學的教師。宋海民任主編,陳丹、胡大威、賈學斌任副主編。本書共10章,宋海民編寫第1章、第2章、第3章;胡大威編寫第4章、第5章;賈學斌編寫第6章、第7章、第8章、第10章及附錄;陳丹編寫第9章。以上各編者都是具有豐富教學實踐經驗的教師。
編者在編寫本書的過程中得到了武漢職業(yè)技術大學人工智能學院(信創(chuàng)產業(yè)學院)的大力支持。在編寫過程中,編者學習和借鑒了大量有關的參考資料,吸取了國內外同類教材和有關文獻的精華,在此向相關人員表示深深的感謝!
感謝教師及讀者使用本書,本書力爭反映編者的經驗和體會,由于編者水平有限,書中不足之處在所難免,懇請廣大讀者批評指正。
編 者
2025年3月
第1章 C語言概述001
1.1 初識C語言001
1.1.1 C語言的發(fā)展史001
1.1.2 C語言的特點與應用領域003
1.1.3 認識第一個C程序004
1.2 C語言的語法基礎005
1.2.1 C語言字符集005
1.2.2 標識符006
1.2.3 保留字006
1.3 設計簡單的C程序007
1.3.1 賦值語句007
1.3.2 printf ()函數008
1.3.3 scanf ()函數009
1.3.4 庫函數和頭文件010
1.4 C程序的開發(fā)過程012
1.4.1 C程序的實現步驟012
1.4.2 C語言常用集成開發(fā)環(huán)境013
1.5 在VC 6.0中開發(fā)C程序014
1.5.1 VC 6.0集成開發(fā)環(huán)境簡介014
1.5.2 建立控制臺應用程序015
1.6 程序案例019
習題1023
第2章 基本數據類型、運算符及表達式026
2.1 C語言的數據類型026
2.2 常量027
2.3 變量031
2.3.1 變量的定義031
2.3.2 整型變量033
2.3.3 實型變量037
2.3.4 字符變量038
2.4 運算符和表達式041
2.4.1 運算符的分類041
2.4.2 運算符的優(yōu)先級與結合性042
2.4.3 算術運算符和算術表達式042
2.4.4 增1、減1運算符及表達式044
2.4.5 賦值運算符和賦值表達式045
2.4.6 關系運算符和關系表達式048
2.4.7 邏輯運算符和邏輯表達式050
2.4.8 逗號運算符和逗號表達式052
2.4.9 sizeof運算符053
2.5 數據類型的轉換054
2.5.1 自動類型轉換054
2.5.2 強制類型轉換055
2.6 程序案例056
習題2058
第3章 順序結構程序設計061
3.1 結構化程序設計基礎061
3.1.1 算法的概念061
3.1.2 算法的特點062
3.1.3 算法的描述063
3.1.4 結構化程序設計067
3.2 輸入語句070
3.2.1 輸入/輸出(I/O)函數070
3.2.2 字符輸入函數和字符輸入語句071
3.2.3 格式輸入函數和格式輸入語句072
3.2.4 通過scanf ()函數從鍵盤輸入數據073
3.2.5 scanf ()函數輸入中常見錯誤分析074
3.3 輸出語句075
3.3.1 字符輸出函數和字符輸出語句075
3.3.2 格式輸出函數和格式輸出語句076
3.4 程序案例084
習題3086
第4章 選擇結構和循環(huán)結構程序設計092
4.1 if語句092
4.1.1 if語句概述092
4.1.2 if語句的嵌套098
4.1.3 條件運算符和條件表達式100
4.2 switch語句102
4.3 選擇結構程序設計案例106
4.4 while語句108
4.5 do…while語句111
4.6 for語句115
4.7 循環(huán)嵌套121
4.8 break語句和continue語句123
4.9 語句標號和goto語句125
4.10 循環(huán)結構程序設計案例126
習題4128
第5章 數組135
5.1 數組的概念135
5.2 一維數組136
5.2.1 一維數組的定義136
5.2.2 一維數組的初始化137
5.2.3 一維數組元素的引用138
5.2.4 一維數組的應用139
5.3 二維數組144
5.3.1 二維數組的定義144
5.3.2 二維數組的初始化145
5.3.3 二維數組元素的引用146
5.3.4 二維數組的應用147
5.4 字符數組148
5.4.1 字符數組的定義148
5.4.2 字符數組的初始化148
5.4.3 字符數組的引用149
5.4.4 字符串和字符串結束標志150
5.4.5 字符數組的輸入和輸出151
5.4.6 字符串處理函數152
5.4.7 字符數組的應用154
5.5 程序案例156
習題5158
第6章 函數162
6.1 C程序的模塊化設計162
6.1.1 函數的概念162
6.1.2 C程序模塊化設計163
6.1.3 函數的分類164
6.2 函數的定義165
6.2.1 無參函數的定義165
6.2.2 有參函數的定義166
6.2.3 函數定義的應用167
6.3 函數的參數與返回值168
6.4 函數的調用169
6.4.1 函數調用的一般格式170
6.4.2 函數調用的方式170
6.4.3 對被調函數的聲明172
6.4.4 函數的嵌套調用174
6.4.5 函數的遞歸調用175
6.5 數組作為函數參數179
6.6 變量的作用域和存儲類別184
6.6.1 變量的作用域184
6.6.2 變量的存儲類別186
6.6.3 局部變量的存儲類別186
6.6.4 全局變量的存儲類別193
6.7 函數的作用域和存儲類別196
6.8 程序案例197
習題6201
第7章 編譯預處理210
7.1 宏定義210
7.1.1 不帶參數的宏定義210
7.1.2 帶參數的宏定義214
7.1.3 取消宏定義218
7.2 文件包含218
7.3 條件編譯221
7.4 程序案例224
習題7225
第8章 指針231
8.1 指針概述231
8.1.1 內存地址與變量的地址231
8.1.2 指針與指針變量233
8.2 指針變量234
8.2.1 指針變量的定義與初始化234
8.2.2 指針變量的引用235
8.2.3 指針變量作為函數的參數238
8.3 指針與數組241
8.3.1 指向數組元素的指針241
8.3.2 指針變量的運算242
8.3.3 通過指針引用數組元素246
8.3.4 數組名和指針變量作函數參數250
8.4 指針與字符串253
8.4.1 字符串指針變量的定義與使用253
8.4.2 字符串指針變量作函數參數255
8.4.3 使用字符串指針變量與使用字符數組的區(qū)別256
8.5 指針與函數257
8.5.1 函數指針變量257
8.5.2 指針型函數259
8.6 指針數組和二級指針260
8.6.1 指針數組260
8.6.2 二級指針262
8.7 程序案例264
習題8265
第9章 構造數據類型270
9.1 結構體類型270
9.1.1 結構體類型聲明270
9.1.2 結構體變量的定義271
9.1.3 結構體變量的初始化及成員的引用276
9.2 結構體數組278
9.2.1 結構體數組的定義278
9.2.2 結構體數組的初始化及訪問279
9.3 結構體函數281
9.3.1 結構體變量作為函數參數281
9.3.2 結構體變量為函數的返回值282
9.4 結構體指針283
9.4.1 指向結構體變量的指針變量284
9.4.2 指向結構體數組元素的指針286
9.4.3 用指向結構體的指針作為函數參數287
9.5 共用體類型289
9.6 枚舉類型293
9.7 用typedef定義類型296
9.8 程序案例299
習題9301
第10章 文件308
10.1 文件概述308
10.1.1 文件的概念308
10.1.2 文件指針309
10.1.3 緩沖文件系統和非緩沖文件系統310
10.2 文件的打開和關閉311
10.2.1 用fopen ()函數打開文件311
10.2.2 用fclose ()函數關閉文件 314
10.3 文件的順序讀寫315
10.3.1 文本文件中字符的輸入/輸出315
10.3.2 文本文件中字符串的輸入/輸出317
10.3.3 文本文件的格式化輸入/輸出319
10.3.4 二進制文件的輸入/輸出320
10.4 文件的隨機讀寫321
10.5 文件檢測函數322
10.6 程序案例323
習題10326
附錄A 常用字符與ASCII碼對照表330
附錄B 運算符的優(yōu)先級和結合性332
參考文獻334