下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
读书 > 编程语言 >C/C++ > 新概念C程序设计大学教程(C99版)

新概念C程序设计大学教程(C99版)

综合评级:★★★★★

定价:39.00

作者:张基温 编著

出版社:清华大学出版社

出版日期:2015年10月

页数:333

字数:513000

ISBN:9787302394433

书籍介绍

  张基温编著的《新概念C程序设计大学教程(C99 版)》是一本以计算思维训练为核心,以能力培养为目标的C语言程序设计教材,基于“程序设计一算法思维 语言艺术 工程规范”的指导思想和“前期以培养解题思路为主,语法知识够用就行;后期以补充必要的语法细节”的原则编写。全书分为程途启步、组织数据、构建算法和语海探幽4篇。第1篇用一个例子,分3个层次,快速而轻松地将读者引入程序设计之途,同时引入算法分析与测试设计相结合的程序设计方法,为进一步学习奠定基础。第2篇通过数组、结构体和指针3种构造数据类型的应用,开阔读者程序设计的眼界。第3篇从几个经典问题人手,通过穷举、迭代、递归、计算机模拟的介绍,将读者的思维纳入科学轨道。第4篇是关于一些重要语法现象的扩展和注解,介绍一些重要语法问题的细节,使读者在发挥C语言优势方面得到提升,可以作为知识扩展的阅读材料或自学参考。

  本书结构新颖、概念准确,鱼渔并重、例题经典、习题丰富、题型全面,适应面宽、注重效果,适合教学、兼顾自学,并以C99作为蓝本,可以作为高等学校各专业的新一代程序设计课程教材,也可供从事程序设计相关领域的人员自学或参考。

相关课程
目录

第1篇 程途启步

第1单元 简单程序设计

1.1 C语言程序主框架

1.1.1 用伪代码描述的简单计算器程序算法

1.1.2 将伪代码描述的算法逐步细化为C程序

1.2 数据类型与数据形式

1.2.1 数据类型

1.2.2 程序中的数据形式及其引用方式

1.3 标识符与声明

1.3.1 标识符

1.3.2 声明

1.3.3 变量的声明与初始化

1.4 操作符

1.4.1 赋值操作符与赋值表达式

1.4.2 算术操作符与算术表达式

1.4.3 操作符的优先级与结合性

1.5 函数

1.5.1 函数及其应用过程

1.5.2 函数调用与函数返回

1.5.3 函数定义

1.5.4 局部变量

1.5.5 函数声明

1.5.6 main()函数

1.5.7 函数库、头文件与文件包含命令

1.6 格式化输入/输出函数

1.6.1 printf()函数的基本用法

1.6.2 scanf()的基本用法

1.7 C程序的编译与执行

1.7.1 C语言程序的编译与连接

1.7.2 程序中的错误和异常

1.7.3 程序测试

1.7.4 设计用户友好的程序

习题1

第2单元 选择程序设计

2.1 可选择计算类型的计算器程序算法分析

2.1.1 主函数的算法分析

2.1.2 计算函数calculate()的算法分析

2.1.3 判等操作符与关系操作符

2.2 if-else型选择结构

2.2.1 用if-else结构实现的calculate()函数

2.2.2 if-else结构的应用特点

2.2.3 良好的程序书写风格

2.3 选择结构的程序测试

2.3.1 白箱测试法

2.3.2 等价分类法

2.4 字符类型

2.4.1 ASCII码

2.4.2 char类型的基本特点

2.4.3 转义字符

2.4.4 字符的输入/输出

2.5 浮点类型

2.5.1 浮点类型取值范围与表数精度

2.5.2 浮点类型变量和字面量

2.5.3 浮点类型数据的操作

2.6 switch型选择结构

2.6.1 基于整数值匹配的选择结构——switch结构

2.6.2 一个字符分类程序

2.6.3 用switch结构实现的calculate()函数

2.6.4 switch结构与if-else结构的比较

习题2

第3单元 重复程序设计

3.1 可连续计算的计算器程序的算法分析

3.1.1 主函数初步算法

3.1.2 主函数算法细化

3.1.3 重复结构的C语言实现途径

3.2 while结构

3.2.1 while结构的基本机理

3.2.2 使用while结构的可连续计算的计算器主函数

3.2.3 逗号操作符

3.3 do-while结构

3.3.1 do-while结构的基本机理

3.3.2 使用do-while结构的可连续计算的计算器程序主函数

3.4 for结构

3.4.1 for结构的基本机理

3.4.2 使用for结构的可连续计算的计算器程序主函数

3.4.3 计数型重复结构

3.4.4 复合赋值操作符与增值、减值操作符

3.5 重复结构的程序测试

3.5.1 基于路径覆盖的重复结构测试

3.5.2 边值分析法与重复结构测试

3.5.3 基于因果分析的程序测试

3.6 在重复体内控制重复过程

3.6.1 跳出当前层控制结构语句break

3.6.2 提前结束当前重复体语句continue

3.6.3 实例:求素数

习题3

第2篇 组织数据

第4单元 同类型数据的聚合类型:数组

4.1 一维数组

4.1.1 数组的特点

4.1.2 数组的定义

4.1.3 数组初始化

4.1.4 访问下标变量

4.2 二维数组

4.2.1 二维数组的概念

4.2.2 二维数组的初始化

4.2.3 访问二维数组元素

4.3 字符串

4.3.1 字符串字面量

4.3.2 字符串变量

4.3.3 字符串的输入/输出

4.3.4 字符串操作库函数

习题4

第5单元 描述一类对象属性的聚合类型:结构体和共用体

5.1 结构体类型与结构体变量

5.1.1 结构体类型及其定制

5.1.2 结构体变量的声明与初始化

5.1.3 结构体变量及其分量的应用

5.2 用结构体数组存储一组学生信息

5.2.1 结构体数组的定义与初始化

5.2.2 结构体数组元素的访问

5.3 共用体类型

5.3.1 共用体类型的定制与共用体变量的定义

5.3.2 共用体类型与结构体类型的比较

5.3.3 共用体变量的应用

习题5

第6单元 指针

6.1 指针类型与指针变量

6.1.1 指针=基类型 地址

6.1.2 同类型指针间的赋值与判等操作

6.1.3 指针的递引用

6.1.4 悬空指针、空指针与void指针

习题6.1

6.2 数组的指针形式

6.2.1 数组名与指向数组元素的指针

6.2.2 指向数组元素指针的加减运算

6.2.2 指针与字符串

6.2.3 二维数组与指针

习题6.2

6.3 指向结构体变量的指针与链表

6.3.1 指向结构体类型变量的指针

6.3.2 链表及其特点

6.3.3 构建链表

习题6.3

6.4 动态存储分配

6.4.1 申请需要的存储空间

6.4.2 释放一个指针指向的存储空间

6.4.3 修改一个指针指向的存储空间大小

6.4.4 构建动态链表

习题6.4

第3篇 构建算法

第7单元 基础算法

7.1 穷举

7.1.1 搬砖问题

7.1.2 推断名次

习题7.1

7.2 迭代与递推

7.2.1 用二分迭代法求方程在指定区间的根

7.2.2 猴子吃桃子

7.2.3 用辗转相除法求两个正整数的*大公因子

习题7.2

7.3 递归

7.3.1 阶乘的递归计算

7.3.2 汉诺塔

习题7.3

第8单元 计算机模拟

8.1 随机问题模拟

8.1.1 产品随机抽样

8.1.2 用蒙特卡洛法求π的近似值

习题8.1

8.2 基于步长的模拟

8.2.1 事件步长法——中子扩散问题

8.2.2 时间步长法——盐水池问题

习题8.2

第9单元 数据处理

9.1 排序

9.1.1 直接选择排序

9.1.2 冒泡排序

习题9.1

9.2 查找

9.2.1 穷举查找

9.2.2 二分查找

习题9.2

第4篇 语海探幽

第10单元 算术数据类型及其转换

10.1 C数据类型概览

10.2 整数类型

10.2.1 有符号整数类型与无符号整数类型

10.2.2 标准整数类型与扩展整数类型

10.2.3 整数类型的极值宏

10.2.4 char类型

10.2.5 枚举

10.2.6 _Bool类型

10.3 浮点类型

10.3.1 浮点类型的值特性

10.3.2 浮点数据的舍入模式

10.3.3 浮点数据的求值特性

10.3.4 IEEE754标准

10.3.5 关于浮点数的判等操作

10.3.6 _Complex类型和_Imaginary类型

10.4 数据类型转换

10.4.1 普通算术转换——提升拉齐规则

10.4.2 传送转换——与目的类型一致原则

10.4.3 数据的显式类型转换规则

10.4.4 数据类型转换注意事项

习题10

第11单元 C语言中的常量

11.1 字面量

11.1.1 整数字面量的表示和辨识

11.1.2 浮点类型字面量的表示和辨识

11.1.3 复合字面量

11.2 宏

11.2.1 宏定义

11.2.2 使用宏应当注意的几点

11.2.3 带参宏定义

11.3 const类型限定符

11.3.1 用const限定变量

11.3.2 用const限定数组

11.3.3 用const限定函数参数

11.3.4 用const限定指针

11.3.5 在多文件程序中共享一个const定义

习题11

第12单元 C程序中变量的访问属性

12.1 变量访问属性的概念

12.1.1 变量的存储类型与生存期

12.1.2 标识符的作用域

12.1.3 标识符的链接属性

12.2 C语言程序实体的存储类型

12.2.1 C程序中的局部变量

12.2.2 外部变量的定义与声明

12.2.3 初始化

习题12

第13单元 操作符、表达式与语句

13.1 操作符与表达式

13.1.1 算术操作符

13.1.2 逻辑表达式

13.1.3 位操作符

13.1.4 条件表达式

13.1.5 增值表达式和减值表达式

13.1.6 下标表达式与指针的加减操作

13.1.7 赋值操作

13.1.8 左值表达式

13.2 操作符的副作用与序列点

13.2.1 操作符的副作用与透明引用

13.2.2 基于序列点的副作用不叠加表达式规则

13.2.3 函数的副作用

13.3 语句

13.3.1 表达式语句、空语句和复合语句

13.3.2 控制语句

13.3.3 跳转语句

13.3.4 关于分号(;)的说明

习题13

第14单元 函数

14.1 函数参数

14.1.1 现代C语言函数参数不能空

14.1.2 C语言函数调用中的值结合

14.1.3 指针类型参数

14.2 函数定义与函数声明

14.2.1 函数定义

14.2.2 函数声明

14.3 内联函数

14.3.1 内联函数的概念

14.3.2 C99的内联函数定义

14.3.3 gcc的内联函数定义

14.3.4 内联函数的限制

习题14

第15单元 输入/输出

15.1 格式化输出函数pr

15.1.1 printf()格式参数结构

15.1.2 printf()基本格式符

15.1.3 长度修饰符

15.1.4 域宽与精度说明

15.1.5 前缀修饰符

15.2 格式化输入函数s

15.2.1 scanf()指针参数

15.2.2 scanf()格式参数结构

15.2.3 数值数据的输入控制

15.2.4 scanf()与输入缓冲区

15.2.5 字符型数据的输入控制

15.2.6 scanf()的停止与返回

15.3 C语言的文件操作

15.3.1 文件及其分类

15.3.2 FILE类型及其指针

15.3.3 C语言文件操作的一般过程

15.3.4 文件操作程序示例

习题15

附录

附录A C语言关键字

附录B C语言运算符的优先级和结合方向

附录C 编译预处理命令

C.1 宏定义

C.2 文件包含

C.3 条件编译

附录D C标准库头文件

附录E C语言常用标准库函数

E.1 数学函数

E.2 字符函数和字符串函数

E.3 输入/输出函数

E.4 动态内存分配函数

E.5 退出程序函数

E.6 数值转换函数

E.7 时间和日期函数

参考文献

前言

在信息时代,程序设计会被人称为计算机以及相关专业的必修课,在程序设计中所蕴含的逻辑,是解决所有领域复杂问题的根基,同时在程序设计课程中所进行的逻辑思维训练,对所有想开发脑力的人都可获益。可是,尽管程序设计课程已经开设了几十年,但教学效果很不尽人意。

程序设计涉及逻辑思维、语言和方法3个方面内容。然而,多数程序设计教材仅仅是语言手册的改编,难以取得满意的教学效果。为此,20世纪80年代我就开始尝试改变这种状况,于1985年出版的第一本著作——《BASIC程序设计》中,在语法体系基础上引入典型算法和软件工程内容。90年代中期受CIT考试的启发,在为NIT(国家信息技术考试)考试编写的《程序设计(C语言)》(清华大学出版社,1999年)一书中,把程序测试引入到程序设计教材中。

之后,几家出版社先后约稿,出版了《新概念C语言程序设计》(中国铁道出版社,2003)、《C语言程序设计案例教程》(清华大学出版社,2004)、《新概念C程序设计教程》(南京大学出版社,2007)、《新概念C语言教程》(中国电力出版社,2011)、《新概念C程序设计大学教程》(清华大学出版社,2012)。在几十年的摸索中,逐步形成并完善了一套全新的程序设计教材概念:

从整体教学理念上,实现从语法体系向问题体系的转变;

从内容安排上,“前期以思维训练为主,语法够用就行;后期补充语法细节”;

在具体解题思路上,按照“问题分析—设计代码—语法说明”线索组织。

让我欣慰的是,随着这几本书的不断改进,类似的书也陆续问世,品种不断增加,说明面向问题、程序设计教学的理念日益被广泛接受。

(二)

本教材是我的程序设计新概念的最新和最清晰体现。全书分为4篇,分别为程途启步、组织数据、构建算法和语海探幽。

第1篇分3个单元,分别为简单程序设计、选择程序设计和重复程序设计。3个单元贯穿一个例子,通过不断完善计算器的设计,快速而轻松地将读者引入程序设计之途,同时引入算法分析与测试设计相结合的程序设计方法,为进一步学习奠定基础。

第2篇通过数组、结构体和指针3种构造数据类型的应用,开阔读者程序设计的眼界,并奠定数据结构的基本概念。

第3篇从几个经典问题入手,通过对穷举、迭代、递归、计算机模拟的介绍,将读者的逻辑思维训练纳入科学轨道。

第4篇介绍一些重要语法问题的细节,是对于前面介绍的语法知识的扩展性总结,使读者在发挥C语言优势方面得到内涵提升。特别需要说明的是,在这一篇中介绍了人们忽略但又非常重要的副效应和序列点,使有关概念进一步提升。

这样的内容安排,可以适合不同层次的学习需求:如果只需要获得C语言程序设计的基本能力,可以只学习第1篇和第2篇;如果想获得较高水平的C语言程序设计能力,可以扩展到第3篇;对于已经具有基本的C程序设计能力者,可以从第3篇学起。

第4篇不一定作为必修内容:对于自学能力较强的学生,可以把第4篇作为自学内容;老师也可以有选择地讲授,或将有关内容穿插在前面有关部分做介绍。

(三)

为了能有的放矢地进行训练,本书以单元为单位给出习题。习题分为4个栏目:概念辨析、代码解析、探索验证和开发练习。

“概念辨析”主要提供了一些选择题和判断题,旨在提高读者对基础语法知识的认知。

“代码解析”包括了指出程序(或代码段)执行结果、改错和填空等题型,旨在提高读者的代码阅读能力。因为读程序也是程序设计的一种基本训练。

“探索验证”主要是用于提示或者指导读者如何通过自己上机验证来提高掌握语法细节的能力。除了这个栏目中的习题外,读者最好也能通过设计程序验证自己对于概念辨析栏目中的习题判断是否正确。

“开发练习”是一种综合练习,应当要求读者写出开发文档。内容主要包括问题(算法)分析、代码设计、测试用例设计、测试及调试结果分析等几个部分,重点应当放在问题分析、代码设计和测试用例的设计上。先把这些工作都做好后,再上机调试、测试,不要什么都还没有设计出来就上机。

(四)

C语言是一种高效、灵活、可移植、功能强大的程序设计语言。从20世纪70年代初创立,迄今已经历了约半个世纪还经久不衰,是程序设计语言历史上寿命最长的语言。

世界著名的TIOBE编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如Google、MSN、Yahoo!、Wikipedia、YouTube以及Baidu等)进行计算。下页图为其2014年10月份发表的排行榜图。可以看出尽管其他程序设计语言跌宕起伏,但C一直平稳地牢据榜首。非但如此,多种位于前茅的程序设计语言,如C 、Java、C#、ObjectiveC等都是以C为母体发展起来的。所以,学习程序设计从C语言开始是一种明智的选择。

2014年10月份发表的TIOBE编程语言社区排行榜

C语言是在不断发展中逐步完善的。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchie合著了著名的TheCProgrammingLanguage一书,通常简称为K&R,也有人称之为K&R标准。但是,K&R第1版在很多语言细节上不够精确。

1983年美国国家标准化协会(AmericanNationalStandardsInstitute)制定了一个C语言标准,于1983年发表,通常称之为ANSIC。此后不断修订,于1989年末提出了一个报告\\\\[ANSI89\\\\]。1990年,国际标准化组织ISO(InternationalOrganizationforStandards)通过了此项标准,将其作为ISO/IEC9899:1990国际标准,俗称C89或C90。

1995年,ISO对C90修订,形成“1995基准增补1(ISO/IEC/9899/AMD1:1995)”,俗称C89修正案1或C95。1999年通过的ISO/IEC9899:1999,ISO又对C语言标准进行了更重要的改变,俗称C99。2011年12月8号,ISO发布了新的C语言的新标准——ISO/IEC9899:2011,俗称C11。

但是,国内C程序设计教材多数还停留在C89。这种过度的落后,使得教学严重脱离应用,与世界潮流不合拍。因此,当务之急是首先过渡到C99。

目前支持C99并且简单易用的开发平台是DEVC ,它有两款,分别是OrwellDevC 和wxDevC 。

(五)

这本书的出版非我一人之力可以实现。赵忠孝、张秋菊、张展为、张展赫、姚威、史林娟、戴璐、张友明、陈觉、董兆军等参加了有关部分的编写。

特别需要说明的是,2014年春天我在网上发现了一本《品悟C——抛弃C程序设计中的谬误与恶习》,并拜读了一遍,受益匪浅。该书作者对于细节的精益求精,对于逻辑的反复推敲,对于真理的执着追求,对于错误的毫不留情,使我非常感动,并有了与作者相见,请为我的书提出意见的冲动。工夫不负有心人,终于在2014年7月联系到该书作者薛非先生,薛先生欣然同意为我审阅本书,并确实提出了许多非常中肯的意见和建议。

在本书即将出版之际,由衷地感谢以上各位为本书所做的贡献,也要感谢在本书写作过程中参考过的有关资料的作者,包括一些网络佚名作者。同时,也殷切地期待着广大读者和同仁的批评和建议。让我们共同把程序设计课程的改革做得更有实效。

 

张基温2015年8月

热门图书
推荐新闻
技术文库
论坛推荐