本書共9章,內(nèi)容依次包括:C語言程序基本結(jié)構(gòu),函數(shù),指針和數(shù)組,順序表,結(jié)構(gòu),字符串,文件,鏈表,二維數(shù)組和指針。本書可以作為普通高校計算機、信息技術(shù)相關(guān)專業(yè)和理工科“C語言程序設(shè)計”課程的教材,也可以作為從事計算機工程與應(yīng)用的科技工作者的參考書,還可以作為計算機程序設(shè)計愛好者的教材。
在提倡全民編程的時代,作為教師,經(jīng)常被問及三個問題:一是學(xué)習(xí)編程必須學(xué)習(xí)哪些內(nèi)容;二是學(xué)習(xí)編程有什么更有效的方法;三是學(xué)習(xí)編程有什么更深刻的意義。
1
什么是程序?專業(yè)上有一個關(guān)于程序本質(zhì)的經(jīng)典概括:算法+數(shù)據(jù)結(jié)構(gòu)=程序。算法是問題求解的有限步驟,數(shù)據(jù)結(jié)構(gòu)是算法實現(xiàn)的工具,因此學(xué)習(xí)編程必須學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu):工欲善其事,必先利其器。
編程需要編程語言,C++語言不僅是應(yīng)用廣泛的系統(tǒng)編程語言,而且包含著常用數(shù)據(jù)結(jié)構(gòu)的標準化即標準模板庫,現(xiàn)在的很多編程語言,例如Java和Python,都是在這個基礎(chǔ)上開發(fā)出來的。因此,學(xué)習(xí)編程必須學(xué)習(xí)C++語言。
C++語言是在C語言的基礎(chǔ)上直接發(fā)展而來的。用李未院士的“三個語言環(huán)境”理論來講,C++是對象語言,C是解釋C++的元語言,C對C++的解釋性關(guān)系是模型語言,數(shù)據(jù)結(jié)構(gòu)是這種解釋性關(guān)系的一種理想模本,三者密不可分。因此,學(xué)習(xí)編程必須學(xué)習(xí)C語言。
如上所述,學(xué)習(xí)編程,必須把C、C++和數(shù)據(jù)結(jié)構(gòu)作為一個有機的整體來學(xué)習(xí)。于是,第二個問題可以落實為:學(xué)習(xí)C、C++和數(shù)據(jù)結(jié)構(gòu)有什么更有效的方法?
2
練習(xí)書法先要臨摹字帖,學(xué)習(xí)寫作先要閱讀經(jīng)典。C++創(chuàng)始人本賈尼說,學(xué)習(xí)編程.如同學(xué)習(xí)寫作,先要模仿經(jīng)典程序。
什么是經(jīng)典程序?對C、C++和數(shù)據(jù)結(jié)構(gòu)這個整體來說,C++標準模板庫就是經(jīng)典程序,因為它是常用數(shù)據(jù)結(jié)構(gòu)的標準化。
但是在很多人看來,C++標準模板庫高不可攀。于是,本書把第二個問題又進一步落實到如何搭建階梯,使每一個學(xué)習(xí)編程的人都可以輕松地拾級而上,模仿標準模板庫的常用代碼。這個階梯是一個程序序列,它從一個簡單程序開始,每一個程序都是在前一個程序的基礎(chǔ)上稍加改進而成。它將學(xué)習(xí)模式從傳統(tǒng)的概念引領(lǐng)改為程序引領(lǐng),概念不再是機械的灌輸而是實踐的概括。
這個程序序列在C語言部分是如何搭建的呢?這要從類型講起。C語言和C++語言一樣,都是基于類型的編程語言。類型有兩類,一類是簡單類型,另一類是復(fù)合類型。簡單類型是獨立的類型,主要有整型、實型和字符型。這些類型的差別主要是輸入、輸出格式符的差別,這種差別使得對一種類型的學(xué)習(xí),很容易轉(zhuǎn)換到對另一種類型的學(xué)習(xí)。因此,本書以整型為主,從一個整數(shù)的按位逆置輸出程序開始,通過功能的不斷擴展,形成一種程序序列,貫穿第1章C語言程序基本結(jié)構(gòu)和第2章函數(shù)。
王立柱,天津師范大學(xué)教授,湖北工業(yè)大學(xué)特聘教授,教育部一微軟精品課主持人,主編多本國家級規(guī)劃教材。先后獲得天津市教學(xué)成果二等獎,湖北省教學(xué)成果一等獎。
第1章 C語言程序基本結(jié)構(gòu)
1.1 第一個C語言程序
1.1.1 編程基本過程
1.1.2 集成開發(fā)環(huán)境
1.1.3 字面常量、左值和右值
1.1.4 表達式
1.1.5 對象的地址
1.2 循環(huán)結(jié)構(gòu)
1.2.1 while語句
1.2.2 for語句
1.3 標準輸入函數(shù)
1.4 分而治之
1.5 選擇結(jié)構(gòu)(if-else語句)
1.6 關(guān)系運算和邏輯運算
1.7 條件表達式和復(fù)合賦值表達式
1.8 輸入驗證
1.8.1 break和continue語句
1.8.2 前哨(sentinels)
練習(xí)
第2章 函數(shù)
2.1 函數(shù)的定義和調(diào)用
2.2 函數(shù)聲明
2.3 自設(shè)頭文件
2.4 應(yīng)用函數(shù)設(shè)計舉例
2.4.1 階乘
2.4.2 質(zhì)數(shù)
2.4.3 最大公約數(shù)
2.4.4 斐波那契數(shù)列
2.4.5 耵的近似值
2.5 函數(shù)與對象的存儲類別
2.5.1 局部變量
2.5.2 靜態(tài)局部變量
2.5.3 外部變量
2.5.4 寄存器變量
練習(xí)
第3章 指針和數(shù)組
3.1 揩針和地址傳遞
3.1.1 地址和指針
3.1.2 兩種參數(shù)傳遞
3.1.3 對象值交換
3.2 數(shù)組和線性表
3.3 指針和數(shù)組
3.3.1 指針和數(shù)組的統(tǒng)
3.3.2 數(shù)組求和
3.3.3 數(shù)組逆置
3.4 const限定符
3.5 數(shù)組應(yīng)用
3.5.1 最大元素
3.5.2 選擇排序
3.5.3 順序搜索和二分搜索
3.5.4 平均值
3.6 類型轉(zhuǎn)換
3.7 動態(tài)空間
3.7.1 動態(tài)數(shù)組
3.7.2 動態(tài)分配函數(shù)與對象
3.7.3 最近平均值
3.8 指針與索引
3.9 函數(shù)指針
練習(xí)
第4章 順序表
4.1 數(shù)組求和分析
4.2 動態(tài)數(shù)組應(yīng)用
4.3 結(jié)構(gòu)初步
4.4 typedef名字
4.5 準構(gòu)造和準析構(gòu)
4.6 尾插
4.7 讀取
4.8 求和
4.9 刪除
4.10 基本函數(shù)補充
4.11 參數(shù)合法性檢驗
4.12 順序表頭文件
4.13 順序表的意義
練習(xí)
第5章 結(jié)構(gòu)、聯(lián)合、枚舉
5.1 結(jié)構(gòu)
5.1.1 結(jié)構(gòu)與對象
5.1.2 結(jié)構(gòu)Date
5.1.3 結(jié)構(gòu)與數(shù)組
5.2 聯(lián)合
5.3 枚舉常量和switch-case語句
練習(xí)
第6章 字符串
6.1 字符型
6.2 字符串特點
6.3 字符串基本操作
6.3.1 字符串輸入輸出
6.3.2 字符串求長
6.3.3 字符串復(fù)制
6.3.4 字符串連接
6.3.5 字符串大小寫
6.3.6 字符串比較
6.3.7 字符查找
6.3.8 字符串匹配
6.4 設(shè)計字符串基本操作
6.4.1 設(shè)計字符串輸入和輸出函數(shù)
6.4.2 設(shè)計字符串求長函數(shù)
6.4.3 設(shè)計字符串復(fù)制函數(shù)
6.4.4 設(shè)計字符串連接函數(shù)
6.4.5 設(shè)計字符串大小寫函數(shù)
6.4.6 設(shè)計字符串比較函數(shù)
6.4.7 設(shè)計字符查找函數(shù)
6.5 函數(shù)返回指針
練習(xí)
第7章 文件
7.1 文件指針
7.2 文件打開與關(guān)閉
7.3 文件的讀寫
7.3.1 字符的讀寫
7.3.2 字符串的讀寫
7.3.3 格式讀寫
7.3.4 無格式讀寫
練習(xí)
第8章 鏈表
8.1 鏈表設(shè)計
8.1.1 鏈表結(jié)點
8.1.2 鏈表
8.1.3 鏈表插入
8.1.4 鏈袁刪除
8.1.5 鏈表逆置
8.2 鏈表聲明與實現(xiàn)
8.3 Josephus問題
練習(xí)
第9章 二維數(shù)組和指針
9.1 二維數(shù)組
9.1.1 二維數(shù)組定義
9.1.2 二維數(shù)組初始化
9.1.3 二維數(shù)組和指針
9.2 二維數(shù)組和一維數(shù)組
9.2.1 二維數(shù)組作為一維數(shù)組
9.2.2 馬鞍點
9.2.3 -維數(shù)組作為二維數(shù)組
9.3 指針數(shù)組和二級指針
9.4 二級指針和二維數(shù)組
練習(xí)
附錄A 命名規(guī)則
附錄B 基本類型
附錄C 編譯預(yù)處理
參考文獻