C语言程序设计
书 号:9787113199302
丛 书 名:教育部大学计算机课程改革规划教材
作 者:王全民 郑爽
译 者:
开 本:16开
装 帧:平装
正文语种:
出 版 社:中国铁道出版社有限公司
定 价:41元
-
内容简介
"本书是国家级教改立项研究项目《以计算思维能力培养为核心的理工类专业大学
计算机课程改革研究》成果之一。
本书试图以培养学生计算思维能力为目标,从解决实际问题的角度出发,由导例引出知识点,强化程序设计求解问题的思路和方法。全书共分为8章,第1章阐述了程序设计和计算思维的关系;第2章~第7章主要阐述C语言程序设计的基础知识和数据结构的初步内容;第8章列举了综合性较强的案例,相应源代码可到中国铁道出版社官方网站下载。本书除第1章和第8章外,每章的后面给出了大量的习题,并对其进行难易程度区分,便于考查学习效果。
本书适合作为高等学校非计算机专业的教材,也可作为计算机专业以及编程爱好者的参考用书。 -
前言
伴随大学计算机基础教育教学改革的继续深化,高校计算机基础教育正在进入一
个新的阶段,面临新的挑战,需要新的突破。为贯彻落实《教育部关于全面提高高等
教育质量的若干意见》精神,着力提升大学生信息素养和应用能力,推动以大学生计
算思维能力培养为重点的大学计算机课程改革,经教育部高等教育司同意,2012 年教
育部高等学校计算机基础课程教学指导委员会与文科计算机基础教学指导委员会决定
启动 “大学计算机课程改革”项目,拉开了新一轮大学计算机教育教学改革的序幕。
大学计算机教育是在不断改革中发展的,新一轮大学计算机基础教育有了重大突破和
发展,其中最重要的突破和发展是在大学计算机基础教育以能力培养为核心的特征中,
能力内涵发生了重大变化和发展,超越了大学计算机教育仅解决计算机领域问题的局
限,使大学计算机教育的功能发生了重大变化,开创了运用源于计算机的思维与行为
方式解决各类专业或社会生活问题的新功能,并提升到人类普适性能力层面。
大学计算机基础教育已经取得了以“面向应用、需求导向、能力核心、分类指导”
的基本经验和规律。本书按照以上经验和规律,明确把 C 语言程序设计学习过程和计
算思维的训练环节融合一起,在训练技能的过程中,融入计算思维能力的培养,注重
追求教学活动过程中的有效性与效率,以计算思维为切入点,以能力培养为导向,促
进具有创新意识的应用型人才的培养。通过本书的学习,可使学生了解 C 语言程序设
计对人们生活、工作、学习方式的影响和对经济社会发展所做出的贡献;了解计算机
学科与自然科学、工程技术、人文社科等相互渗透、交叉融合,促进各学科的发展;
理解和掌握程序设计的基础知识和基本方法,掌握基本的程序设计的应用能力,掌握
利用 C 语言程序设计解决专业领域问题的思路和方法。
本书的主要特点:
(1)以培养大学生信息素养和应用能力为目标,遵循“程序 = 算法 + 数据结构”
的理念,在内容安排上与同类教材有所不同。在内容上增加了算法初步,让学生对程
序设计中的常用算法有初步的了解,以便日后深入学习;按照数据结构的构成来组织
相关章节,在保持传统的数据组织方式的基础上,在内容上增加了栈、队列、二叉树、
数据库等数据组织方法,丰富了数据处理的结构,知识点更系统;让学生能更好地理
解程序的内涵和特征。
(2)以“问题—思路(问题求解)—算法(模型)—代码—调试—修改—实现”
为主线,由导例引出问题,通过“问题描述、问题分析、算法描述、程序实现、运行结果、
程序分析”6 个步骤解决问题,从而引出相关的知识点与技能点,进而引导学生掌握
程序设计的基本方法。通过大量的导例学习,一方面学生较容易掌握程序设计的基本
2
方法;另一方面,由于重复性的训练符合思维能力的培养过程,必然会影响学生的思
维方式,提升其思维能力。
(3)以培养学生计算思维能力为切入点,把计算思维这根线贯穿在教材编写的各
个环节中。在教材中处处体现方法、思路是解决问题的灵魂,强调解决问题的方法、思路,
关注知识点的学习,强化编程技能的训练,将 C 语言程序设计学习过程和计算思维的
训练环节结合起来,在问题求解、编程训练、教学实践的各个环节融入计算思维能力
的培养。
(4)以导例为主线 , 通过导例引出知识点 , 通过问题的解决对知识点进行深入的
学习。全书导例的编排由浅入深,每章最后一节设置综合案例,以培养学生分析和解
决综合问题的思路和方法,以及程序设计的综合能力。在每章的最后按照“难、中、易”
对习题进行了分类标注,以适合于不同学生按需之用。
(5)结合程序设计的应用领域,编写了对应的综合案例,学生可以根据所在专业
选择相近的案例进行学习。通过综合案例了解程序设计如何解决专业领域问题,潜移
默化地引导学生以计算思维学习和解决专业问题。
本书适合作为大学非计算机专业的程序设计基础课程教材 , 建议授课学时 36~48
学时。通过本书的学习 , 希望可以达到以下 3 个培养目标:
(1)掌握程序设计的基本概念,熟悉 C 语言编程的基本方法,具备利用C语言
编程的能力。
(2)具备应用 C 语言程序设计解决专业问题的初步能力;
(3)提升学生的思维能力,特别是利用计算思维解决专业领域问题的能力以及处
理其他问题的能力。
本书由王全民、郑爽任主编 , 高林教授审阅。其中,第 1 章由王全民编写 , 第 2 章
由崔玲和郑小静编写 , 第3章、第7章由郑爽编写、第 4 章由李秀荣编写,第 5 章由
杜春涛、付瑞平编写,第 6 章由朱立平编写,第 8 章由崔玲、郑爽、李秀荣等编写。
此外,本书的编写也得到了蒋海华、刘宇明、吴丽影、张程、雷佳伟、吴有仙等的大
力支持。
本书在内容的组织、导例的选取、编程的步骤、知识点的讲授方法,以及习题难
易程度的编排都进行了认真的思考,找到了解决计算思维从学术研究“落地”到教学
过程中这一操作定义层面上的关键问题的可行方法,力求将 C 语言程序设计课程建设
成为支撑提升学生计算思维能力的一个有效环节。
本书中的主要内容、知识点和相应的思维要素如表 1~ 表 7 所示。
表1 “C语言程序设计基础”部分
课 程 单 元 知 识 点 技 能 点 思维要素 案 例
C 程序的基本结构
(1)C 程序的基本
结构 ;
(2)C 程序的基本
特点
(1)数据的输出;
(2)数据的输入
抽象
(1)输入生日并显示;
(2)比大小
3
续表
课 程 单 元 知 识 点 技 能 点 思维要素 案 例
运行 C 程序
的基本过程
相关概念、运行
C 程序的基本过程
一个C 程序的
编辑、编译、调试、
连接、执行过程
自动化转化
利用 Visual C++ 6.0 集成开发环
境运行一个 C 程序
C语言的基本
数据类型
基本数据类型
基本数据类型
的应用
抽象 汇率换算
标识符与关键
字、常量与变量
标识符与关键
字、常量与变量
的应用
抽象 字符加密
运算符与表达式
运算符与表达
式的应用
逻辑转化 考核通过了吗
基本的输入/
输出
基本的输入/输
出
基本的输入/
输出语句的应用
共享
顺序控制语句
赋值语句、函数
调用语句
逻辑自动化 计算圆的周长和面积
分支控制语句
if...else、else if
语句、switch 语句
if...else、switch
语句、else If 语句
的应用
逻辑自动化
(1)今年是闰年吗;
(2)求解一元二次方程;
(3)计算存款利息
循环控制语句
while 语 句、
do...while 语 句 和 for
语句
while 语 句、
do...while 语 句 和
for 语句的应用
逻辑自动化
(1)计算 n!;
(2)求解两个数的最大公约数;
(3)计算 π 的近似值
综合应用
分支语句、循
环语句的嵌套使
用;良好的程序
编写规范,调试
程序的基本技巧
逻辑规划,
关键点分离、
分解
(1)可以构成三角形吗;
(2)列出小于 n 的全部质数;
(3)诚实族和说谎族;
(4)制作电子月历
表2 “算法初步”部分
课 程 单 元 知 识 点 技 能 点 思 维 要 素 案 例
算法的基本概念
算法的定义及基
本特征、算法设计
的基本过程
算法设计的基
本过程
抽象、转化
(1)猜猜商品价格;
(2)过河游戏
算法的描述
算法的基本描述
方法、问题求解过程
算法描述方法 抽象、转化
(1)生活中的流程;
(2)猜猜商品价格的流程图
常用算法
穷举法、递归算
法、动态规划法
穷举法、递归
算法、动态规划
法的设计
抽象、分解
(1)古堡算式问题;
(2)神殿寻宝;
(3)大臣的旅费
4
表3 “函数”部分
课 程 单 元 知 识 点 技 能 点 思 维 要 素 案 例
库函数
库函数的概念、使用
方法;常用库函数
include 命 令;
库函数的使用方法
抽象、封装、共享、
自动化
平方根表;
随机生成一张扑克牌
自定义函数
自定义函数的定义、
声明和调用;函数调用
过程分析
函数的定义、
声明和调用
抽象、分解、约简、
封装
阶乘累加和;
三色球问题
函数的参数
传递与返回值
函数的值传递;地址
传递;返回值
函数的参数传
递、返回值
通信
爬动的蠕虫;
日 K 蜡烛图
递归函数
递归函数的定义、执
行过程、执行效率分析
递归方法及递
归函数的设计
递归、折中、评价
假币问题;
Fibnacci 数列
局部变量、
全局变量与变
量的作用域
局部变量、全局变量
的概念、使用方法;变
量的作用域和生存期
全局变量、局
部变量的定义方
式和作用域
抽象、类比
富翁与骗子;
简易库存存取货管理
函数综合应用
程序主体框架的设
计、模块化程序设计
模块化程序设
计方法
抽象、分解、约简、
设计、封装
模拟 ATM 机存取款;
贷款计算器
表4 “组合数据类型”部分
课 程 单元 知 识 点 技 能 点 思维要素 案 例
数组
一维数组的定义、初
始化及引用
一维数组的定
义、初始化及引
用方法
抽象简化
如何存储和操作某班 C
语言课程的成绩
查找排序算法:选择
排序、冒泡排序、二分
查找
查找排序算法 抽象递归
(1)利用选择排序实
现对某班 C 语言课程成绩
的排序;
(2)利用冒泡排序算
法实现对某班 C 语言课程
成绩的排序;
(3)利用二分查找算
法检索某个成绩的排名
二维数组的定义、初
始化、引用及应用
二维数组的应用 抽象简化多维分析 学分绩点(GPA)计算
字符数组及字符串
的应用
字符数组与其
他数组的区别、
字符串的操作
抽象简化 统计字符串中字符的信息
数组元素和数组名作
为参数的实现方法
数组元素和数
组名作为参数的
应用
抽象简化
结构类型
结构类型的定义、结
构类型基本操作
结构变量的引
用方法
抽象设计约简 手机类型
结构数组的定义及
使用
结构数组的使
用方法
抽象设计约简 学生类型
结构类型作为函数
的参数与返回类型的实
现方法
结构类型作为
函数的参数与返
回类型的应用
抽象共享
5
续表
课 程 单元 知 识 点 技 能 点 思维要素 案 例
指针类型
指针——内存单元
的地址
指针变量的定
义和内存空间的
间接访问
抽象 寻找武功秘籍
利用指针顺序访问
数组的每个元素
指针变量的定
义和初始化、增
1操作
抽象
打印输出所有人的出勤
天数
使用动态
内存空间
动态内存空间的申
请和释放
申请、释放动
态内存空间
折中 求一次实验的样本方差
指针数组
的应用
指针数组
定义和使用指
针数组变量
抽象约简 月份名称的翻译
函数的指
针型参数
和返回值
函数、指针型参数、
指针型返回值
定义和使用指
针型参数和返回
值的函数
抽象约简
(1)涨工资了(工资
改变了吗);
(2)找出单行文本中
第一个最长的单词
链表的概
念和应用
单向链表的建立和
结点操作
创建和遍历单
向链表、增删链
表的结点
抽象转化
(1)快递物流记录;
(2)老鹰捉小鸡
表5 “数据结构”部分
课 程 单 元 知 识 点 技 能 点 思 维 要 素 案 例
栈
顺序栈与链栈的
概念;
栈的存储特点
栈的基本操作
(进栈与退栈)、
后进先出
抽象
调度
(1)简单背包问题;
(2)数制转换问题
队列
顺序队列与链队列
的概念;队列的存储
特点
队列的基本操
作(入队与出队、
利用队列实现搜
索)、先进先出
抽象
调度
(1)舞伴问题;
(2)过河问题
二叉树
二叉树的概念、基
本操作、基本特征
(1)二叉树的
存储;
(2)二叉树的
遍历
抽象
调度
(1)爬树问题;
(2)查找问题
综合应用
数据结构在程序设
计中的地位;
数据结构初论
顺序表、栈和
队列应用;利用存
储结构实现数据的
逻辑结构
抽象
自动
回推
(1)八皇后问题;
(2)叫号排队问题;
(3)电文编码问题
表6 “数据外部存储”部分
课 程 单 元 知 识 点 技 能 点 思 维 要 素 案 例
文件
文件的定义;缓冲
文件系统;文件指针
文件的读、写
操作
抽象
折中
(1)读取通信录文件;
(2)从通讯录文件中
查找联系人;
(3)备份通讯录文件
6
课 程 单 元 知 识 点 技 能 点 思 维 要 素 案 例
数据库
数据库的定义;
API;C 程 序 连 接
MySQL 数据库基本过程
MySQL 数 据 库
的操作;查询、插
入、删除的 SQL 语
句 ; VC++ 6.0 环境
设置;MySQL 接口
函数的使用
自动化抽象分解
(1) 创 建 MySQL 数
据库;
(2)从 MySQL 数据库
中读 / 写通讯录
表7 “综合案例”部分
课 程 单 元 案 例
综合案例
(1)大整数运算问题;
(2)校园卡管理;
(3)约瑟夫问题;
(4)分子动力学模拟;
(5)网络通信——聊天;
(6)五子棋游戏;
(7)交通信号灯的自动控制
在本书的编写过程中,谭浩强教授、吴文虎教授、高林教授、严晓舟副总编以及
“大学计算机基础教育改革理论研究与课程方案项目课题组”的专家们提出了宝贵建
议和意见,高林教授在百忙之中对本书进行了审定,在此对各位专家、学者,以及参加、
支持本书编写的各位教师以及同仁表示衷心的感谢!同时,在编写本书的过程中参考
了许多书刊和文献资料,在此向这些资料的作者表示感谢。
限于作者学识水平,书中难免存在疏漏与不妥之处,恳请读者批评指正。如果有
任何建议或意见,请发送电子邮件至 wangqm@bjut.edu.cn或 wqm4106@163.com。
编 者
2014年11月 -
目录
第 1 章 绪论 / 1
1.1 程序设计 / 2
1.1.1 程序设计与算法 / 2
1.1.2 程序设计语言 / 3
1.2 计 算思维 / 4
1.2.1 问题的提出 / 4
1.2.2 计算思维能力培养 / 5
1.2.3 程序设计能力与计算思维能力 / 7
1.3 C 程序开发的基本过程 / 8
1.3.1 安装 Visual C++ 6.0 集成开发
环境 / 8
1.3.2 利用 Visual C++ 6.0 集成开发
环境运行一个 C 程序 / 9
1.3.3 运行 C 程序的基本过程 / 13
第 2 章 C 语言程序设计基础 / 14
2.1 C 语言程序的基本结构和特点 / 15
2.1.1 导例:输入生日并显示 / 15
2.1.2 导例:比大小 / 16
2.1.3 C 程序的基本结构 / 18
2.1.4 C 语言的基本特点 / 19
2.2 基本数据类型与基本输入 / 输出 / 19
2.2.1 导例:汇率换算 / 20
2.2.2 导例:字符加密 / 21
2.2.3 导例:考核通过了吗 / 23
2.2.4 C 语言提供的基本数据类型 / 24
2.2.5 标识符与关键字、常量与变量 / 26
2.2.6 运算符与表达式 / 28
2.2.7 基本的输入 / 输出 / 30
2.3 C 程序的基本控制结构 / 32
目录
CONTENTS
2.3.1 导例:计算圆的周长和面积 / 32
2.3.2 导例:今年是闰年吗 / 33
2.3.3 导例:求解一元二次方程 / 34
2.3.4 导例:计算存款利息 / 36
2.3.5 导例:计算 n! / 38
2.3.6 导例:求解两个数的最大公约数 / 39
2.3.7 导例:计算 π 的近似值 / 40
2.3.8 顺序控制语句:赋值语句、函数
调用语句 / 41
2.3.9 选择控制语句:if...else、switch
语句 / 42
2.3.10 循环控制语句:while 语句、
do...while 语句和 for 语句 / 44
2.3.11 转向语句:break 和 continue
语句 / 45
2.4 综合案例 / 46
2.4.1 导例:可以构成三角形吗 / 46
2.4.2 导例:列出小于 n 的全部质数 / 48
2.4.3 导例:诚实族和说谎族 / 50
2.4.4 导例:制作电子月历 / 52
2.4.5 程序设计风格 / 56
2.4.6 程序调试的基本方法 / 57
习题 / 59
第 3 章 算法初步 / 64
3.1 算法的基本概念 / 65
3.1.1 导例:猜猜商品价格 / 65
3.1.2 导例:过河游戏 / 66
3.1.3 算法定义与基本特征 / 68
3.1.4 算法设计的基本过程 / 68
3.1.5 算法的评价标准 / 69
3.2 算法的描述 / 69
3.2.1 导例:生活中的流程 / 69
3.2.2 导例:猜猜商品价格的流程图 / 71
3.2.3 算法的描述 / 72
3.2.4 问题求解的过程 / 73
3.3 常用算法 / 74
3.3.1 导例:古堡算式问题 / 74
3.3.2 导例:神殿寻宝 / 75
3.3.3 导例:大臣的旅费 / 77
3.3.4 穷举法 / 81
3.3.5 递归算法 / 82
3.3.6 动态规划法 / 83
习题 / 84
第 4 章 函数 / 85
4.1 库函数 86
4.1.1 导例:平方根表 / 87
4.1.2 导例:随机生成一张扑克牌 / 89
4.1.3 库函数使用方法 / 92
4.1.4 常用的库函数 / 93
4.2 自定义函数 / 94
4.2.1 导例:阶乘累加和/ 95
4.2.2 导例:三色球问题 / 97
4.2.3 函数的定义、声明和调用 / 99
4.2.4 函数调用过程分析 / 102
4.3 函数的参数传递与返回值 / 102
4.3.1 导例:爬动的蠕虫 / 103
4.3.2 导例:日 K 蜡烛图 / 105
4.3.3 函数的参数传递 / 107
4.3.4 函数的返回值 / 109
4.4 递归函数 / 111
4.4.1 导例:假币问题(三分法) / 111
4.4.2 导例:Fibonacci 数列 / 113
4.4.3 递归函数的执行过程 / 116
4.4.4 递归函数的效率分析 / 119
4.5 局部变量、全局变量与变量作用域 / 121
4.5.1 导例:富翁与骗子 / 121
4.5.2 导例:简易库存存取货管理 / 124
4.5.3 局部变量和全局变量 / 129
4.5.4 变量的作用域和生存期 / 129
4.6 函数综合应用 / 133
4.6.1 导例:模拟银行 ATM 机存取款 / 134
4.6.2 导例:贷款计算器 / 140
4.6.3 程序主体框架的设计与实现 / 145
4.6.4 模块化程序设计的基本特征 / 146
习题 / 147
第 5 章 组合数据类型 / 152
5.1 数组 / 153
5.1.1 导例:如何存储和操作某班 C 语
言课程的成绩 / 153
5.1.2 导例:利用选择排序实现对某班
C 语言课程成绩的排序 / 154
5.1.3 导例:利用冒泡排序算法实现对
某班 C 语言课程成绩的排序 / 157
5.1.4 导例:利用二分查找算法检索某
个成绩的排名 / 159
5.1.5 导例:学分绩点(GPA)计算 / 162
5 . 1 . 6 导例:统计字符串中字符的信息 / 164
5.1.7 一维数组 / 165
5.1.8 二维数组 / 166
5.1.9 字符数组及字符串 / 167
5.1.10 数组作为函数参数 / 170
5.2 结构类型 / 171
5.2.1 导例:手机类型 / 171
5.2.2 导例:学生类型 / 173
5.2.3 结构类型的基本操作 / 174
5.2.4 结构数组 / 176
5.2.5 结构类型作为函数的参数与返回
类型 / 176
5.3 指针类型 / 177
5.3.1 导例:寻找武功秘籍 / 178
5.3.2 导例:打印输出所有人的出勤
情况 / 179
5.3.3 导例:求一次实验的样本方差 / 181
5.3.4 导例:月份名称的翻译 / 184
5 . 3 . 5 导例:涨工资了(工资改变了吗) / 185
5.3.6 导例:找出单行文本中第一个
最长的单词 / 187
5.3.7 指针的相关概念与定义 / 191
5.3.8 指针的基本操作、动态内存分配
和释放 / 192
5.3.9 指针型数组 / 193
5.3.10 指针类型作为函数的参数与返回
类型 / 193
5.4 链表 / 195
5.4.1 导例:快递物流记录 / 195
5.4.2 导例:老鹰捉小鸡 / 198
5.4.3 链表的定义 / 203
5.4.4 链表的创建、销毁与基本操作 / 204
习 题 / 206
第 6 章 数据结构 / 212
6.1 栈 / 213
6.1.1 导例:简单背包问题 / 213
6.1.2 导例:数制转换问题 / 216
6.1.3 栈的相关概念与基本操作 / 219
6.1.4 利用栈组织数据的基本特征 / 223
6.2 队列 / 223
6.2.1 导例:舞伴问题 / 223
6.2.2 导例:过河问题 / 228
6.2.3 队列的相关概念与基本操作 / 236
6.2.4 利用队列组织数据的基本特征 / 242
6.3 二叉树 / 242
6.3.1 导例:爬树问题 / 243
6.3.2 导例:查找问题 / 246
6.3.3 二叉树的相关概念与基本操作 / 251
6.3.4 利用二叉树组织数据的基本特征 / 254
6.4 综合应用举例 / 255
6.4.1 导例:八皇后问题 / 255
6.4.2 导例:叫号排队问题 / 260
6.4.3 导例:电文编码问题 / 267
6.4.4 数据结构在程序设计中的作用 / 273
6.4.5 数据结构初论 / 274
习题 / 278
第 7 章 数据外部存储 / 283
7.1 文件 / 284
7.1.1 导例:读取通讯录文件 / 284
7.1.2 导例:从通讯录文件中查询
联系人 / 286
7.1.3 导例:备份通讯录文件 / 289
7.1.4 文件的相关基本概念 / 291
7.1.5 文件的基本操作 / 292
7.2 数据库应用 / 296
7.2.1 导例:创建 MySQL 数据库 / 296
7.2.2 导例:从 MySQL 数据库中读 / 写
通讯录 / 299
7.2.3 C 程序对 MySQL 数据库的操作 / 303
习题 / 306
第 8 章 综合案例 / 307
8.1 大整数运算问题 / 308
8.2 校园卡管理 / 310
8.3 约瑟夫问题 / 315
8.4 分子动力学模拟 / 317
8.5 网络通信——聊天 / 318
8.6 五子棋游戏 / 319
8.7 交通信号灯的自动控制 / 321
参考文献 / 324 -
作者介绍
主要著译者顺序姓名学历职称学科专长通讯地址1 王全民博士 副教授 工作单位北京工业大学 邮政编码 电话 136712296182 工作单位 邮政编码 电话 3 工作单位 邮政编码 电话 审校者(主审者) 学历 工作单位 邮政编码 电话 职称 工作单位 邮政编码 电话 王全民 副教授硕士生导师 博士 主讲:网络安全技术与应用、.NET实训项目开发实践、信息技术基础、C语言程序设计郑爽 讲师 硕士 主讲:网络安全技术与应用、信息技术基础、C语言程序设计 -
编辑推荐
-
书评书荐
-
附件下载
图书推荐