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