新世纪计算机基础教育丛书:C程序设计 第三版
作者: 谭浩强著
出版时间:2005
丛编项: 新世纪计算机基础教育丛书
本书曾荣获:原电子工业部优秀教材一等奖全国高等院校计算机基础教育研究会优秀教材一等奖高校 优秀畅销书特等奖C语言是国内外广泛使用的计算机语言,学会使用C语言进行程序设计是计算机工作者的一项基本功。本书的第一版于1991年出版,第二版于1999年出版。由于本书作者具有丰富的教学经验和编写教材的经验,并针对初学者的特点,精心策划、准确定位,使得本书概念清晰、例题丰富、深入浅出,受到专家和读者的一致好评。本书被普遍认为是学习C语言的好教材,并被全国大多数高校选用。十多年来本书累计发行了700多万册,创同类书的全国最高记录,是学习C语言的主流用书。本书曾荣获原电子工业部优秀教材一等奖、高校 优秀畅销书特等奖、全国高等院校计算机基础教育研究会优秀教材一等奖。根据发展的需要,作者对本书进行了再修订,使本书更加完善,更便于学习。书中全部例题中的程序均已调试通过。本书内容新颖、体系合理、逻辑性强、文字流畅、通俗易懂,是学习C语言的理想教材。凡具有计算机初级知识的读者都能读懂本书。本书可作为高等学校各专业的正式教材,也是一本自学的好教材。另外本书还配有辅助教材《C程序设计题解与上机指导》(第三版)。
目录
- C语言概述
- 1.1 C语言出现的历史背景1
- 1.2 C 语言的特点2
- 1.3 简单的C语言程序介绍4
- 1.4 运行C程序的步骤与方法7
- 1.4.1 运行C程序的步骤7
- 1.4.2 上机运行C程序的方法8
- 习题12
- 程序的灵魂——算法
- 2.1 算法的概念14
- 2.2 简单算法举例15
- 2.3 算法的特性19
- 2.4 怎样表示一个算法20
- 2.4.1 用自然语言表示算法20
- 2.4.2 用流程图表示算法20
- 2.4.3 3种基本结构和改进的流程图24
- 2.4.4 用N\|S流程图表示算法27
- 2.4.5 用伪代码表示算法30
- 2.4.6 用计算机语言表示算法33
- 2.5 结构化程序设计方法34
- 习题36
- 数据类型、运算符与表达式
- 3.1 C语言的数据类型37
- 3.2 常量与变量37
- 3.2.1 常量和符号常量37
- 3.2.2 变量38
- 3.3 整型数据40
- 3.3.1 整型常量的表示方法40
- 3.3.2 整型变量40
- 3.3.3 整型常量的类型44
- 3.4 浮点型数据45
- 3.4.1 浮点型常量的表示方法45
- 3.4.2 浮点型变量45
- 3.4.3 浮点型常量的类型47
- 3.5 字符型数据48
- 3.5.1 字符常量48
- 3.5.2 字符变量49
- 3.5.3 字符数据在内存中的存储形式及其使用方法50
- 3.5.4 字符串常量52
- 3.6 变量赋初值53
- 3.7 各类数值型数据间的混合运算54
- 3.8 算术运算符和算术表达式55
- 3.8.1 C语言运算符简介55
- 3.8.2 算术运算符和算术表达式55
- 3.9 赋值运算符和赋值表达式59
- 3.10 逗号运算符和逗号表达式65
- 习题66
- 最简单的C程序设计——顺序程序设计
- 4.1 C语句概述69
- 4.2 赋值语句71
- 4.3 数据输入输出的概念及在C语言中的实现72
- 4.4 字符数据的输入输出73
- 4.4.1 Putchar函数73
- 4.4.2 getchar函数74
- 4.5 格式输入与输出74
- 4.5.1 printf函数75
- 4.5.2 scanf函数82
- 4.6 顺序结构程序设计举例86
- 习题88
- 选择结构程序设计
- 5.1 关系运算符和关系表达式91
- 5.1.1 关系运算符及其优先次序91
- 5.1.2 关系表达式92
- 5.2 逻辑运算符和逻辑表达式92
- 5.2.1 逻辑运算符及其优先次序92
- 5.2.2 逻辑表达式93
- 5.3 if语句95
- 5.3.1 if语句的3种形式95
- 5.3.2 if语句的嵌套99
- 5.3.3 条件运算符102
- 5.4 switch语句104
- 5.5 程序举例106
- 习题111
- 循环控制
- 6.1 概述113
- 6.2 goto语句以及用goto语句构成循环113
- 6.3 用while语句实现循环114
- 6.4 用do…while语句实现循环115
- 6.5 用for 语句实现循环118
- 6.6 循环的嵌套121
- 6.7 几种循环的比较122
- 6.8 break语句和continue语句122
- 6.8.1 break语句122
- 6.8.2 continue语句123
- 6.9 程序举例124
- 习题129
- 数组
- 7.1 一维数组的定义和引用131
- 7.1.1 一维数组的定义131
- 7.1.2 一维数组元素的引用132
- 7.1.3 一维数组的初始化132
- 7.1.4 一维数组程序举例133
- 7.2 二维数组的定义和引用135
- 7.2.1 二维数组的定义135
- 7.2.2 二维数组的引用136
- 7.2.3 二维数组的初始化137
- 7.2.4 二维数组程序举例138
- 7.3 字符数组140
- 7.3.1 字符数组的定义140
- 7.3.2 字符数组的初始化140
- 7.3.3 字符数组的引用141
- 7.3.4 字符串和字符串结束标志142
- 7.3.5 字符数组的输入输出144
- 7.3.6 字符串处理函数146
- 7.3.7 字符数组应用举例150
- 习题152
- 函数
- 8.1 概述155
- 8.2 函数定义的一般形式156
- 8.2.1 无参函数定义的一般形式156
- 8.2.2 有参函数定义的一般形式157
- 8.2.3 空函数157
- 8.3 函数参数和函数的值158
- 8.3.1 形式参数和实际参数158
- 8.3.2 函数的返回值160
- 8.4 函数的调用161
- 8.4.1 函数调用的一般形式161
- 8.4.2 函数调用的方式162
- 8.4.3 对被调用函数的声明和函数原型163
- 8.5 函数的嵌套调用167
- 8.6 函数的递归调用171
- 8.7 数组作为函数参数177
- 8.7.1 数组元素作函数实参178
- 8.7.2 数组名作函数参数179
- 8.7.3 多维数组名作函数参数182
- 8.8 局部变量和全局变量184
- 8.8.1 局部变量184
- 8.8.2 全局变量185
- 8.9 变量的存储类别188
- 8.9.1 动态存储方式与静态存储方式188
- 8.9.2 auto变量189
- 8.9.3 用static声明局部变量189
- 8.9.4 register变量191
- 8.9.5 用extern声明外部变量193
- 8.9.6 用static声明外部变量195
- 8.9.7 关于变量的声明和定义196
- 8.9.8 存储类别小结197
- 8.10 内部函数和外部函数199
- 8.10.1 内部函数199
- 8.10.2 外部函数199
- 习题202
- 预处理命令
- 9.1 宏定义204
- 9.1.1 不带参数的宏定义204
- 9.1.2 带参数的宏定义207
- 9.2 “文件包含”处理211
- 9.3 条件编译214
- 习题217
- 指针
- 10.1 地址和指针的概念219
- 10.2 变量的指针和指向变量的指针变量221
- 10.2.1定义一个指针变量221
- 10.2.2 指针变量的引用222
- 10.2.3 指针变量作为函数参数225
- 10.3 数组与指针229
- 10.3.1 指向数组元素的指针229
- 10.3.2 通过指针引用数组元素230
- 10.3.3 用数组名作函数参数235
- 10.3.4 多维数组与指针242
- 10.4 字符串与指针251
- 10.4.1 字符串的表示形式251
- 10.4.2 字符指针作函数参数254
- 10.4.3 对使用字符指针变量和字符数组的讨论257
- 10.5 指向函数的指针260
- 10.5.1 用函数指针变量调用函数260
- 10.5.2 用指向函数的指针作函数参数262
- 10.6 返回指针值的函数265
- 10.7 指针数组和指向指针的指针268
- 10.7.1 指针数组的概念268
- 10.7.2 指向指针的指针271
- 10.7.3 指针数组作main函数的形参273
- 10.8 有关指针的数据类型和指针运算的小结275
- 10.8.1 有关指针的数据类型的小结276
- 10.8.2 指针运算小结276
- 10.8.3 void指针类型277
- 习题278
- 结构体与共用体
- 11.1 概述281
- 11.2 定义结构体类型变量的方法282
- 11.3 结构体变量的引用284
- 11.4 结构体变量的初始化285
- 11.5 结构体数组286
- 11.5.1 定义结构体数组286
- 11.5.2 结构体数组的初始化287
- 11.5.3 结构体数组应用举例287
- 11.6 指向结构体类型数据的指针289
- 11.6.1 指向结构体变量的指针289
- 11.6.2 指向结构体数组的指针290
- 11.6.3 用结构体变量和指向结构体的指针作函数参数292
- 11.7 用指针处理链表294
- 11.7.1 链表概述294
- 11.7.2 简单链表295
- 11.7.3 处理动态链表所需的函数296
- 11.7.4 建立动态链表297
- 11.7.5 输出链表300
- 11.7.6 对链表的删除操作301
- 11.7.7 对链表的插入操作303
- 11.7.8 对链表的综合操作305
- 11.8 共用体308
- 11.8.1 共用体的概念308
- 11.8.2 共用体变量的引用方式309
- 11.8.3 共用体类型数据的特点310
- 11.9 枚举类型312
- 11.10 用typedef定义类型315
- 习题318
- 位运算
- 12.1 位运算符和位运算319
- 12.1.1 “按位与”运算符(&)319
- 12.1.2 “按位或”运算符(|)320
- 12.1.3 “异或”运算符(∧)321
- 12.1.4 “取反”运算符(~)322
- 12.1.5 左移运算符(<<)323
- 12.1.6 右移运算符(>>)323
- 12.1.7 位运算赋值运算符324
- 12.1.8 不同长度的数据进行位运算324
- 12.2 位运算举例324
- 12.3 位段326
- 习题329
- 文件
- 13.1 C文件概述330
- 13.2 文件类型指针331
- 13.3 文件的打开与关闭332
- 13.3.1 文件的打开(fopen函数)332
- 13.3.2 文件的关闭(fclose函数)334
- 13.4 文件的读写334
- 13.4.1 fputc函数和fgetc函数(putc函数和getc函数)335
- 13.4.2 fread函数和fwrite函数339
- 13.4.3 fprintf函数和fscanf函数342
- 13.4.4 其他读写函数343
- 13.5 文件的定位344
- 13.5.1 rewind函数344
- 13.5.2 fseek函数和随机读写345
- 13.5.3 ftell函数346
- 13.6 出错的检测346
- 13.6.1 ferror函数347
- 13.6.2 clearerr函数347
- 13.7 文件输入输出小结347
- 习题348
- 常见错误和程序调试
- 14.1 常见错误分析349
- 14.2 程序调试361
- 附录A 常用字符与ASCII代码对照表364
- 附录B C语言中的关键字365
- 附录C 运算符和结合性365
- 附录D C语言常用语法提要367
- 附录E C库函数371
- 参考文献378