本书共9章,内容依次包括:C语言程序基本结构,函数,指针和数组,顺序表,结构,字符串,文件,链表,二维数组和指针。本书可以作为普通高校计算机、信息技术相关专业和理工科“C语言程序设计”课程的教材,也可以作为从事计算机工程与应用的科技工作者的参考书,还可以作为计算机程序设计爱好者的教材。
在提倡全民编程的时代,作为教师,经常被问及三个问题:一是学习编程必须学习哪些内容;二是学习编程有什么更有效的方法;三是学习编程有什么更深刻的意义。
1
什么是程序?专业上有一个关于程序本质的经典概括:算法+数据结构=程序。算法是问题求解的有限步骤,数据结构是算法实现的工具,因此学习编程必须学习数据结构:工欲善其事,必先利其器。
编程需要编程语言,C++语言不仅是应用广泛的系统编程语言,而且包含着常用数据结构的标准化即标准模板库,现在的很多编程语言,例如Java和Python,都是在这个基础上开发出来的。因此,学习编程必须学习C++语言。
C++语言是在C语言的基础上直接发展而来的。用李未院士的“三个语言环境”理论来讲,C++是对象语言,C是解释C++的元语言,C对C++的解释性关系是模型语言,数据结构是这种解释性关系的一种理想模本,三者密不可分。因此,学习编程必须学习C语言。
如上所述,学习编程,必须把C、C++和数据结构作为一个有机的整体来学习。于是,第二个问题可以落实为:学习C、C++和数据结构有什么更有效的方法?
2
练习书法先要临摹字帖,学习写作先要阅读经典。C++创始人本贾尼说,学习编程.如同学习写作,先要模仿经典程序。
什么是经典程序?对C、C++和数据结构这个整体来说,C++标准模板库就是经典程序,因为它是常用数据结构的标准化。
但是在很多人看来,C++标准模板库高不可攀。于是,本书把第二个问题又进一步落实到如何搭建阶梯,使每一个学习编程的人都可以轻松地拾级而上,模仿标准模板库的常用代码。这个阶梯是一个程序序列,它从一个简单程序开始,每一个程序都是在前一个程序的基础上稍加改进而成。它将学习模式从传统的概念引领改为程序引领,概念不再是机械的灌输而是实践的概括。
这个程序序列在C语言部分是如何搭建的呢?这要从类型讲起。C语言和C++语言一样,都是基于类型的编程语言。类型有两类,一类是简单类型,另一类是复合类型。简单类型是独立的类型,主要有整型、实型和字符型。这些类型的差别主要是输入、输出格式符的差别,这种差别使得对一种类型的学习,很容易转换到对另一种类型的学习。因此,本书以整型为主,从一个整数的按位逆置输出程序开始,通过功能的不断扩展,形成一种程序序列,贯穿第1章C语言程序基本结构和第2章函数。
王立柱,天津师范大学教授,湖北工业大学特聘教授,教育部一微软精品课主持人,主编多本国家级规划教材。先后获得天津市教学成果二等奖,湖北省教学成果一等奖。
第1章 C语言程序基本结构
1.1 第一个C语言程序
1.1.1 编程基本过程
1.1.2 集成开发环境
1.1.3 字面常量、左值和右值
1.1.4 表达式
1.1.5 对象的地址
1.2 循环结构
1.2.1 while语句
1.2.2 for语句
1.3 标准输入函数
1.4 分而治之
1.5 选择结构(if-else语句)
1.6 关系运算和逻辑运算
1.7 条件表达式和复合赋值表达式
1.8 输入验证
1.8.1 break和continue语句
1.8.2 前哨(sentinels)
练习
第2章 函数
2.1 函数的定义和调用
2.2 函数声明
2.3 自设头文件
2.4 应用函数设计举例
2.4.1 阶乘
2.4.2 质数
2.4.3 最大公约数
2.4.4 斐波那契数列
2.4.5 耵的近似值
2.5 函数与对象的存储类别
2.5.1 局部变量
2.5.2 静态局部变量
2.5.3 外部变量
2.5.4 寄存器变量
练习
第3章 指针和数组
3.1 揩针和地址传递
3.1.1 地址和指针
3.1.2 两种参数传递
3.1.3 对象值交换
3.2 数组和线性表
3.3 指针和数组
3.3.1 指针和数组的统
3.3.2 数组求和
3.3.3 数组逆置
3.4 const限定符
3.5 数组应用
3.5.1 最大元素
3.5.2 选择排序
3.5.3 顺序搜索和二分搜索
3.5.4 平均值
3.6 类型转换
3.7 动态空间
3.7.1 动态数组
3.7.2 动态分配函数与对象
3.7.3 最近平均值
3.8 指针与索引
3.9 函数指针
练习
第4章 顺序表
4.1 数组求和分析
4.2 动态数组应用
4.3 结构初步
4.4 typedef名字
4.5 准构造和准析构
4.6 尾插
4.7 读取
4.8 求和
4.9 删除
4.10 基本函数补充
4.11 参数合法性检验
4.12 顺序表头文件
4.13 顺序表的意义
练习
第5章 结构、联合、枚举
5.1 结构
5.1.1 结构与对象
5.1.2 结构Date
5.1.3 结构与数组
5.2 联合
5.3 枚举常量和switch-case语句
练习
第6章 字符串
6.1 字符型
6.2 字符串特点
6.3 字符串基本操作
6.3.1 字符串输入输出
6.3.2 字符串求长
6.3.3 字符串复制
6.3.4 字符串连接
6.3.5 字符串大小写
6.3.6 字符串比较
6.3.7 字符查找
6.3.8 字符串匹配
6.4 设计字符串基本操作
6.4.1 设计字符串输入和输出函数
6.4.2 设计字符串求长函数
6.4.3 设计字符串复制函数
6.4.4 设计字符串连接函数
6.4.5 设计字符串大小写函数
6.4.6 设计字符串比较函数
6.4.7 设计字符查找函数
6.5 函数返回指针
练习
第7章 文件
7.1 文件指针
7.2 文件打开与关闭
7.3 文件的读写
7.3.1 字符的读写
7.3.2 字符串的读写
7.3.3 格式读写
7.3.4 无格式读写
练习
第8章 链表
8.1 链表设计
8.1.1 链表结点
8.1.2 链表
8.1.3 链表插入
8.1.4 链袁删除
8.1.5 链表逆置
8.2 链表声明与实现
8.3 Josephus问题
练习
第9章 二维数组和指针
9.1 二维数组
9.1.1 二维数组定义
9.1.2 二维数组初始化
9.1.3 二维数组和指针
9.2 二维数组和一维数组
9.2.1 二维数组作为一维数组
9.2.2 马鞍点
9.2.3 -维数组作为二维数组
9.3 指针数组和二级指针
9.4 二级指针和二维数组
练习
附录A 命名规则
附录B 基本类型
附录C 编译预处理
参考文献