《從問題到程序:程序設(shè)計(jì)與C語言引論》以c作為工具語言,討論了基本程序設(shè)計(jì)的各方面內(nèi)容,詳細(xì)解釋了與c語言和程序設(shè)計(jì)有關(guān)的問題。在新版中,特別加強(qiáng)了針對(duì)近年日益受到業(yè)界和學(xué)術(shù)界廣泛重視的問題的討論,并通過詳細(xì)地分析和討論大量符合c99標(biāo)準(zhǔn)的實(shí)例,給出了分析和分解問題、找出解決問題的主要步驟、確定函數(shù)抽象、找出循環(huán)、選擇語言結(jié)構(gòu)直至最后做出所需程序的完整過程。
《從問題到程序:程序設(shè)計(jì)與C語言引論》適合作為高等院校計(jì)算機(jī)及相關(guān)專業(yè)第一門程序設(shè)計(jì)課程的教材,也可供其他學(xué)習(xí)c程序設(shè)計(jì)的讀者自學(xué)使用。
前言
本書中的編程實(shí)例和模式
第1章 程序設(shè)計(jì)和c語言
1.1 程序和程序語言
1.2 c語言簡介
1.3 一個(gè)簡單的c程序
1.4 程序開發(fā)過程
1.5 問題與程序設(shè)計(jì)
本章討論的重要概念
練習(xí)
第2章 數(shù)據(jù)與簡單計(jì)算程序
2.1 基本字符、標(biāo)識(shí)符和關(guān)鍵字
2.2 數(shù)據(jù)、類型和簡單程序
2.2.1 幾個(gè)常用類型
2.2.2 函數(shù)printf和簡單 文本輸出程序
2.3 運(yùn)算符、表達(dá)式和計(jì)算
2.3.1 算術(shù)運(yùn)算符和算術(shù)表達(dá)式
2.3.2 表達(dá)式的求值
2.3.3 計(jì)算和類型
2.4 數(shù)學(xué)函數(shù)和簡單計(jì)算程序
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)換和輸出
運(yùn)算對(duì)象的求值順序
幾個(gè)常用程序模式
本章討論的重要概念
練習(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 增量和減量運(yùn)算符(++、--)
3.6.2 逗號(hào)運(yùn)算符
3.6.3 實(shí)現(xiàn)二元運(yùn)算符操作的賦值運(yùn)算符
3.6.4 空語句
3.6.5 定義枚舉常量
3.7 輸入和輸出
3.7.1 格式輸入函數(shù)scanf
3.7.2 字符輸入和輸出函?
語言細(xì)節(jié)和問題
變量的意義和實(shí)現(xiàn)
賦值操作的一些問題
條件表達(dá)式和條件語句
表達(dá)式和求值
輸入和緩沖
幾個(gè)常用程序模式
本章討論的重要概念
練習(xí)
第4章 基本編程技術(shù)
4.1 循環(huán)程序設(shè)計(jì)
4.1.1 基本循環(huán)方式
4.1.2 求一系列完全平方數(shù)
4.1.3 判斷素?cái)?shù)(謂詞函數(shù))
4.1.4 艱難旅程(浮點(diǎn)誤差)
4.1.5 求立方根(迭代和逼近)
4.1.6 求sin函數(shù)值(通項(xiàng)計(jì)算)
4.1.7 從循環(huán)中退出
4.2 輸入循環(huán)
4.2.1 輸入循環(huán)的基本技術(shù)
4.2.2 字符輸入
4.2.3 檢查輸入
4.2.4 一個(gè)簡單計(jì)算器
4.3 循環(huán)與遞歸
4.3.1 階乘和乘冪(循環(huán),遞歸)
4.3.2 fibonacci序列(計(jì)算與時(shí)間)
4.3.3 為計(jì)算過程計(jì)時(shí)
4.3.4 fibonacci序列的迭代計(jì)算(程序正確性與循環(huán)不變式)
4.3.5 最大公約數(shù)
4.3.6 河內(nèi)塔(梵塔)問題
4.4 程序調(diào)試和排錯(cuò)
4.4.1 測(cè)試
4.4.2 白箱測(cè)試
4.4.3 黑箱測(cè)試
4.4.4 排除程序里的錯(cuò)誤
語言細(xì)節(jié)和問題
程序的逐步求精和控制結(jié)構(gòu)嵌套
循環(huán)中的幾種變量
與輸入輸出有關(guān)的幾個(gè)問題
輸入與安全性
幾個(gè)常用程序模式
本章討論的重要概念
練習(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 隨機(jī)數(shù)生成函數(shù)
5.4 程序的函數(shù)分解
5.4.1 函數(shù)分解
5.4.2 對(duì)函數(shù)的兩種觀點(diǎn)
5.4.3 函數(shù)定義與調(diào)用之間的配合
5.4.4 函數(shù)原型
5.4.5 求函數(shù)的根
5.4.6 一個(gè)簡單猜數(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 單詞計(jì)數(shù)問題
5.7 字位運(yùn)算符
本章討論的重要概念
練習(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 一個(gè)例子
6.2.2 修改實(shí)參數(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 編程實(shí)例
6.5.1 成績直方圖
6.5.2 一個(gè)通用的帶檢查的整數(shù)輸入函數(shù)
6.5.3 “計(jì)算”數(shù)組變量的大小
6.5.4 數(shù)組的劃分
6.5.5 數(shù)組的排序
6.5.6 統(tǒng)計(jì)c程序里的關(guān)鍵字
語言細(xì)節(jié)和問題
數(shù)組的存儲(chǔ)實(shí)現(xiàn)
越界訪問的可能后果
多維數(shù)組的實(shí)現(xiàn)
函數(shù)參數(shù)與sizeof運(yùn)算符
字符串的字典序
幾個(gè)常用程序模式
本章討論的重要概念
練習(xí)
第7章 指針的應(yīng)用
7.1 指針的定義和使用
7.1.1 指針的定義
7.1.2 指針操作
7.1.3 指針作為函數(shù)參數(shù)
7.1.4 有關(guān)指針的幾個(gè)問題
7.2 指針與數(shù)組
7.2.1 指向數(shù)組元素的指針
7.2.2 基于指針運(yùn)算的數(shù)組程序設(shè)計(jì)
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 動(dòng)態(tài)存儲(chǔ)管理
7.4.1 c語言的動(dòng)態(tài)存儲(chǔ)管理機(jī)制
7.4.2 兩個(gè)程序?qū)嵗?br />7.4.3 函數(shù)、指針和動(dòng)態(tài)存儲(chǔ)
7.4.4 定義類型
7.5 指向函數(shù)的指針
7.5.1 函數(shù)指針的定義和使用
7.5.2 函數(shù)指針作為函數(shù)的參數(shù)
語言細(xì)節(jié)和問題
指針運(yùn)算原理
指針轉(zhuǎn)換
使用動(dòng)態(tài)存儲(chǔ)管理的要點(diǎn)和細(xì)節(jié)
動(dòng)態(tài)調(diào)整策略
過時(shí)的函數(shù)指針形式
復(fù)雜類型描述與解讀
幾個(gè)常用程序模式
本章討論的重要概念
練習(xí)
第8章 文件和輸入輸出程序設(shè)計(jì)
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)錯(cuò)誤流
8.2.5 直接輸入輸出函數(shù)
8.3 標(biāo)準(zhǔn)流輸入輸出與格式控制
8.3.1 行式輸入?輸出
8.3.2 輸入格式控制
8.3.3 輸出格式控制
8.3.4 以字符串作為格式化輸入輸出對(duì)象
8.4 程序?qū)嵗?br />8.4.1 求文件中數(shù)據(jù)的平均值
8.4.2 一個(gè)背單詞程序
8.4.3 資金賬目系統(tǒng)
幾個(gè)常用程序模式
本章討論的重要概念
練習(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 編程實(shí)例
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)的實(shí)現(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)和多個(gè)頭文件結(jié)構(gòu)
10.2 功能模塊和程序庫
10.2.1 復(fù)數(shù)模塊
10.2.2 目標(biāo)文件和庫
10.2.3 防止重復(fù)包含
10.3 錯(cuò)誤報(bào)告和處理
10.3.1 建立統(tǒng)一的錯(cuò)誤報(bào)告機(jī)制
10.3.2 定義?參數(shù)的錯(cuò)誤報(bào)告函數(shù)
10.3.3 運(yùn)行中錯(cuò)誤的檢查和處理
10.4 程序的配置
10.4.1 程序的行為參數(shù)和啟動(dòng)時(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 實(shí)際開發(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 錯(cuò)誤信息([errno.h])
11.1.3 c99的幾個(gè)頭文件
11.2 幾個(gè)已經(jīng)介紹過的頭文件
11.3 字符串函數(shù)([string.h])
11.3.1 一些字符串函數(shù)
11.3.2 存儲(chǔ)區(qū)操作函數(shù)
11.4 功能函數(shù)([stdlib.h])
11.4.1 幾個(gè)整數(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 日期和時(shí)間([time.h])
11.6 實(shí)現(xiàn)特征([limit.h]和[float.h])
11.6.1 整數(shù)類型特征
11.6.2 浮點(diǎn)數(shù)類型特征
11.7 其他與輸入輸出有關(guān)的函數(shù)([stdio.h])
11.7.1 符號(hào)常量和類型
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)試斷言和信號(hà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ù)合對(duì)象的初始化
12.2.2 變長數(shù)組的定義和聲明
12.2.3 函數(shù)的變長數(shù)組參數(shù)
12.2.4 結(jié)構(gòu)的變長數(shù)組成員
12.3 幾個(gè)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語言運(yùn)算符表
附錄b c語言速查
進(jìn)一步學(xué)習(xí)的建議
參考文獻(xiàn)