C語言是國內外廣泛使用的計算機編程語言,是高等學校理工科專業(yè)學生必須掌握的一門計算機程序設計語言。本書是一本集知識性和實用性的C語言程序設計教材,全書由9章組成,講述了C語言程序的基本結構、運算符與表達式、常見基本算法、流程控制語句、函數、數組、指針、預編譯命令、結構體與共用體、文件的基本操作等,同時還講述了程序設計的基本思想和規(guī)范,并在附錄中提供了上機實驗內容。 本書大部分章節(jié)都是從實際問題導引,在分析問題的過程中逐步引出知識點,形成較為清晰的思路和知識主線,每章的案例內容與實踐緊密結合,力爭達到舉一反三和融會貫通,主要章節(jié)提供了綜合應用案例分析,可以使讀者加深對C語言程序設計知識的理解。本書配有相應的學習指導書、多媒體課件、習題代碼、習題解答以及工程認證的教學大綱,既可作為計算機專業(yè)和其他理工科專業(yè)C語言程序設計課程的教材,也可作為計算機等級考試和自學人員的參考書。
本書大部分章節(jié)都是從實際問題導引,通過分析這些實際問題引出知識點,形成較為清晰的思路和知識主線,每章的案例內容與實踐緊密結合,力爭達到舉一反三和融會貫通,主要章節(jié)都提供了綜合應用案例分析,可以使讀者加深對C語言程序設計的知識理解。本教材配有相應的學習指導書、多媒體課件、習題代碼、習題解答以及工程認證的教學大綱。
隨著計算機技術的飛速發(fā)展,計算機對社會的進步產生了巨大的影響。計算機教育已經是大學教育的重要組成部分,程序設計語言即為打開計算機世界大門的鑰匙。為此,眾多高校都將C語言程序設計作為本科生的基礎課程。C語言程序設計方法既是要求學生必須掌握的基礎方法,也是進行計算思維方法的訓練、問題的抽象表示和解決的重要工具。在C語言程序設計的教學過程中,教師通常根據語言的語法體系展開教學活動,以語法、程序結構等作為教學的重點。在C語言的學習過程中,學習者雖然對C語言的各種語法結構和程序基本結構都能基本掌握,但對于如何從問題出發(fā),進行抽象分析、設計求解方法等方面涉及不足,從而在實際應用中解決問題時,還是感覺無從下手,力不從心。這就要求程序設計語言的教學工作重點不僅要求學生掌握語言的語法結構和程序結構,還需要提高學生的語言應用能力,提高對問題的抽象分析能力和語言的表達能力。對于程序設計語言的學習,不僅僅需要了解語言的語法細節(jié),還需要不斷深入地學習和理解基本的算法和計算形式,利用基本的算法解決一些身邊的實際問題,從而提高語言的應用能力。在多年的教學實踐中,我們對學生進一步學習的愿望有較為深刻的理解。為了更加有效地開展C語言程序設計的教學工作,不斷提高學生對程序設計認識、實踐與應用的能力,作者在長期的C語言課程教學過程中,努力探索、大膽實踐,在注重理論知識教學的同時,不斷強化實驗教學環(huán)節(jié),形成了一整套行之有效的教學方法,并確立了具有自身特色的教學思想。
作為長期教學與實踐經驗的總結,筆者于2011年編寫并出版了《C語言程序設計教程》。從第1版至今,已經走過11個年頭,《C語言程序設計教程》也從第1版改版到現在的第3版,在改版的過程中得到了眾多師生的支持和厚愛,并提出了很多寶貴的建議和意見,我們在第2版的基礎上,根據使用教材的教師反饋意見和學生進一步學習和實踐的需求,重新改寫部分章節(jié),調整了部分例題和習題,形成了第3版。
第3版不僅介紹了C語言的基本語法和程序結構,對C 語言中容易混淆和不易理解的知識點進行深入分析解釋,同時介紹了程序設計的基本方法,總結了程序設計中的常用方法,在重要章節(jié)設計了問題引入與分析環(huán)節(jié),引導學習者帶著問題學習C語言的知識點,進而編寫出求解問題的完整程序,突出以問題為中心的講授方式,并以案例驅動的方式,使學生帶著問題去學習。另外,第3版還講述了Visual Studio 2019 C 、CodeBlocks、DevC 環(huán)境下編輯調試C語言程序的方法。在本版中進一步將算法與數據結構緊密聯系在一起,突出程序設計的基本方法。在例題的講解中,突出了問題的難易層次,引導學習者遵循著分析問題設計算法編寫代碼的步驟,學習程序設計的方法和技巧,突出實踐編程能力。在練習題的設計上,不僅滿足全國計算機等級考試的需求,而且強化實踐動手的能力。
本書系統(tǒng)、全面地介紹了C語言程序設計的方法。共分9 章。第1章主要介紹C語言的發(fā)展歷史和基本程序結構; 第2章主要講述數據類型、運算符和表達式; 第3章在介紹常用的基本算法的基礎上,重點討論程序的控制流程和程序的基本結構; 第4章討論函數; 第5章介紹數組; 第6章重點說明指針及指針數據的使用方法; 第7章講述預處編譯命令; 第8章引入結構體與共用體; 第9章重點介紹文件及其操作等內容。本書內容全面,結構合理,通過實例對C語言的語法要點進行了詳盡的闡述。
本書既可供C語言初學者學習使用,也可供具有一定經驗的軟件開發(fā)人員學習參考。
感謝南京信息工程大學C語言課程組的老師,為本書的改版提出了具有指導意義的幫助和許多富有建設性的意見與建議,并在書稿校對等過程中做了大量工作。為此,我們深表謝意。
另外,本書的出版不僅得到南京信息工程大學教務處教材基金的大力支持,而且得到清華大學出版社的支持與幫助,在此一并表示感謝!
對于本書的編寫,我們深感責任重大。盡管希望盡己所能,但因水平所限,書中難免有不足之處,懇請廣大同行和讀者批評指正。
編者
2021年8月
李含光,一直從事計算機軟件開發(fā)和計算機程序設計的教學工作,主持和參與了多項省部級科研項目,承擔了多項企業(yè)計算機應用項目的開發(fā)工作,南信大ACM隊教練,本科畢業(yè)于四川大學,東南大學獲得碩士學位,出版了4部本科教材。主持了多項程序設計課程的教學改革項目,一直在南京信息工程大學承擔計算機程序設計類課程的教學工作,是程序設計基礎和C語言程序設計課程的教學負責人。
第1章概述
1.1C語言的發(fā)展歷史
1.1.1C語言的發(fā)展
1.1.2C語言的主要標準
1.2C語言程序的結構
1.3C語言程序的特點
1.4C語言程序的開發(fā)方法
1.4.1程序
1.4.2程序設計和程序設計語言
1.4.3程序開發(fā)方法
1.5Visual Studio 2019環(huán)境下C語言程序上機調試
1.5.1編寫源程序
1.5.2源程序文件編譯和運行
1.6DevC 環(huán)境下C語言程序上機調試
1.6.1DevC 編輯C語言源程序
1.6.2編譯和運行C程序
1.7CodeBlocks環(huán)境下C語言程序上機調試
1.7.1CodeBlocks編輯C語言源程序
1.7.2C程序的編譯和運行
本章小結
習題1
第2章數據類型、運算符和表達式
2.1問題引導
2.2常量與變量
2.2.1標識符命名
2.2.2常量
2.2.3變量
2.3整型數據
2.3.1整型常量
2.3.2整型變量
2.4浮點型數據
2.4.1浮點常量
2.4.2浮點變量
目錄
C語言程序設計教程(第3版)
2.5字符型數據
2.5.1字符常量
2.5.2字符串常量
2.5.3轉義字符
2.5.4字符變量
2.6運算符和表達式
2.6.1算術運算符
2.6.2自增和自減運算符
2.6.3關系運算符和邏輯運算符
2.6.4位操作符
2.6.5條件運算符
2.6.6逗號操作符
2.6.7賦值運算符
2.6.8復合賦值運算符
2.6.9運算符優(yōu)先級的小結
2.7表達式求值
2.7.1算術表達式
2.7.2賦值表達式
2.7.3關系表達式和邏輯表達式
本章小結
習題2
第3章算法和控制語句
3.1問題引導
3.1.1算法的概念
3.1.2算法的表示
3.1.3基本算法舉例
3.1.4三種基本結構
3.2C語言的標準輸入和輸出
3.2.1格式化輸入輸出
3.2.2其他輸入輸出
3.2.3C語言語句
3.2.4順序結構程序設計
3.3條件語句
3.3.1if語句
3.3.2if…else語句
3.3.3if…else if 語句
3.3.4條件語句的嵌套
3.3.5條件語句的應用
3.4多分支語句
3.4.1switch多分支語句
3.4.2多分支語句的嵌套
3.4.3多分支語句應用
3.5循環(huán)語句
3.5.1while 循環(huán)語句
3.5.2do…while 循環(huán)語句
3.5.3for循環(huán)語句
3.5.4循環(huán)語句的嵌套
3.6轉移語句
3.6.1goto 語句
3.6.2continue和break語句
3.7綜合應用
本章小結
習題3
第4章函數
4.1問題導引
4.2函數分類
4.3函數的聲明和定義
4.3.1函數的類型說明
4.3.2函數的聲明
4.3.3函數的定義
4.4函數的參數和返回值
4.4.1函數的形式參數和實際參數
4.4.2函數的返回值
4.5函數的調用
4.5.1函數調用的一般形式
4.5.2函數調用方式
4.5.3函數的嵌套調用
4.5.4函數的遞歸調用
4.6局部變量和全局變量
4.6.1局部變量
4.6.2全局變量
4.7變量的存儲類型
4.7.1動態(tài)存儲與靜態(tài)存儲
4.7.2auto變量
4.7.3static變量
4.7.4register變量
4.7.5用extern聲明外部變量
4.8內部函數和外部函數
4.8.1內部函數
4.8.2外部函數
4.9綜合應用
本章小結
習題4
第5章數組
5.1問題引導
5.2一維數組
5.2.1一維數組的定義
5.2.2一維數組元素的引用
5.2.3一維數組的初始化
5.2.4利用一維數組解決問題
5.2.5一維數組作為函數參數
5.2.6一維數組應用
5.3二維數組
5.3.1二維數組的聲明
5.3.2二維數組的初始化
5.3.3二維數組應用
5.4字符數組
5.4.1字符數組的定義
5.4.2字符數組元素的引用
5.4.3字符數組的初始化
5.4.4字符串的表示
5.4.5字符數組的輸入與輸出
5.4.6常用的字符串處理函數
5.4.7字符數組應用
5.5多維數組
5.5.1多維數組的定義
5.5.2多維數組的初始化
5.6變長數組
5.6.1不指定維長的數組初始化
5.6.2可變長數組及定義
5.7數組應用舉例
本章小結
習題5
第6章指針
6.1指針與指針變量
6.2指針變量的定義與引用
6.2.1指針變量的定義
6.2.2指針變量的引用
6.3指針運算符與指針表達式
6.3.1與指針運算相關的運算符與表達式
6.3.2指針變量作函數的參數
6.3.3返回指針的函數
6.4指針與數組
6.4.1指針與一維數組
6.4.2指針與二維數組
6.4.3數組指針作函數參數
6.4.4指針與字符串
6.5指針數組
6.6指針的地址分配
6.7指向指針的指針變量
6.8指向函數的指針變量
6.9main()函數的參數
6.10指針的應用
本章小結
習題6
第7章預處理命令
7.1概述
7.2宏定義
7.2.1無參宏定義
7.2.2帶參宏定義
7.3include命令
7.4條件編譯
本章小結
習題7
第8章結構體與共用體
8.1問題引導
8.2結構體的聲明和結構體變量定義
8.2.1結構體的聲明
8.2.2結構體變量的聲明
8.2.3結構體成員的引用
8.2.4結構體變量的賦值
8.3結構體數組和結構體指針
8.3.1結構體數組的定義和數組元素的引用
8.3.2結構體數組元素的賦值及引用
8.3.3指向結構體變量的指針
8.3.4結構體數組和結構體指針的應用
8.4結構體與函數
8.4.1結構體變量作為函數參數
8.4.2結構體數組和指向結構體的指針變量作為函數參數
8.4.3函數的返回值是結構體類型
8.5鏈表及其應用
8.5.1鏈表結點的定義
8.5.2鏈表的建立
8.5.3鏈表的插入
8.5.4鏈表的刪除
8.6共用體
8.6.1共用體的定義
8.6.2共用體變量的引用
8.6.3共用體的應用
8.7枚舉類型
8.7.1枚舉類型的定義和枚舉變量的說明
8.7.2枚舉類型變量的賦值和使用
8.8類型定義符typedef
8.9位段
8.9.1位域的定義和位域變量的說明
8.9.2位域的使用
8.10結構體的綜合應用
本章小結
習題8
第9章文件系統(tǒng)
9.1文件和流的概念
9.1.1文件的定義
9.1.2流的定義
9.1.3文件的分類
9.2文件的使用
9.2.1文件的打開與關閉
9.2.2文件的讀寫操作
9.2.3文件指針的定位
9.2.4出錯的檢測
9.3文件系統(tǒng)應用舉例
本章小結
習題9
附錄A實驗項目
附錄B常用字符與ASCII碼對應表
附錄C運算符優(yōu)先級和結合性
附錄DC語言關鍵字
附錄EC語言常用函數表
參考文獻