C语言程序设计
书 号:9787113186043
丛 书 名:教育部大学计算机课程改革规划教材
作 者:甘勇
译 者:
开 本:16开
装 帧:平装
正文语种:
出 版 社:中国铁道出版社有限公司
定 价:39.8元
-
内容简介
本书以程序设计过程为主线,以问题和案例引入内容,围绕问题的解决来讲解C语言及程序设计。全书共分13章,主要内容包括:引言、简单C程序设计、分支结构、循环结构、函数、数组、字符数组与字符串、指针、结构、指针进阶、C预处理、文件及计算思维与常用算法。本书内容、知识点详尽,适合作为高等学校各专业C语言程序设计课程的教材,也可作为从事计算机相关工作的人员的参考书。 -
前言
C 语言程序设计是很多理工科专业,尤其是计算机专业学生必修的一门专业基础课。C 语 言从产生到现在,已经成为最重要和最流行的编程语言之一。现在,学习、掌握 C 语言成为了 每个计算机技术人员的一项基本功,也是在计算机领域中进一步学习和工作的基础。
在 C 语言程序设计的教学当中,我们参阅过多部国内外的相关教材、讲义,就学生的 编程能力以及参加各级竞赛的表现来看,教学方法改革需要与时俱进,因此,有一本适合 学生使用的教材非常重要。目前,C 语言教学普遍存在的问题是,很多老师和 C 语言教科书 都是围绕知识点进行讲解,过分地强调知识细节,学生也把学习重点和注意力放在了记忆 大量的语法细节方面,学习结束后却不会编程。C 语言是为解决问题诞生的,是一种出色的 解决问题的工具,掌握一个工具的目的是通过使用它能解决问题。
本书以编程能力的提高为主旨来讲解 C 语言,语法知识点都是伴随着有价值的应用而 出现的,强调语法的学习是为了提高用 C 语言解决问题、表达算法思想的能力,书中的例 子分为两种,一种为“试试看”类型的例子,比较简单,是为验证或解释某个语法知识而 设计的程序;另一种为“解决问题”类型的例子,每个例子都有针对问题的分析和讨论, 以帮助初学者了解程序设计过程的实质,理解从问题到程序的思考过程,从而举一反三, 快速提高编程能力。带 * 号的章节为自学章节,也是为了提升学生编程能力而设计的,老 师可以不讲,但学生必须要看。
C 语言程序设计是一门实践性很强的课程,“纸上谈兵”式的光学不练是学不好 C 语 言的。学习程序设计需要大量的编程练习,只有不断地编写程序并改正错误才能真正学会 编程。错误与程序设计如影随形,密不可分,只要编写程序,就无法避免错误。之所以在 前言中如此强调错误与程序设计的关系,是因为看到太多的同学在学习 C 语言的过程中因 为编程中的一个个错误而止步不前、半途而废。事实上每个程序员的成长历程都是一部不 断认识错误并纠正错误的纠错史。
本书的编写,也是一个基于实践的教学改革,在使用过程中,我们会继续总结经验、 发现问题、不断地学习,进一步完善和提高教学和教材水平。
本书由甘勇任主编,李晔、卢冰任副主编,参编人员有王捷、苏虹、段赵磊、贺蕾、 张娟娟和贾志娟。本书在编写过程中得到了金保华、尚展垒、钱慎一、朱付保等很多老师, 以及郑州轻工业学院教务处、河南农业大学教务处和郑州师范学院教务处的帮助和支持, 在此深表感谢。
由于编者水平有限,书中难免存在疏漏之处,敬请读者批评指正。
编者
2014 年 6 月 -
目录
第1章 引 言 / 1
1.1 计算机与程序设计语言 / 2
1.1.1 程序存储思想 / 2
1.1.2 程序设计语言的发展 / 3
1.2 C语言的发展简史 / 4
1.2.1 C语言的起源 / 4
1.2.2 C语言的发展 / 5
1.2.3 C语言的特点 / 6
1.3 第一个C程序 / 7
1.3.1 编辑源程序 / 7
1.3.2 编译、链接和运行 / 8
1.3.3 程序开发周期 / 9
1.4 剖析一个简单的程序 / 9
1.5 简单程序举例 / 12
习题 / 14
第2章 简单C程序设计 / 17
2.1 温度转换 / 18
2.1.1 内存 / 18
2.1.2 变量 / 19
2.1.3 整数类型 / 19
2.1.4 变量的声明和使用 / 20
2.1.5 赋值运算 / 21
2.1.6 格式化输出函数printf() / 22
2.2 使用浮点数进行温度转换 / 24
2.2.1 浮点变量类型 / 24
2.2.2 浮点数据的输出 / 25
2.2.3 常量 / 26
2.3 对任意华氏温度进行温度转换 / 27
2.3.1 用scanf()读入整型数据 / 28
目录
CONTENTS
2.3.2 用scanf()读入浮点数据 / 29
2.3.3 格式控制字符串中的普通字符 / 29
2.4 基本运算符 / 30
2.4.1 算术运算 / 30
2.4.2 类型转换 / 32
2.5 计算两点间的距离 / 33
2.5.1 常用数学函数 / 34
2.5.2 计算整数的位数 / 35
习题 / 35
第3章 分支结构 / 37
3.1 单分支if语句 / 38
3.1.1 伪代码 / 39
3.1.2 关系运算 / 39
3.1.3 复合语句 / 41
3.2 双分支if语句 / 43
3.2.1 条件表达式 / 44
3.2.2 嵌套的if…else / 45
3.2.3 逻辑运算符和逻辑表达式 / 46
3.3 判断字母大小写 / 48
3.3.1 字符类型 / 48
3.3.2 字符型数据的输入/输出 / 49
3.3.3 复合赋值语句 / 50
3.4 多分支if语句 / 50
3.5 switch语句 / 52
3.5.1 switch语句的一般形式 / 52
3.5.2 break在switch中的灵活运用 / 54
*3.5.3 四则运算(加强版) / 57
3.5.4 浮点数据 / 60
3.6 运算符与表达式 / 61
习题 / 63
*
*
*
第4章 循环结构 / 65
4.1 while循环语句 / 67
4.2 for循环语句 / 68
4.2.1 for语句的基本格式 / 68
4.2.2 for语句的注意事项 / 70
4.2.3 自增自减运算符 / 71
4.2.4 最大值 / 74
*4.2.5 极限常量 / 75
4.3 求数列的和 / 76
4.4 输出阶乘表 / 80
4.4.1 类型溢出问题 / 81
4.4.2 逗号运算符及其表达式 / 82
4.4.3 计算数列a,aa,aaa,…的前n项和 / 83
4.5 标记控制的循环 / 84
4.5.1 再谈while语句 / 86
4.5.2 字符的分类统计 / 88
4.5.3 计算n的位数 / 89
4.5.4 do语句 / 89
4.6 break和continue / 90
4.6.1 循环中的break / 90
4.6.2 循环中的continue / 92
4.7 多重循环与goto语句 / 94
4.7.1 多重循环 / 94
*4.7.2 goto 语句 / 96
4.8 多实例测试 / 97
4.9 表达式的求值顺序与副效应 / 102
习题 / 104
第5章 函数 / 107
5.1 模块化程序设计 / 108
5.2 函数的基本概念 / 109
5.2.1 求最大值 / 109
5.2.2 函数的定义 / 110
5.2.3 函数的调用 / 112
5.2.4 函数原型 / 113
5.2.5 return语句 / 114
5.2.6 按值传递机制 / 115
5.3 使用函数编写程序 / 115
5.3.1 素数表 / 116
5.3.2 验证哥德巴赫猜想 / 117
5.3.3 组合数 / 118
5.4 变量的存储类型 / 119
5.5 局部变量和外部变量 / 120
5.5.1 局部变量 / 121
5.5.2 静态局部变量 / 122
5.5.3 外部变量 / 123
5.6 函数的递归调用 / 124
5.6.1 递归的基本思想 / 124
5.6.2 最大公约数 / 125
5.6.3 最近共同祖先 / 125
习题 / 127
第6章 数组 / 129
6.1 一维数组 / 130
6.1.1 一维数组的定义和引用 / 130
6.1.2 一维数组初始化 / 131
6.1.3 数组元素的查找 / 134
6.1.4 在有序序列里插入新元素 / 135
6.1.5 比较交换排序 / 136
6.2 数组作为函数参数 / 138
6.3 一维数组应用举例 / 141
6.3.1 最佳校友奖 / 141
6.3.2 字母使用频率统计 / 143
*6.3.3 集合的合并——利用有序关系简化问题 / 144
*6.3.4 二分搜索 / 147
6.4 二维数组 / 148
6.4.1 二维数组的定义和引用 / 148
6.4.2 二维数组的初始化 / 148
6.5 二维数组应用举例 / 149
6.5.1 各门课的平均分 / 149
6.5.2 随机矩阵的最大值 / 151
6.5.3 日期计算 / 153
习题 / 154
第7章 字符数组与字符串 / 157
7.1 字符型数据 / 158
7.1.1 字符型数据的存储 / 158
7.1.2 转义序列 / 159
7.1.3 字符数据的输入问题 / 160
7.1.4 处理字符的函数 / 161
7.2 字符数组与字符串 / 162
7.2.1 统计空格 / 163
7.2.2 字符数组的初始化 / 163
7.2.3 字符串的输入/输出 / 164
7.3 常用字符串函数 / 165
7.3.1 string.h中的字符串处理函数 / 165
7.3.2 stdlib.h中的字符串转换函数 / 167
7.3.3 stdio.h中的字符串函数 / 168
7.4 字符串应用举例 / 169
7.4.1 统计单词个数 / 169
7.4.2 多个二进制数排序 / 171
7.4.3 最大值(多种进制) / 172
7.4.4 将一个十进制整数转换为二进制输出 / 173
7.5 字符串数组 / 174
习题 / 175
第8章 指针 / 177
8.1 什么是指针 / 178
8.1.1 计算机内存的使用 / 178
8.1.2 指针的概念 / 179
8.2 指针变量的声明和初始化 / 180
8.2.1 指针变量的声明 / 180
8.2.2 指针变量的初始化 / 180
8.2.3 指针和数据类型 / 181
8.3 指针的基本运算 / 182
8.4 指针作为函数的参数 / 183
8.5 指针与const限定符 / 187
8.6 一维数组与指针 / 190
8.6.1 指针的算术运算和关系运算 / 190
8.6.2 指针和数组的关系 / 193
8.6.3 数组作函数参数的本质 / 195
8.7 返回值为指针的函数 / 197
8.8 指针与字符串 / 198
8.8.1 字符串常量 / 198
8.8.2 使用指针处理字符串 / 199
8.8.3 字符数组与字符指针 / 203
8.9 用指针实现内存动态分配 / 205
8.9.1 使用malloc()函数为数组分配内存 / 205
8.9.2 释放动态分配的内存 / 206
8.9.3 其他动态内存分配函数 / 206
习题 / 207
第9章 结构 / 211
9.1 结构定义 / 212
9.1.1 使用结构的原因 / 212
9.1.2 定义结构类型和结构变量 / 213
9.1.3 使用typedef定义数据类型 / 215
9.1.4 初始化结构体变量 / 215
9.1.5 将一个结构作为另一个结构的成员 / 216
9.1.6 访问结构成员 / 217
9.2 结构数组与指针 / 219
9.2.1 结构数组 / 220
9.2.2 结构指针 / 222
9.2.3 用指针访问结构数组 / 223
9.3 结构与函数 / 224
9.3.1 结构作为函数的参数 / 225
9.3.2 结构指针作为函数参数 / 226
9.3.3 结构作为函数的返回值 / 226
9.4 单链表 / 227
9.4.1 单链表类型定义 / 228
9.4.2 单链表的操作 / 228
9.5 联合与枚举 / 233
9.5.1 联合 / 233
9.5.2 联合指针 / 234
9.5.3 联合的初始化 / 235
9.5.4 联合与结构 / 235
9.5.5 枚举 / 236
习题 / 237
第10章 指针进阶 / 239
10.1 指针与二维数组 / 240
10.1.1 用一级指针访问二维数组 / 240
10.1.2 指向数组的指针 / 240
10.1.3 二维数组名 / 242
10.2 指针数组 / 244
10.2.1 动态申请和释放二维数组 / 244
10.2.2 用指针数组处理多个字符串 / 245
10.3 带参数的main()函数 / 249
10.4 指向函数的指针 / 251
习题 / 256
第11章 C预处理 / 257
11.1 预处理器的工作原理 / 258
11.2 预处理指令 / 259
11.3 #define预处理指令 / 259
11.3.1 符号常量 / 260
11.3.2 带参数的宏 / 260
11.4 文件包含 / 263
11.4.1 多文件程序 / 263
11.4.2 include指令 / 263
11.4.3 文件之间如何共享信息 / 263
11.5 条件编译 / 265
习题 / 267
第12章 文件 / 269
12.1 文件概述 / 270
12.1.1 一个简单的文件操作程序 / 270
12.1.2 C文件的分类 / 271
12.1.3 缓冲文件系统 / 271
12.1.4 文件指针 / 272
12.2 文件的打开和关闭 / 273
12.2.1 文件打开函数fopen() / 273
12.2.2 文件关闭函数fclose() / 275
12.2.3 输入/输出重定向函数
freopen() / 275
12.3 文件的读/写操作 / 276
12.3.1 字符读/写函数fgetc()和fputc() / 276
12.3.2 字符串读/写函数fgets()和fputs() / 278
12.3.3 格式化文件读/写函数fscanf()和fprintf() / 279
12.3.4 数据块读/写函数fread()和fwrite() / 280
12.4 文件的其他操作 / 281
12.4.1 文件定位函数 / 281
12.4.2 文件检测 / 282
12.5 文件应用实例 / 283
习题 / 294
第13章 计算思维与常用算法 / 295
13.1 模拟 / 296
13.1.1 校门外的树 / 296
13.1.2 约瑟夫问题 / 297
13.2 随机化算法 / 301
13.2.1 计算圆周率近似值 / 301
13.2.2 洗牌发牌模拟 / 303
13.3 空间换时间 / 306
13.3.1 筛选法求素数 / 307
13.3.2 验证哥德巴赫猜想(加强版) / 308
13.3.3 分解素因数 / 310
13.4 递归 / 313
13.4.1 计算实数的整数幂 / 314
13.4.2 计算连通区域面积 / 315
13.5 贪心算法 / 317
13.5.1 活动安排问题 / 317
13.5.2 部分背包问题 / 319
13.6 动态规划算法 / 321
13.6.1 游戏币问题 / 321
13.6.2 最长单调序列 / 323
习题 / 324
附录 / 329
附录A 常用字符与ASCII代码对照表 / 330
附录B C语言中的关键字 / 331
附录C 运算符和结合性 / 332
附录D C库函数 / 333
附录E C99相对于C89的新特性
(部分) / 338
参考文献 339 -
作者介绍
主要著译者顺序姓名学历职称学科专长通讯地址1甘勇博士 教授计算机工作单位郑州轻工业学院 计算机与通信工程学院邮政编码 电话 2 工作单位 邮政编码 电话 3 工作单位 邮政编码 电话 审校者(主审者) 学历 工作单位 邮政编码 电话 职称 工作单位 邮政编码 电话 甘勇,男,1965年5月出生,中共党员,教授,研究生,现任郑州轻工业学院计算机与通信工程学院院长。担任中国计算机学会微机专委常委 、河南省计算机学会理事、河南省高校计算机教育研究会副理事长、郑州市青联委员、河南省软件行业协会常务理事。荣获过河南省优秀专家、河南省管优秀青年科技专家、河南省跨世纪学术和技术带头人培养对象、河南省优秀教师等荣誉称号。 -
编辑推荐
-
书评书荐
-
附件下载
图书推荐