
编辑推荐
本书可作为高等院校计算机及理工类各专业、成人教育院校程序设计课程的教材,也可供计算机应用开发人员及相关人员自学。
作者简介
乔林,博士,清华大学计算机系副教授,美国加州大学圣迭戈分校访问学者。2001年毕业于清华大学计算机科学与技术系,获工学博士学位。主要研究兴趣有多核处理器系统结构、片上网络、物联网、MOOC课程与知识挖掘等,主持或参与国家自然科学基金、核高基、973、863项目或子项目多项。主讲:计算机程序设计基础、基于Linux的C++、操作系统等课程,出版教材多部,开设清华大学MOOC课程“基于Linux的C++”。
目录
第0章C语言概述
0.1C语言简介
0.1.1C语言简史
0.1.2C语言特点
0.2程序设计的基本概念
0.2.1程序
0.2.2程序设计与程序设计语言
0.2.3算法
0.2.4数据与数据结构
0.3简单C程序介绍
0.3.1c程序实例
0.3.2程序设计思维
0.3.3C程序结构特点
0.4程序设计的基本流程
0.4.1源文件和头文件的编辑
0.4.2源文件和头文件的编译
0.4.3目标文件的连接
0.4.4测试运行
本章小结
习题0
第l章C语言基本语法元素
1.1数据类型
1.1.1整数类型
1.1.2浮点数类型
1.1.3字符串类型
1.2量与表达式
1.2.1表达式
1.2.2变量
1.2.3文字
1.2.4常量
1.2.5赋值与初始化
1.2.6操作符与操作数
1.2.7混合运算与类型转换
1.3语句
1.3.1简单语句
1.3.2复合语句
1.3.3空语句
1.4基本输入输出函数
1.4.1格式化输出函数
1.4.2格式化输入函数
1.5程序设计风格
1.5.1注释
1.5.2命名规范
1.5.3宏与常量
1.5.4赋值语句的简写形式
1.5.5源程序排版
本章小结
习题1
第2章程序流程控制
2.1结构化程序设计基础
2.1.1基本控制结构
2.1.2顺序结构示例
2.2布尔数据
2.2.1枚举类型
2.2.2用户自定义数据类型
2.2.3关系表达式
2.2.4逻辑表达式
2.2.5逻辑表达式的求值
2.3if分支结构
2.3.1简单if语句
2.3.2if—else语句
2.3.3if—elseif—else语句
2.4switch分支结构
2.4.1switch语句
2.4.2分支结构的嵌套
2.5while循环结构
2.5.1while语句
2.5.2循环控制
2.6for循环结构
2.6.1递增递减表达式
2.6.2for语句
2.6.3for与while的比较
2.6.4循环嵌套
2.7问题求解与结构化程序设计
2.7.1问题规模与程序结构化
2.7.2程序框架结构
2.7.3程序范型
2.7.4自顶向下逐步求精
本章小结
习题2
第3章函数
3.1函数声明与调用
3.1.1函数调用
3.1.2函数原型
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程序测试
3.5.2程序效率与代码优化
本章小结
习题3
第4章算法
4.1算法概念与特征
4.1.1算法基本概念
4.1.2算法基本特征
4.2算法描述
4.2.1伪代码
4.2.2流程图
4.3算法设计与实现
4.3.1素性判定问题
4.3.2最大公约数问题
4.4递归算法
4.4.1递归问题的引入
4.4.2典型递归函数实例
4.4.3递归函数调用的栈帧
4.4.4递归信任
4.5容错
4.5.1数据有效性检查
4.5.2程序流程的提前终止
4.5.3断言与不变量
4.6算法复杂度
4.6.1引入复杂度的意义与目的
4.6.2大O表达式
4.6.3复杂度估计
本章小结
习题4
第5章程序组织与软件工程
5.1库与接口
5.1.1库与程序文件
5.1.2标准库
5.1.3头文件的包含策略
5.2随机数库
5.2.1随机数生成
5.2.2接口设计原则
5.2.3随机数库接口
5.2.4随机数库实现
5.2.5库测试
5.3作用域与生存期
5.3.1量的作用域与可见性
5.3.2量的存储类与生存期
5.3.3函数的作用域与生存期
5.3.4声明与定义
5.4宏
5.4.1宏替换
5.4.2含参宏
5.4.3含参宏与函数的差异
5.4.4宏的特殊用法
5.5条件编译
5.5.1#ifndef与#ifdef命令
5.5.2#if命令
5.6典型软件开发流程
5.6.1软件工程概要
5.6.2需求分析
5.6.3概要设计
5.6.4详细设计
5.6.5编码实现
5.6.6系统测试
5.6.7经验总结
本章小结
习题5
第6章复合数据类型
6.1字符
6.1.1字符类型、文字与量
6.1.2字符量的数学运算
6.1.3标准字符特征库
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.3.3数组元素的访问
6.3.4数组与函数
6.3.5多维数组
6.4结构体
6.4.1结构体的意义与性质
6.4.2结构体的存储表示
6.4.3结构体数据对象的访问
6.4.4结构体与函数
6.5数据集
6.5.1查找
6.5.2排序
本章小结
习题6
第7章指针
7.1指针数据类型
7.1.1数据对象的地址与值
7.1.2指针的定义与使用
7.1.3指针的意义与作用
7.2指针与函数
7.2.1数据交换函数
7.2.2常量指针与指针常量
7.2.3指针与函数返回值
7.3指针与复合数据类型
7.3.1指针与数组
7.3.2指针与结构体
7.4再论字符串
7.4.1字符串的表示
7.4.2字符数组与字符指针的差异
7.4.3标准字符串库
7.5动态存储管理
7.5.1内存分配
7.5.2标准库的动态存储管理函数
7.5.3zylib库的动态存储管理宏
7.5.4关于动态存储管理若干注意事项的说明
7.5.5动态数组
本章小结
习题7
第8章文件与数据存储
8.1文件的基本概念
8.1.1什么是文件
8.1.2文件类型
8.1.3文件指针
8.2文件的基本操作
8.2.1文件打开操作
8.2.2文件关闭操作
8.2.3文件结束检测操作
8.2.4文件错误检测操作
8.2.5文件缓冲区与流刷新操作
8.2.6文件位置指针定位操作
8.2.7文件位置指针查询操作
8.2.8文件位置指针重定位操作
8.3文件的读写
8.3.1面向字符的文件读写操作
8.3.2面向文本行的文件读写操作
8.3.3面向格式化输入输出的文件读写操作
8.3.4面向数据块的文件读写操作
8.4数据存储
8.4.1什么是数据持久化
8.4.2动态数组的持久化
8.4.3应用程序的数据持久化
策略
本章小结
习题8
第9章程序抽象
9.1数据抽象
9.1.1数据抽象的目的与意义
9.1.2结构化数据的性质
9.1.3数据封装
9.1.4信息隐藏
9.1.5抽象数据类型
9.2链表
9.2.1数据的链式表示
9.2.2链表构造与销毁
9.2.3结点追加与插入
9.2.4结点删除
9.2.5链表遍历
9.2.6数据查找
9.2.7总结与思考
9.3函数指针
9.3.1函数指针的目的与意义
9.3.2函数指针的定义
9.3.3函数指针的使用
9.3.4函数指针类型
9.4抽象链表
9.4.1回调函数
9.4.2回调函数参数
9.4.3数据对象的存储与删除
本章小结
习题9
参考文献与深入读物
文摘
版权页:
插图:
Add函数需要两个形式参数x、y,函数返回值为整型。在实际调用Add函数时,主调函数必须相应传递两个整型的实际参数给它。由Add函数的名称可知,若程序员确实采用了名实相符的命名规则,则Add函数应该将传递过来的实际参数值相加,并将结果保存在返回值数据对象中。Add函数调用完毕后,主涧函数就可以使用该返回值参与后续运算。在实现Add函数,即编写Add函数所对应的实际计算代码时,Add函数应与上述原型定义完全一致。
如果函数没有返回值,使用void类型表示程序员不关心其返回值,例如Swap函数与Evaluate函数。void为C语言提供的特殊数据类型,笔者将其称为哑类型(简称哑型),它表示该数据类型未知或不存在这样的数据对象。
C语言是一遍编译语言,因此它在调用某个函数前必须看到该函数的声明或定义,否则就不知道被调函数的入口地址。对于标准库函数,因为其声明或原型总是位于头文件中,所以使用标准库的函数时必须包含对应的头文件。
为什么需要函数原型(函数声明)呢?对于程序员,尤其是编写函数库的程序员而言,需要将函数的具体使用方法告诉使用者和编译器,使用者看到函数原型就知道该函数应如何使用,编译器看到函数原型就知道程序员对该函数的调用有没有问题。
本书可作为高等院校计算机及理工类各专业、成人教育院校程序设计课程的教材,也可供计算机应用开发人员及相关人员自学。
作者简介
乔林,博士,清华大学计算机系副教授,美国加州大学圣迭戈分校访问学者。2001年毕业于清华大学计算机科学与技术系,获工学博士学位。主要研究兴趣有多核处理器系统结构、片上网络、物联网、MOOC课程与知识挖掘等,主持或参与国家自然科学基金、核高基、973、863项目或子项目多项。主讲:计算机程序设计基础、基于Linux的C++、操作系统等课程,出版教材多部,开设清华大学MOOC课程“基于Linux的C++”。
目录
第0章C语言概述
0.1C语言简介
0.1.1C语言简史
0.1.2C语言特点
0.2程序设计的基本概念
0.2.1程序
0.2.2程序设计与程序设计语言
0.2.3算法
0.2.4数据与数据结构
0.3简单C程序介绍
0.3.1c程序实例
0.3.2程序设计思维
0.3.3C程序结构特点
0.4程序设计的基本流程
0.4.1源文件和头文件的编辑
0.4.2源文件和头文件的编译
0.4.3目标文件的连接
0.4.4测试运行
本章小结
习题0
第l章C语言基本语法元素
1.1数据类型
1.1.1整数类型
1.1.2浮点数类型
1.1.3字符串类型
1.2量与表达式
1.2.1表达式
1.2.2变量
1.2.3文字
1.2.4常量
1.2.5赋值与初始化
1.2.6操作符与操作数
1.2.7混合运算与类型转换
1.3语句
1.3.1简单语句
1.3.2复合语句
1.3.3空语句
1.4基本输入输出函数
1.4.1格式化输出函数
1.4.2格式化输入函数
1.5程序设计风格
1.5.1注释
1.5.2命名规范
1.5.3宏与常量
1.5.4赋值语句的简写形式
1.5.5源程序排版
本章小结
习题1
第2章程序流程控制
2.1结构化程序设计基础
2.1.1基本控制结构
2.1.2顺序结构示例
2.2布尔数据
2.2.1枚举类型
2.2.2用户自定义数据类型
2.2.3关系表达式
2.2.4逻辑表达式
2.2.5逻辑表达式的求值
2.3if分支结构
2.3.1简单if语句
2.3.2if—else语句
2.3.3if—elseif—else语句
2.4switch分支结构
2.4.1switch语句
2.4.2分支结构的嵌套
2.5while循环结构
2.5.1while语句
2.5.2循环控制
2.6for循环结构
2.6.1递增递减表达式
2.6.2for语句
2.6.3for与while的比较
2.6.4循环嵌套
2.7问题求解与结构化程序设计
2.7.1问题规模与程序结构化
2.7.2程序框架结构
2.7.3程序范型
2.7.4自顶向下逐步求精
本章小结
习题2
第3章函数
3.1函数声明与调用
3.1.1函数调用
3.1.2函数原型
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程序测试
3.5.2程序效率与代码优化
本章小结
习题3
第4章算法
4.1算法概念与特征
4.1.1算法基本概念
4.1.2算法基本特征
4.2算法描述
4.2.1伪代码
4.2.2流程图
4.3算法设计与实现
4.3.1素性判定问题
4.3.2最大公约数问题
4.4递归算法
4.4.1递归问题的引入
4.4.2典型递归函数实例
4.4.3递归函数调用的栈帧
4.4.4递归信任
4.5容错
4.5.1数据有效性检查
4.5.2程序流程的提前终止
4.5.3断言与不变量
4.6算法复杂度
4.6.1引入复杂度的意义与目的
4.6.2大O表达式
4.6.3复杂度估计
本章小结
习题4
第5章程序组织与软件工程
5.1库与接口
5.1.1库与程序文件
5.1.2标准库
5.1.3头文件的包含策略
5.2随机数库
5.2.1随机数生成
5.2.2接口设计原则
5.2.3随机数库接口
5.2.4随机数库实现
5.2.5库测试
5.3作用域与生存期
5.3.1量的作用域与可见性
5.3.2量的存储类与生存期
5.3.3函数的作用域与生存期
5.3.4声明与定义
5.4宏
5.4.1宏替换
5.4.2含参宏
5.4.3含参宏与函数的差异
5.4.4宏的特殊用法
5.5条件编译
5.5.1#ifndef与#ifdef命令
5.5.2#if命令
5.6典型软件开发流程
5.6.1软件工程概要
5.6.2需求分析
5.6.3概要设计
5.6.4详细设计
5.6.5编码实现
5.6.6系统测试
5.6.7经验总结
本章小结
习题5
第6章复合数据类型
6.1字符
6.1.1字符类型、文字与量
6.1.2字符量的数学运算
6.1.3标准字符特征库
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.3.3数组元素的访问
6.3.4数组与函数
6.3.5多维数组
6.4结构体
6.4.1结构体的意义与性质
6.4.2结构体的存储表示
6.4.3结构体数据对象的访问
6.4.4结构体与函数
6.5数据集
6.5.1查找
6.5.2排序
本章小结
习题6
第7章指针
7.1指针数据类型
7.1.1数据对象的地址与值
7.1.2指针的定义与使用
7.1.3指针的意义与作用
7.2指针与函数
7.2.1数据交换函数
7.2.2常量指针与指针常量
7.2.3指针与函数返回值
7.3指针与复合数据类型
7.3.1指针与数组
7.3.2指针与结构体
7.4再论字符串
7.4.1字符串的表示
7.4.2字符数组与字符指针的差异
7.4.3标准字符串库
7.5动态存储管理
7.5.1内存分配
7.5.2标准库的动态存储管理函数
7.5.3zylib库的动态存储管理宏
7.5.4关于动态存储管理若干注意事项的说明
7.5.5动态数组
本章小结
习题7
第8章文件与数据存储
8.1文件的基本概念
8.1.1什么是文件
8.1.2文件类型
8.1.3文件指针
8.2文件的基本操作
8.2.1文件打开操作
8.2.2文件关闭操作
8.2.3文件结束检测操作
8.2.4文件错误检测操作
8.2.5文件缓冲区与流刷新操作
8.2.6文件位置指针定位操作
8.2.7文件位置指针查询操作
8.2.8文件位置指针重定位操作
8.3文件的读写
8.3.1面向字符的文件读写操作
8.3.2面向文本行的文件读写操作
8.3.3面向格式化输入输出的文件读写操作
8.3.4面向数据块的文件读写操作
8.4数据存储
8.4.1什么是数据持久化
8.4.2动态数组的持久化
8.4.3应用程序的数据持久化
策略
本章小结
习题8
第9章程序抽象
9.1数据抽象
9.1.1数据抽象的目的与意义
9.1.2结构化数据的性质
9.1.3数据封装
9.1.4信息隐藏
9.1.5抽象数据类型
9.2链表
9.2.1数据的链式表示
9.2.2链表构造与销毁
9.2.3结点追加与插入
9.2.4结点删除
9.2.5链表遍历
9.2.6数据查找
9.2.7总结与思考
9.3函数指针
9.3.1函数指针的目的与意义
9.3.2函数指针的定义
9.3.3函数指针的使用
9.3.4函数指针类型
9.4抽象链表
9.4.1回调函数
9.4.2回调函数参数
9.4.3数据对象的存储与删除
本章小结
习题9
参考文献与深入读物
文摘
版权页:
插图:
Add函数需要两个形式参数x、y,函数返回值为整型。在实际调用Add函数时,主调函数必须相应传递两个整型的实际参数给它。由Add函数的名称可知,若程序员确实采用了名实相符的命名规则,则Add函数应该将传递过来的实际参数值相加,并将结果保存在返回值数据对象中。Add函数调用完毕后,主涧函数就可以使用该返回值参与后续运算。在实现Add函数,即编写Add函数所对应的实际计算代码时,Add函数应与上述原型定义完全一致。
如果函数没有返回值,使用void类型表示程序员不关心其返回值,例如Swap函数与Evaluate函数。void为C语言提供的特殊数据类型,笔者将其称为哑类型(简称哑型),它表示该数据类型未知或不存在这样的数据对象。
C语言是一遍编译语言,因此它在调用某个函数前必须看到该函数的声明或定义,否则就不知道被调函数的入口地址。对于标准库函数,因为其声明或原型总是位于头文件中,所以使用标准库的函数时必须包含对应的头文件。
为什么需要函数原型(函数声明)呢?对于程序员,尤其是编写函数库的程序员而言,需要将函数的具体使用方法告诉使用者和编译器,使用者看到函数原型就知道该函数应如何使用,编译器看到函数原型就知道程序员对该函数的调用有没有问题。
ISBN | 9787040477665 |
---|---|
出版社 | 高等教育出版社 |
作者 | 乔林 |
尺寸 | 16 |