《从问题到程序》目录

(机械工业出版社,2005年9月出版)

第1章程序设计和C语言
1.1程序和程序语言
1.2C语言简介
1.3一个简单的C程序
1.4程序开发过程
1.5问题与程序设计
本章讨论的重要概念
练习

第2章数据对象与计算
2.1基本字符,名字表示,标识符和关键字
2.2数据与类型
2.3基本类型与数据表示
2.3.1整数类型和整数的表示
2.3.2实数类型和实数的表示
2.3.3字符类型和字符的表示
2.3.4数据的外部表示,内部表示与转换
2.4运算符,表达式与计算
2.4.1算术运算符
2.4.2算术表达式
2.4.3表达式的求值
2.4.4计算和类型
2.5数学函数库及其使用
2.5.1函数,函数调用
2.5.2数学函数及其使用
2.5.3函数调用中的类型转换
问题解释
几个常用程序模式
本章讨论的重要概念
练习

第3章变量 函数和控制结构
3.1语句,复合结构
3.2变量—概念,定义和使用
3.2.1变量的定义
3.2.2变量的赋值与取值
3.2.3几个问题
3.3定义函数(初步)
3.3.1函数定义
3.3.2函数和程序
3.3.3函数与类型
3.3.4自定义输出函数
3.4关系表达式,逻辑表达式,条件表达式
3.4.1关系表达式和条件表达式
3.4.2逻辑表达式
3.5语句与控制结构
3.5.1条件语句(if语句)
3.5.2循环语句(1):while语句
3.5.3循环语句(2):for语句
3.6若干常用结构和问题
3.6.1增量和减量运算符(++,--)
3.6.2逗号运算符
3.6.3实现二元运算符操作的赋值运算符
3.6.4空语句
3.6.5表达式和求值
问题解释
几个常用程序模式
本章讨论的重要概念
练习

第4章基本程序设计技术
4.1循环程序设计
4.1.1基本循环方式
4.1.2求一系列完全平方数
4.1.3判断素数(谓词函数)
4.1.4艰难的旅程(浮点误差)
4.1.5求立方根(迭代和逼进)
4.1.6求sin函数值(通项计算)
4.2循环程序的问题
4.2.1从循环中退出
4.2.2循环中的几种变量
4.3循环与递归
4.3.1阶乘和乘幂(循环,递归)
4.3.2Fibonacci序列(计算与时间)
4.3.3为计算过程计时
4.3.4Fibonacci序列的迭代计算(程序正确性与循环不变式)
4.3.5最大公约数
4.3.6河内塔(梵塔)问题
4.4基本输入输出
4.4.1格式输入函数scanf
4.4.2字符输入输出函数
4.4.3输入函数的返回值及其作用
4.5控制结构和控制语句
4.5.1do-while循环结构
4.5.2流程控制语句
4.5.3开关语句
4.6程序设计实例
4.6.1一个简单计算器
4.6.2定义枚举常量
4.6.3单词计数问题
4.7程序测试和排错
4.7.1测试
4.7.2白箱测试
4.7.3黑箱测试
4.7.4排除程序里的错误
问题解释
几个常用程序模式
本章讨论的重要概念
练习

第5章C程序结构
5.1数值类型
5.1.1实数类型和整数类型
15.1.2字符类型
5.1.3整数类型
5.1.4基本数据类型的选择
5.2函数和标准库函数
5.2.1C语言的库函数
5.2.2字符分类函数
5.2.3随机数生成函数
5.3函数定义和程序的函数分解
5.3.1主函数
5.3.2程序的函数分解
5.3.3对函数的两种观点
5.3.4函数原型
5.4C程序结构与变量
5.4.1外部定义的变量
5.4.2作用域与生存期
5.4.3外部变量和自动变量
5.4.4变量定义的嵌套
5.4.5静态局部变量
5.4.6变量的其他问题
5.4.7一个实例
5.5预处理
5.5.1文件包含命令
5.5.2宏定义与宏替换
5.5.3条件编译命令
5.6定义常量
5.7字位运算符
5.8编程实例
5.8.1一个简单的猜数游戏
5.8.2加密与解密
本章讨论的重要概念
练习

第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.2.5定义数组的问题
6.3数组作为函数参数
6.3.1一个例子
6.3.2修改实参数组的元素
6.4字符数组与字符串
6.4.1字符数组
6.4.2字符串
6.4.3程序实例
6.4.4标准库字符串处理函数
6.4.5输出文本里的最长行
6.5两维和多维数组
6.5.1多维数组的初始化
6.5.2多维数组的表示和使用
6.5.3多维数组作为函数的参数
6.6编程实例
6.6.1成绩直方图
6.6.2一个通用带检查的整数输入函数
6.6.3“计算”数组变量的大小
6.6.4统计C程序里的关键字
6.6.5数组的划分
6.6.6数组的排序
问题解释
几个常用程序模式
本章讨论的重要概念
练习

第7章指针
7.1地址与指针
7.2指针变量的定义和使用
7.2.1指针操作
7.2.2指针作为函数的参数
7.2.3与指针有关的一些问题
7.3指针与数组
7.3.1指向数组元素的指针
7.3.2基于指针运算的数组程序设计
7.3.3数组参数与指针
7.3.4指针与数组操作的程序实例
7.3.5字符指针与字符数组
7.4指针数组
7.4.1指针数组与两维数组
7.4.2命令行参数及其处理
7.5多维数组作为参数的通用函数
7.6动态存储管理
7.6.1为什么需要动态存储管理
7.6.2C语言的动态存储管理机制
7.6.3两个程序实例
7.6.4函数,指针和动态存储
7.7定义类型
7.7.1定义数组类型和指针类型
7.7.2复杂类型描述与解读
7.8指向函数的指针
7.8.1函数指针的定义和使用
7.8.2函数指针作为函数的参数
7.8.3数值积分函数
7.8.4若干以函数指针为参数的数组操作实用函数
几个常用程序模式
本章讨论的重要概念
练习

第8章文件和输入输出
8.1文件的概念
8.1.1流和文件指针
8.1.2缓冲式输入输出
8.2文件的使用
8.2.1文件的打开和关闭
8.2.2输入输出函数
8.2.3程序实例
8.2.4直接输入输出函数
8.3标准流输入输出与格式控制
8.3.1行式输入和输出
8.3.2输入格式控制
8.3.3输出格式控制
8.3.4以字符串作为格式化输入输出对象
8.3.5标准错误流
8.4程序实例
8.4.1求文件数据的平均值
8.4.2一个背单词程序
8.4.3资金账目系统
练习

第9章结构和其他数据机制
9.1结构(struct)
9.1.1结构声明与变量定义
9.1.2结构变量的初始化和使用
9.1.3结构,数组与指针
9.2结构与函数
9.2.1处理结构的函数
9.2.2程序实例
9.3联合(union)
9.4枚举(enum)
9.5编程实例
9.5.1数据组的排序
9.5.2复数的表示和处理
9.6链接结构(自引用结构)
9.6.1链接结构
9.6.2自引用结构的定义
9.6.3程序实现
9.6.4数据与查找
9.7字段
问题解释
本章讨论的重要概念
练习

第10章程序开发技术
10.1分别编译和C程序的分块开发
10.1.1分块开发的问题和方法
10.1.2程序实例:学生成绩处理
10.1.3分块重整
10.1.4其他安排和考虑
10.1.5模块化思想和技术
10.1.6单一头文件结构和多个头文件结构
10.2功能模块和程序库
10.2.1复数模块
10.2.2目标文件和库
10.2.3防止重复包含
10.3错误报告和处理
10.3.1建立统一的错误报告机制
10.3.2定义变参数的错误报告函数
10.3.3运行中错误的检查和处理
10.4程序的配置
10.4.1程序的行为参数和启动时的配置
10.4.2交互式配置
10.4.3通过命令行参数
10.4.4采用配置文件
10.5程序开发过程
10.5.1自上而下的开发
10.5.2自下而上的开发
10.5.3实际开发过程
练习

第11章标准库
11.1标准库结构
11.1.1标准定义(<stddef.h>)
11.1.2错误信息(<errno.h>)
11.2几个已经介绍过的头文件
11.2.1数学函数(<math.h>)
11.2.2字符处理函数(<ctype.h>)
11.3字符串函数(<string.h>)
11.3.1一些字符串函数
11.3.2存储区操作
11.4功能函数(<stdlib.h>)
11.4.1几个整数函数
11.4.2数值转换
11.4.3执行控制
11.4.4与执行环境交互
11.4.5常用函数bsearch和qsort
11.5日期和时间(<time.h>)
11.6实现特征(<limits.h>和<float.h>)
11.6.1整数类型特征
11.6.2浮点数类型特征
11.7其他与输入输出有关的函数(<stdio.h>)
11.7.1符号常量和类型
11.7.2文件操作函数
11.7.3流缓冲区操作函数
11.7.4文件定位及定位函数
11.7.5其他有关函数
11.7.6采用va_list参数的输出函数
11.8定义变长度参数表(<stdarg.h>)
11.9非局部控制转移(<setjmp.h>)
11.10调试断言和信号处理(<assert.h>和<signal.h>)
11.11标准库的其他功能
11.11.1本地化
11.11.2多字节字符
本章讨论的重要概念
练习

附录AC语言运算符表

附录BC语言速查

附录C99简介

进一步学习的建议

参考文献



EMAIL:qzy@math.pku.edu.cn
通讯地址:100871,北京大学数学学院信息科学系
 
2005.10.20