标题：从问题到程序
图书信息
出版社: 机械工业出版社; 第1版 (2005年9月1日)
丛书名: 程序设计与C语言引论重点大学计算机教材
平装: 415页
开本: 16开
ISBN: 7111167562
条形码: 9787111167563
尺寸: 24 x 18.5 x 1.6 cm
重量: 599 g
作者简介
裘宗燕，1952年生，北京大学数学学院信息科学系教授。长期从事计算机软件和理论方面的研究和教学工作。专业兴趣领域包括：程序理论，软件形式化方法，复杂程序和系统的形式化模型，程序设计语言(语言特征和语义)，程序设计技术，符号计算和计算机科学教育等。近年主持或者参加了多项与本人研究兴趣相关的项目，包括国家自然科学基金项目和973项目。目前主要的研究工作集中在具有复杂状态的程序和系统的语义模型、面向对象系统的理论、Web语言和Web服务的形式化模型以及一般的软件形式化方法领域。
多年来一直从事计算机科学技术课程的教学工作，承担过多门本科生和研究生课程的教学工作，包括：算法与数据结构、程序设计语言原理、计算概论(C语言程序设计)、程序设计技术与方法、算法设计与分析、数理逻辑、理论计算机科学基础、人工智能等。
内容简介
《从问题到程序》以程序设计为基本线索，同时深入介绍了C语言各方面的情况。书中强调的是如何认识程序、写程序和用C写出好的程序。并通过实例讨论了问题的分析和分解，找出主要步骤，确定函数抽象，找出循环，选择语言结构，最后写出程序的过程。书中不少实例给出了在不同考虑下可能形成的多种解法，以帮助读者理解程序设计的“真谛”。《从问题到程序》以C作为讨论程序设计的语言，讨论了基本程序设计的各方面问题。书中给出程序实例时没有采用常见的“提出问题，给出解答，再加些解释”的简单三步形式，而是增加了许多对问题的分析和讨论，以帮助读者认识程序设计过程的实质，理解从问题到程序的思考过程。书中还尽可能详尽地解释了许多与C语言和程序设计有关的问题。
媒体评论
书评
本书以程序设计为基本线索，同时深入介绍了C语言各方面的情况。书中强调的是如何认识程序、写程序和用C写出好的程序。并通过实例讨论了问题的分析和分解，找出主要步骤，确定函数抽象，找出循环，选择语言结构，最后写出程序的过程。书中不少实例给出了在不同考虑下可能形成的多种解法，以帮助读者理解程序设计的“真谛”。
目录
前言
本书作者简介
第1章  程序设计和C语言  1
1.1程序和程序语言  1
1.2 C语言简介  8
1.3一个简单的C程序  1O
1.4程序开发过程  13
1.5问题与程序设计  17
本章讨论的重要概念  18
练习  18
第2章  数据对象与计算  21
2.1基本字符、名字表示、标识符和关键字  21
2.2数据与类型  23
2.3基本类型与数据表示  23
2.3.1整数类型和整数的表示  23
2.3.2实数类型和实数的表示  25
2.3.3字符类型和字符的表示  26
2.3.4数据的外部表示、内部表示与转换  27
2.4运算符、表达式与计算  3O
2.4.1算术运算符  3O
2.4.2算术表达式  31
2.4.3表达式的求值   32
2.4.4计算和类型  34
2.5数学函数库及其使用  37
2.5.1函数、函数调用  37
2.5.2数学函数及其使用  38
2.5.3函数调用中的类型转换  39
问题解释  40
几个常用程序模式  40
本章讨论的重要概念   41
练习  41
第3章  变量、函数和控制结构  43
3.1语句、复合结构  43
3.2变量——概念、定义和使用  44
3.2.1变量的定义  45
3.2.2变量的赋值与取值  46
3.2.3几个问题  48
3.3定义函数(初步)  50
3.3.1函数定义  52
3.3.2函数和程序  55
3.3.3函数与类型  56
3.3.4自定义输出函数  57
3.4关系表达式、逻辑表达式、条件表达式  58
3.4.1关系表达式和条件表达式  58
3.4.2逻辑表达式  60
3.5语句与控制结构  61
3.5.1条件语句(if语句)  62
3.5.2循环语句(1)：while语句  65
3.5.3循环语句(2)：for语句  68
3.6若干常用结构和问题  70
3.6.1增量和减量运算符(+；、～)  70
3.6.2逗号运算符  71
3.6.3实现二元运算符操作的赋值运算符  71
3.6.4空语句  72
3.6.5表达式和求值  73
问题解释  74
几个常用程序模式  74
本章讨论的重要概念  75
练习   75
第4章  基本程序设计技术  79
4.1循环程序设计  79
4.1.1基本循环方式  8O
4.1.2求一系列完全平方数  81
4.1.3判断素数(谓词函数)  82
4.1.4艰难的旅程(浮点误差)  83
4.1.5求立方根(迭代和逼进)  85  
4.1.6求sin函数值(通项计算)  86
4.2循环程序的问题  87
4.2.1从循环中退出  87
4.2.2循环中的几种变量  89
4.3循环与递归  9O
4.3.1阶乘和乘幂(循环，递归)  9O
4.3.2 Fibonacci序列(计算与时间)  93
4.3.3为计算过程计时  94
4.3.4 Fibonacci序列的迭代计算(程序正确性与循环不变式)  95
4.3.5最大公约数  97
4.3.6河内塔(梵塔)问题  100
4.4基本输入输出  102
4.4.1格式输入函数scanf  102
4.4.2字符输入输出函数  109
4.4.3输入函数的返回值及其作用  112
4.5控制结构和控制语句  114
4.5.1 do-while循环结构  114
4.5.2流程控制语句  115
4.5.3开关语句  117
4.6程序设计实例  119
4.6.1一个简单计算器  119
4.6.2定义枚举常量  119
4.6.3单词计数问题  120
4.7程序测试和排错  123
4.7.1测试  123
4.7.2白箱测试  124
4.7.3黑箱测试  125
4.7.4排除程序里的错误  126
问题解释  127
几个常用程序模式  128
本章讨论的重要概念  128
练习  128
第5章  C程序结构  133
5.1数值类型  133
5.1.1实数类型和整数类型  133
5.1.2字符类型  133
5.1.3整数类型  134
5.1.4基本数据类型的选择  135
5.2函数和标准库函数  136
5.2.1C语言的库函数  137
5.2.2字符分类函数  137
5.2.3随机数生成函数  138
5.3函数定义和程序的函数分解  l39
5.3.1主函数  140
5.3.2程序的函数分解  141
5.3.3对函数的两种观点  142
5.3.4函数原型  146
5.4 C程序结构与变量  149
5.4.1外部定义的变量  150
5.4.2作用域与生存期  151
5.4.3外部变量和自动变量  151
5.4.4变量定义的嵌套  153
5.4.5静态局部变量  154
5.4.6变量的其他问题  155
5.4.7一个实例  l57
5.5预处理  159
5.5.1文件包含命令  159
5.5.2宏定义与宏替换  160
5.5.3条件编译命令  163
5.6定义常量  164
5.7字位运算符  165
5.8编程实例  168
5.8.1一个简单的猜数游戏  168
5.8.2加密与解密  170
本章讨论的重要概念  172
练习  l72
第6章  数组  175
6.1数组的概念、定义和使用  175
6.1.1定义数组变量  176
6.1.2数组的使用  177
6.1.3数组的初始化  179
6.1.4数组的存储实现  180
6.2数组程序实例  181
6.2.1从字符到下标  181
6.2.2筛法求素数  182
6.2.3成绩分类  183
6.2.4多项式求值  184
6.2.5定义数组的问题  185
6.3数组作为函数参数  186
6.3.1一个例子  186
6.3.2修改实参数组的元素  188
6.4字符数组与字符串  189
6.4.1字符数组  189
6.4.2字符串  189
6.4.3程序实例  191
6.4.4标准库字符串处理函数  193
6.4.5输出文本里的最长行  194
6.5两维和多维数组  198
6.5.1多维数组的初始化  198
6.5.2多维数组的表示和使用  199
6.5.3多维数组作为函数的参数  200
6.6编程实例  201
6.6.1成绩直方图  201
6.6.2一个通用带检查的整数输入函数  205
6.6.3  “计算”数组变量的大小  206
6.6.4统计c程序里的关键字  208
6.6.5数组的划分  211
6.6.6数组的排序  213
问题解释  2l5
几个常用程序模式  215
本章讨论的重要概念  215
练习  215
第7章  指针  217
7.1地址与指针  217
7.2指针变量的定义和使用  218
7.2.1指针操作  218
7.2.2指针作为函数的参数  219
7.2.3与指针有关的一些问题  222
7.3指针与数组  224
7.3.1指向数组元素的指针  224
7.3.2基于指针运算的数组程序设计  227
7.3.3数组参数与指针  228
7.3.4指针与数组操作的程序实例  229
7.3.5字符指针与字符数组  231
7.4指针数组  233
7.4.1指针数组与两维数组  234
7.4.2命令行参数及其处理  235
7.5多维数组作为参数的通用函数  238
7.6动态存储管理  240
7.6.1为什么需要动态存储管理  24O
7.6.2 c语言的动态存储管理机制  241
7.6.3两个程序实例  244
7.6.4函数、指针和动态存储  247
7.7定义类型  250
7.7.1定义数组类型和指针类型  251
7.7.2复杂类型描述与解读  252
7.8指向函数的指针  254
7.8.1函数指针的定义和使用  254
7.8.2函数指针作为函数的参数  255
7.8.3数值积分函数  257
7.8.4若干以函数指针为参数的数组操作实用函数  259
几个常用程序模式  260
本章讨论的重要概念  260
练习  261
第8章  文件和输入输出  263
8.1文件的概念  263
8.1.1流和文件指针  263
8.1.2缓冲式输入输出  264
8.2文件的使用  265
8.2.1文件的打开和关闭  265
8.2.2输入输出函数  267
8.2.3程序实例  268
8.2.4直接输入输出函数  270
8.3标准流输入输出与格式控制  271
8.3.1行式输入和输出  271
8.3.2输入格式控制  272
8.3.3输出格式控制  276
8.3.4以字符串作为格式化输入输出对象  278
8.3.5标准错误流  278
8.4程序实例  279
8.4.1求文件数据的平均值  279
8.4.2一个背单词程序  281
8.4.3资金账目系统  285
练习  288
第9章  结构和其他数据机制  291
9.1结构(struct)  291
9.1.1结构声明与变量定义  291
9.1.2结构变量的初始化和使用  296
9.1.3结构、数组与指针  297
9.2结构与函数  299
9.2.1处理结构的函数  299
9.2.2程序实例  302
9.3联合(union)  306
9.4枚举(enum)  308
9.5编程实例  310
9.5.1数据组的排序  310
9.5.2复数的表示和处理  312
9.6链接结构(自引用结构)  315
9.6.1链接结构  315
9.6.2自引用结构的定义  317
9.6.3程序实现  318
9.6.4数据与查找  321
9.7字段  322
问题解释  323
本章讨论的重要概念  323
练习  323
第10章  程序开发技术  327
10.1分别编译和C程序的分块开发  327
10.1.1分块开发的问题和方法  327
10.1.2程序实例：学生成绩处理  328
10.1.3分块重整  333
10.1.4其他安排和考虑  336
10.1.5模块化思想和技术  338
10.1.6单一头文件结构和多个头文件结构  342
10.2功能模块和程序库  345
10.2.1复数模块  345
10.2.2目标文件和库  348
10.2.3防止重复包含  349
10.3错误报告和处理  349
10.3.1建立统一的错误报告机制  349
10.3.2定义变参数的错误报告函数  350
10.3.3运行中错误的检查和处理  352
10.4程序的配置  358
10.4.1程序的行为参数和启动时的配置  358
10.4.2交互式配置  360
10.4.3通过命令行参数  361
10.4.4采用配置文件  362
10.5程序开发过程  362
10.5.1自上而下的开发  363
10.5.2自下而上的开发  365
10.5.3实际开发过程  365
练习  367
第11章  标准库  371
11.1标准库结构  371
11.1.1标准定义()  372
11.1.2错误信息()  372
11.2几个已经介绍过的头文件  373
11.2.1数学函数()  373
11.2.2字符处理函数()  374
11.3字符串函数(string.h>)  375
11.3.1一些字符串函数  375
11.3.2存储区操作  378
11.4功能函数()  379
11.4.1几个整数函数  380
11.4.2数值转换  380
11.4.3执行控制  381
11.4.4与执行环境交互  381
11.4.5常用函数bsearch和qsort  382
11.5日期和时间()  383
11.6实现特征(和)   385
11.6.1整数类型特征  385
11.6.2浮点数类型特征  386
11.7其他与输入输出有关的函数()  386
11.7.1符号常量和类型  386
11.7.2文件操作函数  387
11.7.3流缓冲区操作函数  388
11.7.4文件定位及定位函数  389
11.7.5其他有关函数  390
11.7.6采用va—list参数的输出函数  391
11.8定义变长度参数表(<stdarg.h)  392
11.9非局部控制转移()  395
11.10调试断言和信号处理(和)  397
11.11标准库的其他功能  398
11.11.1本地化  398
11.11.2多字节字符  400
本章讨论的重要概念  400
练习  400
附录A C语言运算符表  401
附录B C语言速查  403
附录C C99简介  409
进一步学习的建议  413
参考文献  416