本書在教學(xué)內(nèi)容的編排上,采用項(xiàng)目驅(qū)動(dòng)知識的方式,即根據(jù)每一章項(xiàng)目案例的需求,合理地安排每一個(gè)知識主題的切入點(diǎn),從而將C語言中枯燥難懂的語法知識分解到全書各章中,并力求通過程序?qū)嵗龤w納出來。
本書在講解程序?qū)嵗龝r(shí),采用逐步構(gòu)造法寫出程序,即通過編程思路、算法設(shè)計(jì)、程序原型等環(huán)節(jié)一步一步地構(gòu)造出完整的程序,從而加深讀者對編程方法的理解和掌握。
在本書的各主要章節(jié)中,分別提供了若干個(gè)項(xiàng)目式案例,供讀者學(xué)習(xí)參考之用。仔細(xì)研究這些案例,將有助于提高讀者的程序設(shè)計(jì)能力。
本書內(nèi)容依據(jù)當(dāng)前*版的C語言參考手冊編寫,兼顧C(jī)89與C99標(biāo)準(zhǔn)。內(nèi)容包括引論、基本數(shù)據(jù)與運(yùn)算、順序結(jié)構(gòu)程序設(shè)計(jì)、選擇結(jié)構(gòu)程序設(shè)計(jì)、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)、數(shù)組、指針、字符與字符串處理、函數(shù)、函數(shù)的進(jìn)一步討論、編譯預(yù)處理命令、結(jié)構(gòu)體與共用體、位運(yùn)算、文件等。
本書依據(jù)Visual C 2010 Express和DEV C 5.11集成開發(fā)環(huán)境進(jìn)行講述,符合當(dāng)前軟件的發(fā)展趨勢,便于讀者上機(jī)調(diào)試程序。
本書教學(xué)內(nèi)容的編排順暢合理,編程方法的講解新穎獨(dú)特,特別適合于初學(xué)者自學(xué)。本書可作為高等院校各專業(yè)學(xué)生學(xué)習(xí)C語言程序設(shè)計(jì)的教材和參考書。
本教材采用項(xiàng)目案例的形式講授C語言程序設(shè)計(jì)的基本概念和方法,每章采用一到兩個(gè)解決現(xiàn)實(shí)問題的項(xiàng)目案例貫穿始終,通過項(xiàng)目案例將本章基本的概念與編程方法展示并融合起來。使學(xué)生在一步一步不斷完善實(shí)現(xiàn)項(xiàng)目的過程中,獲得綜合分析解決現(xiàn)實(shí)問題的能力,而不是只學(xué)會(huì)一些支離破碎、互不聯(lián)系的孤立知識。
前言
C語言是目前世界上使用最廣的高級程序設(shè)計(jì)語言,被廣泛地應(yīng)用于系統(tǒng)程序設(shè)計(jì)、數(shù)值計(jì)算、自動(dòng)控制等諸多領(lǐng)域。
C語言的產(chǎn)生頗為有趣,C語言實(shí)際上是UNIX操作系統(tǒng)的一個(gè)副產(chǎn)品。1972年,美國貝爾實(shí)驗(yàn)室的Dennis
Ritchie為了開發(fā)UNIX操作系統(tǒng),專門設(shè)計(jì)了一種新的語言C語言。由于C語言具有強(qiáng)大的功能和很高的運(yùn)行效率,兼具高級語言的直觀性與低級語言的硬件訪問能力,因而很快從貝爾實(shí)驗(yàn)室進(jìn)入了廣大程序員的編程世界。
由于Dennis Ritchie設(shè)計(jì)C語言的初衷是用于開發(fā)UNIX操作系統(tǒng),因此C語言稱得上是一門專業(yè)語言。這使得C語言在具有強(qiáng)大的功能和較高的運(yùn)行效率的同時(shí),也在一定程度上存在語法晦澀難懂、不便于初學(xué)者掌握的不足之處。
因此,C語言似乎不太適合作為程序設(shè)計(jì)初學(xué)者的入門語言。不過在現(xiàn)代人效率觀念的驅(qū)使下,仍有許多學(xué)校將C語言選作初學(xué)者的入門語言。
其實(shí),這樣選擇也未嘗不可。只不過在教學(xué)中應(yīng)當(dāng)思考如何采取有效的應(yīng)對策略,使初學(xué)者避開那些晦澀難懂的語法,從C語言最基本、最實(shí)用的編程方法入手,力爭使學(xué)習(xí)者盡快地學(xué)會(huì)程序設(shè)計(jì)的基本方法,進(jìn)而達(dá)到應(yīng)用編程解決實(shí)際問題的境界。
從學(xué)習(xí)者的角度來說,要注意抓住C語言學(xué)習(xí)的要害所在編程方法,而不要沉溺于C語言的語法細(xì)節(jié)之中。因?yàn)閷W(xué)習(xí)C語言的目的是為了編寫程序解決實(shí)際問題,而過于細(xì)致地研究C語言的語法對于提高編程能力并沒有太大的幫助。
針對上述問題,本書作者在教學(xué)內(nèi)容的編排上,采用了項(xiàng)目驅(qū)動(dòng)知識的方式,即根據(jù)各章項(xiàng)目案例的需求,合理地安排每一個(gè)知識主題的切入點(diǎn),從而將C語言中枯燥難懂的語法知識分解到全書各章中,并力求通過程序?qū)嵗龤w納出來。
本書在講解程序?qū)嵗龝r(shí),采用逐步構(gòu)造法寫出程序,即通過編程思路、算法設(shè)計(jì)、程序原型等環(huán)節(jié)一步一步地構(gòu)造出完整的程序,從而加深讀者對編程方法的理解和掌握。
學(xué)習(xí)知識的最終目的是運(yùn)用知識解決現(xiàn)實(shí)中的問題,而面向項(xiàng)目的教學(xué)就是一種緊密結(jié)合現(xiàn)實(shí)問題的、能夠有效地提高學(xué)習(xí)者綜合分析問題和解決問題能力的教學(xué)模式。在本書的各主要章節(jié)中,分別提供了若干個(gè)項(xiàng)目式案例,供讀者學(xué)習(xí)參考之用。仔細(xì)研究這些案例,將有助于提高讀者的程序設(shè)計(jì)能力。
本書第1章、第2章由李業(yè)剛編寫,第3章、第11章由李增祥編寫,
第13章、第14章由淄博技師學(xué)院史國興編寫,
其余各章由巨同升編寫。全書由巨同升統(tǒng)籌并定稿。
在本書的編寫過程中,作者得到了山東理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院廣大同仁的大力支持與幫助,在此表示感謝。
由于作者水平所限,書中難免存在不足之處,敬請廣大專家和讀者批評指正。
編者2018年1月于山東理工大學(xué)
目錄
第1章引論
1.1程序與程序設(shè)計(jì)語言
1.2C語言的發(fā)展及特點(diǎn)
1.2.1C語言的發(fā)展
1.2.2C語言的標(biāo)準(zhǔn)化
1.2.3C語言的特點(diǎn)
1.3C語言程序的構(gòu)成
1.4C語言程序的運(yùn)行
1.4.1Dev C
1.4.2Visual C
2010
1.4.3程序的調(diào)試
第2章基本的數(shù)據(jù)與運(yùn)算
2.1常量、變量與標(biāo)識符
2.1.1關(guān)鍵字與標(biāo)識符
2.1.2變量
2.1.3常量
2.2整型、實(shí)型與字符型數(shù)據(jù)
2.2.1整型數(shù)據(jù)
2.2.2實(shí)型數(shù)據(jù)
2.2.3字符型數(shù)據(jù)
2.2.4sizeof運(yùn)算符
2.3算術(shù)運(yùn)算符和算術(shù)表達(dá)式
2.3.1基本算術(shù)運(yùn)算符
2.3.2算術(shù)表達(dá)式
2.3.3運(yùn)算符的優(yōu)先級
2.3.4運(yùn)算符的結(jié)合性
第3章順序結(jié)構(gòu)程序設(shè)計(jì)
3.1C語言的語句類型
3.2變量的賦值和初始化
3.2.1賦值表達(dá)式
3.2.2變量的初始化
3.3數(shù)據(jù)的格式輸入與格式輸出
3.3.1格式輸出函數(shù)(printf函數(shù))
3.3.2格式輸入函數(shù)(scanf函數(shù))
3.4拓展: 賦值運(yùn)算中的類型轉(zhuǎn)換
3.4.1實(shí)型數(shù)據(jù)賦給整型(或字符型)變量
3.4.2整型(或字符型)數(shù)據(jù)賦給實(shí)型變量
3.4.3整型數(shù)據(jù)賦給類型不同的等長整型變量
3.5項(xiàng)目式案例
第4章選擇結(jié)構(gòu)程序設(shè)計(jì)
4.1關(guān)系表達(dá)式與邏輯表達(dá)式
4.1.1關(guān)系運(yùn)算符
4.1.2關(guān)系表達(dá)式
4.1.3邏輯運(yùn)算符
4.1.4邏輯表達(dá)式
4.2算法與流程圖
4.2.1簡單算法舉例
4.2.2算法的表示
4.3if語句
4.3.1if語句的兩種基本形式
4.3.2if語句的嵌套
4.3.3嵌套if結(jié)構(gòu)與平行if結(jié)構(gòu)的區(qū)別
4.4混合運(yùn)算與強(qiáng)制類型轉(zhuǎn)換
4.4.1混合運(yùn)算
4.4.2強(qiáng)制類型轉(zhuǎn)換
4.5switch語句
4.6拓展: 邏輯運(yùn)算量、條件表達(dá)式與goto語句
4.6.1邏輯運(yùn)算量的擴(kuò)展
4.6.2條件表達(dá)式
4.6.3語句標(biāo)號與goto語句
4.7項(xiàng)目式案例
第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
5.1while循環(huán)
5.1.1while語句
5.1.2while循環(huán)程序舉例
5.2自增自減運(yùn)算符與復(fù)合賦值運(yùn)算符
5.2.1自增自減運(yùn)算符
5.2.2復(fù)合賦值運(yùn)算符
5.3for循環(huán)
5.3.1for語句
5.3.2for循環(huán)程序舉例
5.4dowhile循環(huán)
5.4.1dowhile語句
5.4.2dowhile循環(huán)程序舉例
5.5循環(huán)的嵌套
5.6循環(huán)輔助語句和while(1)循環(huán)
5.6.1break語句
5.6.2continue語句
5.6.3while(1)形式的循環(huán)
5.7拓展: 逗號表達(dá)式與for語句變式
5.7.1逗號運(yùn)算符與逗號表達(dá)式
5.7.2for語句變式
5.8項(xiàng)目式案例
第6章數(shù)組
6.1一維數(shù)組
6.1.1一維數(shù)組的定義
6.1.2一維數(shù)組的使用
6.1.3一維數(shù)組的初始化
6.1.4一維數(shù)組應(yīng)用舉例
6.2二維數(shù)組
6.2.1二維數(shù)組的定義
6.2.2二維數(shù)組的初始化
6.2.3二維數(shù)組的引用
6.2.4二維數(shù)組應(yīng)用舉例
6.3項(xiàng)目式案例
第7章指針
7.1變量的指針
7.1.1指針的概念
7.1.2指針變量
7.1.3指針變量的定義
7.2變量的間接引用
7.2.1取地址運(yùn)算符&
7.2.2間接引用運(yùn)算符*
7.2.3指針變量的初始化
7.2.4幾點(diǎn)說明
7.3指針與一維數(shù)組
7.3.1指向一維數(shù)組元素的指針
7.3.2通過指針引用一維數(shù)組元素
7.4拓展: 指針與二維數(shù)組
7.4.1指向二維數(shù)組元素和行的指針
7.4.2行指針變量
7.5拓展: 指針數(shù)組與二重指針
7.5.1指針數(shù)組
7.5.2二重指針
第8章字符與字符串處理
8.1字符型數(shù)據(jù)的使用
8.1.1字符型數(shù)據(jù)的輸入與輸出
8.1.2字符型數(shù)據(jù)與整型數(shù)據(jù)的混合運(yùn)算
8.1.3字符處理函數(shù)
8.2字符串的存儲(chǔ)與引用
8.2.1字符串在內(nèi)存中的存儲(chǔ)形式
8.2.2用字符數(shù)組存儲(chǔ)和引用字符串
8.2.3用字符指針變量引用字符串
8.3字符串的輸入和輸出
8.3.1用printf函數(shù)輸出字符串
8.3.2用puts函數(shù)輸出字符串
8.3.3用scanf函數(shù)輸入字符串
8.3.4用gets函數(shù)輸入字符串
8.4字符串處理函數(shù)
8.4.1字符串長度函數(shù)strlen
8.4.2字符串復(fù)制函數(shù)strcpy
8.4.3字符串連接函數(shù)strcat
8.4.4字符串比較函數(shù)strcmp
8.4.5字符查找函數(shù)strchr
8.4.6字符串查找函數(shù)strstr
8.4.7字符串大寫轉(zhuǎn)小寫函數(shù)strlwr
8.4.8字符串小寫轉(zhuǎn)大寫函數(shù)strupr
8.5字符串處理應(yīng)用舉例
8.6項(xiàng)目式案例
第9章函數(shù)
9.1庫函數(shù)
9.2用戶函數(shù)的定義與調(diào)用
9.2.1無參函數(shù)的定義
9.2.2無參函數(shù)的調(diào)用
9.2.3有參函數(shù)的定義和調(diào)用
9.3函數(shù)的參數(shù)和返回值
9.3.1函數(shù)的參數(shù)
9.3.2函數(shù)的返回值
9.4函數(shù)的調(diào)用方式與函數(shù)原型
9.4.1函數(shù)的調(diào)用方式
9.4.2函數(shù)原型的聲明
9.5變量的作用域和生存期
9.5.1變量的作用域
9.5.2變量的生存期
9.6拓展: 多文件程序
9.6.1多文件程序的運(yùn)行
9.6.2函數(shù)的存儲(chǔ)類別
9.6.3全局變量的存儲(chǔ)類別
9.7項(xiàng)目式案例
第10章函數(shù)的進(jìn)一步討論
10.1指針作函數(shù)參數(shù)
10.2數(shù)組名作函數(shù)參數(shù)
10.2.1一維數(shù)組名作函數(shù)參數(shù)
10.2.2拓展: 二維數(shù)組名作函數(shù)參數(shù)
10.3指針型函數(shù)和指向函數(shù)的指針
10.3.1指針型函數(shù)
10.3.2指向函數(shù)的指針
10.4函數(shù)的遞歸調(diào)用
10.5項(xiàng)目式案例
第11章編譯預(yù)處理命令
11.1宏定義命令
11.1.1不帶參數(shù)的宏定義
11.1.2帶參數(shù)的宏定義
11.2文件包含命令
11.3拓展: 條件編譯
第12章結(jié)構(gòu)體與共用體
12.1結(jié)構(gòu)體類型與結(jié)構(gòu)體變量
12.1.1結(jié)構(gòu)體變量的定義
12.1.2結(jié)構(gòu)體類型標(biāo)識符的定義
12.2結(jié)構(gòu)體變量的引用和初始化
12.2.1結(jié)構(gòu)體變量的初始化
12.2.2結(jié)構(gòu)體變量的引用
12.3結(jié)構(gòu)體數(shù)組
12.3.1結(jié)構(gòu)體數(shù)組的定義
12.3.2結(jié)構(gòu)體數(shù)組的初始化
12.4結(jié)構(gòu)體指針
12.4.1指向結(jié)構(gòu)體變量的指針
12.4.2指向結(jié)構(gòu)體數(shù)組元素的指針
12.5結(jié)構(gòu)體變量的跨函數(shù)引用
12.5.1結(jié)構(gòu)體變量作函數(shù)參數(shù)
12.5.2結(jié)構(gòu)體指針作函數(shù)參數(shù)
12.6共用體
12.6.1共用體變量的定義
12.6.2共用體類型標(biāo)識符的定義
12.6.3共用體變量的初始化
12.6.4共用體變量的引用
12.7枚舉類型
12.7.1枚舉類型標(biāo)識符的定義
12.7.2枚舉類型變量的定義與使用
12.8用typedef定義類型別名
12.9內(nèi)存的動(dòng)態(tài)分配
12.10拓展: 鏈表
12.10.1鏈表的概念
12.10.2鏈表的創(chuàng)建與遍歷
12.10.3鏈表的插入與刪除
第13章位運(yùn)算
13.1位運(yùn)算符
13.1.1按位取反運(yùn)算符~
13.1.2按位與運(yùn)算符&
13.1.3按位或運(yùn)算符|
13.1.4按位異或運(yùn)算符
13.1.5按位左移運(yùn)算符<<
13.1.6按位右移運(yùn)算符>>
13.2項(xiàng)目式案例
第14章文件
14.1文件概述
14.1.1文本文件和二進(jìn)制文件
14.1.2FILE類型
14.2文件的打開與關(guān)閉
14.2.1文件打開函數(shù)fopen
14.2.2文件關(guān)閉函數(shù)fclose
14.3文件的讀寫
14.3.1fscanf函數(shù)和fprintf函數(shù)
14.3.2fgetc函數(shù)和fputc函數(shù)
14.3.3fgets函數(shù)和fputs函數(shù)
14.3.4fread函數(shù)和fwtrite函數(shù)
14.4拓展: 文件的讀寫定位與隨機(jī)讀寫
14.4.1rewind函數(shù)
14.4.2fseek函數(shù)
14.4.3ftell函數(shù)
14.4.4文件的隨機(jī)讀寫
14.5項(xiàng)目式案例
附錄A ASCII碼字符表
附錄BC語言的關(guān)鍵字
附錄C運(yùn)算符的優(yōu)先級和結(jié)合性
附錄D常用的C語言庫函數(shù)
參考文獻(xiàn)