《從問題到程序:程序設(shè)計與C語言引論》以c作為工具語言,討論了基本程序設(shè)計的各方面內(nèi)容,詳細(xì)解釋了與c語言和程序設(shè)計有關(guān)的問題。在新版中,特別加強了針對近年日益受到業(yè)界和學(xué)術(shù)界廣泛重視的問題的討論,并通過詳細(xì)地分析和討論大量符合c99標(biāo)準(zhǔn)的實例,給出了分析和分解問題、找出解決問題的主要步驟、確定函數(shù)抽象、找出循環(huán)、選擇語言結(jié)構(gòu)直至最后做出所需程序的完整過程。
《從問題到程序:程序設(shè)計與C語言引論》適合作為高等院校計算機及相關(guān)專業(yè)第一門程序設(shè)計課程的教材,也可供其他學(xué)習(xí)c程序設(shè)計的讀者自學(xué)使用。
前言
本書中的編程實例和模式
第1章 程序設(shè)計和c語言
1.1 程序和程序語言
1.2 c語言簡介
1.3 一個簡單的c程序
1.4 程序開發(fā)過程
1.5 問題與程序設(shè)計
本章討論的重要概念
練習(xí)
第2章 數(shù)據(jù)與簡單計算程序
2.1 基本字符、標(biāo)識符和關(guān)鍵字
2.2 數(shù)據(jù)、類型和簡單程序
2.2.1 幾個常用類型
2.2.2 函數(shù)printf和簡單 文本輸出程序
2.3 運算符、表達(dá)式和計算
2.3.1 算術(shù)運算符和算術(shù)表達(dá)式
2.3.2 表達(dá)式的求值
2.3.3 計算和類型
2.4 數(shù)學(xué)函數(shù)和簡單計算程序
2.4.1 函數(shù)、函數(shù)調(diào)用
2.4.2 數(shù)學(xué)函數(shù)及其使用
2.4.3 函數(shù)調(diào)用中的類型轉(zhuǎn)換
語言細(xì)節(jié)和問題
c語言的字符集
基本數(shù)據(jù)類型的一些問題
數(shù)據(jù)形式的轉(zhuǎn)換和輸出
運算對象的求值順序
幾個常用程序模式
本章討論的重要概念
練習(xí)
第3章 變量、函數(shù)和流程控制
3.1 復(fù)合結(jié)構(gòu)和順序程序
3.2 變量的概念和使用
3.2.1 變量的定義
3.2.2 變量的使用
3.2.3 注釋和簡單順序程序
3.3 定義函數(shù)(初步)
3.3.1 函數(shù)定義
3.3.2 函數(shù)與程序
3.3.3 函數(shù)與類型
3.3.4 自定義輸出函數(shù)
3.4 關(guān)系表達(dá)式、條件表達(dá)式、邏輯表達(dá)式
3.4.1 關(guān)系表達(dá)式和條件表達(dá)式
3.4.2 邏輯表達(dá)式
3.5 語句與控制結(jié)構(gòu)
3.5.1 條件語句:if語句
3.5.2 循環(huán)語句:while語句
3.5.3 循環(huán)語句:for語句
3.6 若干c語言結(jié)構(gòu)
3.6.1 增量和減量運算符(++、--)
3.6.2 逗號運算符
3.6.3 實現(xiàn)二元運算符操作的賦值運算符
3.6.4 空語句
3.6.5 定義枚舉常量
3.7 輸入和輸出
3.7.1 格式輸入函數(shù)scanf
3.7.2 字符輸入和輸出函?
語言細(xì)節(jié)和問題
變量的意義和實現(xiàn)
賦值操作的一些問題
條件表達(dá)式和條件語句
表達(dá)式和求值
輸入和緩沖
幾個常用程序模式
本章討論的重要概念
練習(xí)
第4章 基本編程技術(shù)
4.1 循環(huán)程序設(shè)計
4.1.1 基本循環(huán)方式
4.1.2 求一系列完全平方數(shù)
4.1.3 判斷素數(shù)(謂詞函數(shù))
4.1.4 艱難旅程(浮點誤差)
4.1.5 求立方根(迭代和逼近)
4.1.6 求sin函數(shù)值(通項計算)
4.1.7 從循環(huán)中退出
4.2 輸入循環(huán)
4.2.1 輸入循環(huán)的基本技術(shù)
4.2.2 字符輸入
4.2.3 檢查輸入
4.2.4 一個簡單計算器
4.3 循環(huán)與遞歸
4.3.1 階乘和乘冪(循環(huán),遞歸)
4.3.2 fibonacci序列(計算與時間)
4.3.3 為計算過程計時
4.3.4 fibonacci序列的迭代計算(程序正確性與循環(huán)不變式)
4.3.5 最大公約數(shù)
4.3.6 河內(nèi)塔(梵塔)問題
4.4 程序調(diào)試和排錯
4.4.1 測試
4.4.2 白箱測試
4.4.3 黑箱測試
4.4.4 排除程序里的錯誤
語言細(xì)節(jié)和問題
程序的逐步求精和控制結(jié)構(gòu)嵌套
循環(huán)中的幾種變量
與輸入輸出有關(guān)的幾個問題
輸入與安全性
幾個常用程序模式
本章討論的重要概念
練習(xí)
第5章 c程序結(jié)構(gòu)
5.1 數(shù)值類型
5.1.1 字符類型
5.1.2 整數(shù)類型
5.1.3 基本數(shù)?類型的選擇
5.2 幾種控制語句
5.2.1 do-while循環(huán)結(jié)構(gòu)
5.2.2 流程控制語句
5.2.3 開關(guān)語句
5.3 一些標(biāo)準(zhǔn)庫函數(shù)
5.3.1 字符分類函數(shù)
5.3.2 隨機數(shù)生成函數(shù)
5.4 程序的函數(shù)分解
5.4.1 函數(shù)分解
5.4.2 對函數(shù)的兩種觀點
5.4.3 函數(shù)定義與調(diào)用之間的配合
5.4.4 函數(shù)原型
5.4.5 求函數(shù)的根
5.4.6 一個簡單猜數(shù)游戲
5.5 c程序結(jié)構(gòu)與變量
5.5.1 外部定義的變量
5.5.2 作用域、存在期和變量類
5.5.3 變量的其他問題
5.6 預(yù)處理
5.6.1 文件包含命令
5.6.2 宏定義與宏替換
5.6.3 條件編譯命令
5.6.4 定義常量
5.6.5 單詞計數(shù)問題
5.7 字位運算符
本章討論的重要概念
練習(xí)
第6章 順序數(shù)據(jù)組織:數(shù)組
6.1 數(shù)組的定義和使用
6.1.1 數(shù)組變量的定義和聲明
6.1.2 數(shù)組的使用
6.1.3 數(shù)組?初始化
6.1.4 數(shù)組程序?qū)嵗?br />6.1.5 定義數(shù)組的問題
6.2 以數(shù)組為參數(shù)的函數(shù)
6.2.1 一個例子
6.2.2 修改實參數(shù)組的元素
6.3 二維和多維數(shù)組
6.3.1 多維數(shù)組的初始化
6.3.2 多維數(shù)組的使用
6.3.3 多維數(shù)組作為函數(shù)的參數(shù)
6.4 字符數(shù)組與字符串
6.4.1 字符數(shù)組
6.4.2 字符串
6.4.3 程序?qū)嵗?br />6.4.4 標(biāo)準(zhǔn)庫字符串處理函數(shù)
6.4.5 輸出文本里的最長行
6.5 編程實例
6.5.1 成績直方圖
6.5.2 一個通用的帶檢查的整數(shù)輸入函數(shù)
6.5.3 “計算”數(shù)組變量的大小
6.5.4 數(shù)組的劃分
6.5.5 數(shù)組的排序
6.5.6 統(tǒng)計c程序里的關(guān)鍵字
語言細(xì)節(jié)和問題
數(shù)組的存儲實現(xiàn)
越界訪問的可能后果
多維數(shù)組的實現(xiàn)
函數(shù)參數(shù)與sizeof運算符
字符串的字典序
幾個常用程序模式
本章討論的重要概念
練習(xí)
第7章 指針的應(yīng)用
7.1 指針的定義和使用
7.1.1 指針的定義
7.1.2 指針操作
7.1.3 指針作為函數(shù)參數(shù)
7.1.4 有關(guān)指針的幾個問題
7.2 指針與數(shù)組
7.2.1 指向數(shù)組元素的指針
7.2.2 基于指針運算的數(shù)組程序設(shè)計
7.2.3 數(shù)組參數(shù)與指針
7.2.4 指針與數(shù)組操作的程序?qū)嵗?br />7.2.5 字符指針與字符數(shù)組
7.2.6 多維數(shù)組作為參數(shù)的通用函數(shù)
7.3 指針數(shù)組
7.3.1 字符指針數(shù)組
7.3.2 指針數(shù)組與二維數(shù)組
7.3.3 命令行參數(shù)及其處理
7.4 動態(tài)存儲管理
7.4.1 c語言的動態(tài)存儲管理機制
7.4.2 兩個程序?qū)嵗?br />7.4.3 函數(shù)、指針和動態(tài)存儲
7.4.4 定義類型
7.5 指向函數(shù)的指針
7.5.1 函數(shù)指針的定義和使用
7.5.2 函數(shù)指針作為函數(shù)的參數(shù)
語言細(xì)節(jié)和問題
指針運算原理
指針轉(zhuǎn)換
使用動態(tài)存儲管理的要點和細(xì)節(jié)
動態(tài)調(diào)整策略
過時的函數(shù)指針形式
復(fù)雜類型描述與解讀
幾個常用程序模式
本章討論的重要概念
練習(xí)
第8章 文件和輸入輸出程序設(shè)計
8.1 文件的概念
8.1.1 流和文件指針
8.1.2 緩沖式輸入輸出
8.2 文件的使用
8.2.1 文件的打開和關(guān)閉
8.2.2 輸入輸出函數(shù)
8.2.3 程序?qū)嵗?br />8.2.4 標(biāo)準(zhǔn)錯誤流
8.2.5 直接輸入輸出函數(shù)
8.3 標(biāo)準(zhǔn)流輸入輸出與格式控制
8.3.1 行式輸入?輸出
8.3.2 輸入格式控制
8.3.3 輸出格式控制
8.3.4 以字符串作為格式化輸入輸出對象
8.4 程序?qū)嵗?br />8.4.1 求文件中數(shù)據(jù)的平均值
8.4.2 一個背單詞程序
8.4.3 資金賬目系統(tǒng)
幾個常用程序模式
本章討論的重要概念
練習(xí)
第9章 結(jié)構(gòu)和復(fù)雜數(shù)據(jù)組織
9.1 結(jié)構(gòu)
9.1.1 結(jié)構(gòu)聲明與變量定義
9.1.2 結(jié)構(gòu)變量的初始化和使用
9.1.3 結(jié)構(gòu)、數(shù)組與指針
9.2 枚舉
9.3 結(jié)構(gòu)與函數(shù)
9.3.1 處理結(jié)構(gòu)的函數(shù)
9.3.2 程序?qū)嵗?br />9.4 編程實例
9.4.1 數(shù)據(jù)組的排序
9.4.2 復(fù)數(shù)的表示和處理
9.5 鏈接結(jié)構(gòu)(自引用結(jié)構(gòu))
9.5.1 鏈接結(jié)構(gòu)
9.5.2 自引用結(jié)構(gòu)的定義
9.5.3 程序?qū)崿F(xiàn)
9.5.4 數(shù)據(jù)與查找
語言細(xì)節(jié)和問題
結(jié)構(gòu)的實現(xiàn)
聯(lián)合
字段
本章討論的重要概念
練習(xí)
第10章 程序開發(fā)技術(shù)
10.1 分別編譯和c程序的分塊開發(fā)
10.1.1 分塊開發(fā)的問題和方法
10.1.2 程序?qū)嵗簩W(xué)生成績處理
10.1.3 分塊重整
10.1.4 其他安排和考慮
10.1.5 模塊化思想和技術(shù)
10.1.6 單一頭文件結(jié)構(gòu)和多個頭文件結(jié)構(gòu)
10.2 功能模塊和程序庫
10.2.1 復(fù)數(shù)模塊
10.2.2 目標(biāo)文件和庫
10.2.3 防止重復(fù)包含
10.3 錯誤報告和處理
10.3.1 建立統(tǒng)一的錯誤報告機制
10.3.2 定義?參數(shù)的錯誤報告函數(shù)
10.3.3 運行中錯誤的檢查和處理
10.4 程序的配置
10.4.1 程序的行為參數(shù)和啟動時配置
10.4.2 交互式配置
10.4.3 通過命令行參數(shù)
10.4.4 采用配置文件
10.5 程序開發(fā)過程
10.5.1 自上而下的開發(fā)
10.5.2 自下而上的開發(fā)
10.5.3 實際開發(fā)過程
本章討論的重要概念
練習(xí)
第11章 標(biāo)準(zhǔn)庫
11.1 標(biāo)準(zhǔn)庫結(jié)構(gòu)
11.1.1 標(biāo)準(zhǔn)定義([stddef.h])
11.1.2 錯誤信息([errno.h])
11.1.3 c99的幾個頭文件
11.2 幾個已經(jīng)介紹過的頭文件
11.3 字符串函數(shù)([string.h])
11.3.1 一些字符串函數(shù)
11.3.2 存儲區(qū)操作函數(shù)
11.4 功能函數(shù)([stdlib.h])
11.4.1 幾個整數(shù)函數(shù)
11.4.2 數(shù)值轉(zhuǎn)換
11.4.3 執(zhí)行控制
11.4.4 與執(zhí)行環(huán)境交互
11.4.5 常用函數(shù)bsearch和qsort
11.5 日期和時間([time.h])
11.6 實現(xiàn)特征([limit.h]和[float.h])
11.6.1 整數(shù)類型特征
11.6.2 浮點數(shù)類型特征
11.7 其他與輸入輸出有關(guān)的函數(shù)([stdio.h])
11.7.1 符號常量和類型
11.7.2 文件操作函數(shù)
11.7.3 流緩沖區(qū)操作函數(shù)
11.7.4 文件定位及定位函數(shù)
11.7.5 其他有關(guān)函數(shù)
11.7.6 采用va_list參數(shù)的輸出函數(shù)
11.8 定義變長參數(shù)表([stdarg.h])
11.9 非局部控制轉(zhuǎn)移([setjmp.h])
11.10 調(diào)試斷言和信號處理([assert.h]和[signal.h])
11.11 標(biāo)準(zhǔn)庫的其他功能
11.11.1 本地化
11.11.2 多字節(jié)字符
本章討論的重要概念
練習(xí)
第12章 c99導(dǎo)引
12.1 c99擴(kuò)充
12.1.1 語言層擴(kuò)充
12.2 c99 數(shù)組和結(jié)構(gòu)
12.2.1 復(fù)合對象的初始化
12.2.2 變長數(shù)組的定義和聲明
12.2.3 函數(shù)的變長數(shù)組參數(shù)
12.2.4 結(jié)構(gòu)的變長數(shù)組成員
12.3 幾個c99標(biāo)準(zhǔn)庫包
12.3.1 標(biāo)準(zhǔn)庫包[stdint.h]和[inttype.h]
12.3.2 標(biāo)準(zhǔn)庫包[complex.h]
附錄a c語言運算符表
附錄b c語言速查
進(jìn)一步學(xué)習(xí)的建議
參考文獻(xiàn)