从问题到程式


从问题到程式

文章插图
从问题到程式【从问题到程式】《从问题到程式》是2005年9月1日机械工业出版社出版的图书,作者是裘宗燕 。本书以程式设计为基本线索,同时深入介绍了C语言各方面的情况 。书中强调的是如何认识程式、写程式和用C写出好的程式 。并通过实例讨论了问题的分析和分解,找出主要步骤,确定函式抽象,找出循环,选择语言结构,最后写出程式的过程 。
基本介绍书名:从问题到程式
作者:裘宗燕
ISBN:9787111167563
页数:415页
出版社:机械工业出版社
出版时间:2005年9月1日
装帧:平装
开本:16开
内容简介书中不少实例给出了在不同考虑下可能形成的多种解法,以帮助读者理解程式设计的“真谛” 。《从问题到程式》以C作为讨论程式设计的语言,讨论了基本程式设计的各方面问题 。书中给出程式实例时没有採用常见的“提出问题,给出解答,再加些解释”的简单三步形式,而是增加了许多对问题的分析和讨论,以帮助读者认识程式设计过程的实质,理解从问题到程式的思考过程 。书中还儘可能详尽地解释了许多与C语言和程式设计有关的问题 。作者简介裘宗燕,1952年生,北京大学数学学院信息科学系教授 。长期从事计算机软体和理论方面的研究和教学工作 。专业兴趣领域包括:程式理论,软体形式化方法,複杂程式和系统的形式化模型,程式设计语言(语言特徵和语义),程式设计技术,符号计算和计算机科学教育等 。近年主持或者参加了多项与本人研究兴趣相关的项目,包括国家自然科学基金项目和973项目 。目前主要的研究工作集中在具有複杂状态的程式和系统的语义模型、面向对象系统的理论、Web语言和Web服务的形式化模型以及一般的软体形式化方法领域 。多年来一直从事计算机科学技术课程的教学工作,承担过多门本科生和研究生课程的教学工作,包括:算法与数据结构、程式设计语言原理、计算概论(C语言程式设计)、程式设计技术与方法、算法设计与分析、数理逻辑、理论计算机科学基础、人工智慧等 。目录前言本书作者简介第1章 程式设计和C语言 11.1程式和程式语言 11.2 C语言简介 81.3一个简单的C程式 1O1.4程式开发过程 131.5问题与程式设计 17本章讨论的重要概念 18练习 18第2章 数据对象与计算 212.1基本字元、名字表示、标识符和关键字 212.2数据与类型 232.3基本类型与数据表示 232.3.1整数类型和整数的表示 232.3.2实数类型和实数的表示 252.3.3字元类型和字元的表示 262.3.4数据的外部表示、内部表示与转换 272.4运算符、表达式与计算 3O2.4.1算术运算符 3O2.4.2算术表达式 312.4.3表达式的求值 322.4.4计算和类型 342.5数学函式馆及其使用 372.5.1函式、函式调用 372.5.2数学函式及其使用 382.5.3函式调用中的类型转换 39问题解释 40几个常用程式模式 40本章讨论的重要概念 41练习 41第3章 变数、函式和控制结构 433.1语句、複合结构 433.2变数——概念、定义和使用 443.2.1变数的定义 453.2.2变数的赋值与取值 463.2.3几个问题 483.3定义函式(初步) 503.3.1函式定义 523.3.2函式和程式 553.3.3函式与类型 563.3.4自定义输出函式 573.4关係表达式、逻辑表达式、条件表达式 583.4.1关係表达式和条件表达式 583.4.2逻辑表达式 603.5语句与控制结构 613.5.1条件语句(if语句) 623.5.2循环语句(1):while语句 653.5.3循环语句(2):for语句 683.6若干常用结构和问题 703.6.1增量和减量运算符(+;、~) 703.6.2逗号运算符 713.6.3实现二元运算符操作的赋值运算符 713.6.4空语句 723.6.5表达式和求值 73问题解释 74几个常用程式模式 74本章讨论的重要概念 75练习 75第4章 基本程式设计技术 794.1循环程式设计 794.1.1基本循环方式 8O4.1.2求一系列完全平方数 814.1.3判断素数(谓词函式) 824.1.4艰难的旅程(浮点误差) 834.1.5求立方根(叠代和逼进) 854.1.6求sin函式值(通项计算) 864.2循环程式的问题 874.2.1从循环中退出 874.2.2循环中的几种变数 894.3循环与递归 9O4.3.1阶乘和乘幂(循环,递归) 9O4.3.2 Fibonacci序列(计算与时间) 934.3.3为计算过程计时 944.3.4 Fibonacci序列的叠代计算(程式正确性与循环不变式) 954.3.5最大公约数 974.3.6河内塔(梵塔)问题 1004.4基本输入输出 1024.4.1格式输入函式scanf 1024.4.2字元输入输出函式 1094.4.3输入函式的返回值及其作用 1124.5控制结构和控制语句 1144.5.1 do-while循环结构 1144.5.2流程控制语句 1154.5.3开关语句 1174.6程式设计实例 1194.6.1一个简单计算器 1194.6.2定义枚举常量 1194.6.3单词计数问题 1204.7程式测试和排错 1234.7.1测试 1234.7.2白箱测试 1244.7.3黑箱测试 1254.7.4排除程式里的错误 126问题解释 127几个常用程式模式 128本章讨论的重要概念 128练习 128 第5章 C程式结构 1335.1数值类型 1335.1.1实数类型和整数类型 1335.1.2字元类型 1335.1.3整数类型 1345.1.4基本数据类型的选择 1355.2函式和标準库函式 1365.2.1C语言的库函式 1375.2.2字元分类函式 1375.2.3随机数生成函式 1385.3函式定义和程式的函式分解 l395.3.1主函式 1405.3.2程式的函式分解 1415.3.3对函式的两种观点 1425.3.4函式原型 1465.4 C程式结构与变数 1495.4.1外部定义的变数 1505.4.2作用域与生存期 1515.4.3外部变数和自动变数 1515.4.4变数定义的嵌套 1535.4.5静态局部变数 1545.4.6变数的其他问题 1555.4.7一个实例 l575.5预处理 1595.5.1档案包含命令 1595.5.2宏定义与宏替换 1605.5.3条件编译命令 1635.6定义常量 1645.7字位运算符 1655.8编程实例 1685.8.1一个简单的猜数游戏 1685.8.2加密与解密 170本章讨论的重要概念 172练习 l72第6章 数组 1756.1数组的概念、定义和使用 1756.1.1定义数组变数 1766.1.2数组的使用 1776.1.3数组的初始化 1796.1.4数组的存储实现 1806.2数组程式实例 1816.2.1从字元到下标 1816.2.2筛法求素数 1826.2.3成绩分类 1836.2.4多项式求值 1846.2.5定义数组的问题 1856.3数组作为函式参数 1866.3.1一个例子 1866.3.2修改实参数组的元素 1886.4字元数组与字元串 1896.4.1字元数组 1896.4.2字元串 1896.4.3程式实例 1916.4.4标準库字元串处理函式 1936.4.5输出文本里的最长行 1946.5两维和多维数组 1986.5.1多维数组的初始化 1986.5.2多维数组的表示和使用 1996.5.3多维数组作为函式的参数 2006.6编程实例 2016.6.1成绩直方图 2016.6.2一个通用带检查的整数输入函式 2056.6.3 “计算”数组变数的大小 2066.6.4统计c程式里的关键字 2086.6.5数组的划分 2116.6.6数组的排序 213问题解释 2l5几个常用程式模式 215本章讨论的重要概念 215练习 215第7章 指针 2177.1地址与指针 2177.2指针变数的定义和使用 218 7.2.1指针操作 2187.2.2指针作为函式的参数 2197.2.3与指针有关的一些问题 2227.3指针与数组 2247.3.1指向数组元素的指针 2247.3.2基于指针运算的数组程式设计 2277.3.3数组参数与指针 2287.3.4指针与数组操作的程式实例 2297.3.5字元指针与字元数组 2317.4指针数组 2337.4.1指针数组与两维数组 2347.4.2命令行参数及其处理 2357.5多维数组作为参数的通用函式 2387.6动态存储管理 2407.6.1为什幺需要动态存储管理 24O7.6.2 c语言的动态存储管理机制 2417.6.3两个程式实例 2447.6.4函式、指针和动态存储 2477.7定义类型 2507.7.1定义数组类型和指针类型 2517.7.2複杂类型描述与解读 2527.8指向函式的指针 2547.8.1函式指针的定义和使用 2547.8.2函式指针作为函式的参数 2557.8.3数值积分函式 2577.8.4若干以函式指针为参数的数组操作实用函式 259几个常用程式模式 260本章讨论的重要概念 260练习 261第8章 档案和输入输出 2638.1档案的概念 2638.1.1流和档案指针 2638.1.2缓冲式输入输出 2648.2档案的使用 2658.2.1档案的打开和关闭 2658.2.2输入输出函式 2678.2.3程式实例 2688.2.4直接输入输出函式 2708.3标準流输入输出与格式控制 2718.3.1行式输入和输出 2718.3.2输入格式控制 2728.3.3输出格式控制 2768.3.4以字元串作为格式化输入输出对象 2788.3.5标準错误流 2788.4程式实例 2798.4.1求档案数据的平均值 2798.4.2一个背单词程式 2818.4.3资金账目系统 285练习 288第9章 结构和其他数据机制 2919.1结构(struct) 2919.1.1结构声明与变数定义 2919.1.2结构变数的初始化和使用 2969.1.3结构、数组与指针 2979.2结构与函式 2999.2.1处理结构的函式 2999.2.2程式实例 3029.3联合(union) 3069.4枚举(enum) 3089.5编程实例 3109.5.1数据组的排序 3109.5.2複数的表示和处理 3129.6连结结构(自引用结构) 3159.6.1连结结构 3159.6.2自引用结构的定义 3179.6.3程式实现 318 9.6.4数据与查找 3219.7栏位 322问题解释 323本章讨论的重要概念 323练习 323第10章 程式开发技术 32710.1分别编译和C程式的分块开发 32710.1.1分块开发的问题和方法 32710.1.2程式实例:学生成绩处理 32810.1.3分块重整 33310.1.4其他安排和考虑 33610.1.5模组化思想和技术 33810.1.6单一头档案结构和多个头档案结构 34210.2功能模组和程式库 34510.2.1複数模组 34510.2.2目标档案和库 34810.2.3防止重複包含 34910.3错误报告和处理 34910.3.1建立统一的错误报告机制 34910.3.2定义变参数的错误报告函式 35010.3.3运行中错误的检查和处理 35210.4程式的配置 35810.4.1程式的行为参数和启动时的配置 35810.4.2互动式配置 36010.4.3通过命令行参数 36110.4.4採用配置档案 36210.5程式开发过程 36210.5.1自上而下的开发 36310.5.2自下而上的开发 36510.5.3实际开发过程 365练习 367第11章 标準库 37111.1标準库结构 37111.1.1标準定义() 37211.1.2错误信息() 37211.2几个已经介绍过的头档案 37311.2.1数学函式() 37311.2.2字元处理函式() 37411.3字元串函式(string.h>) 37511.3.1一些字元串函式 37511.3.2存储区操作 37811.4功能函式() 37911.4.1几个整数函式 38011.4.2数值转换 38011.4.3执行控制 38111.4.4与执行环境互动 38111.4.5常用函式bsearch和qsort 38211.5日期和时间() 38311.6实现特徵(和) 38511.6.1整数类型特徵 38511.6.2浮点数类型特徵 38611.7其他与输入输出有关的函式() 38611.7.1符号常量和类型 38611.7.2档案操作函式 38711.7.3流缓冲区操作函式 38811.7.4档案定位及定位函式 38911.7.5其他有关函式 39011.7.6採用va—list参数的输出函式 39111.8定义变长度参数表(<stdarg.h) 39211.9非局部控制转移() 39511.10调试断言和信号处理(和) 39711.11标準库的其他功能 39811.11.1本地化 39811.11.2多位元组字元 400 本章讨论的重要概念 400练习 400附录A C语言运算符表 401附录B C语言速查 403附录C C99简介 409进一步学习的建议 413参考文献 416媒体评论书评本书以程式设计为基本线索,同时深入介绍了C语言各方面的情况 。书中强调的是如何认识程式、写程式和用C写出好的程式 。并通过实例讨论了问题的分析和分解,找出主要步骤,确定函式抽象,找出循环,选择语言结构,最后写出程式的过程 。书中不少实例给出了在不同考虑下可能形成的多种解法,以帮助读者理解程式设计的“真谛” 。