学习任何程序设计语言的最佳方法都是创建良好的程序,C 语言也不例外。一旦决定编写程序我们就会发现,总是有至少两种方法可以实现。那么,如何才能找到最好的方法来实现程序?
《C语言程序设计》就能帮助读者解决此类问题。《C语言程序设计》是一本C 语言程序设计的经典教材。多年来,本书被很多工程和科学研究所及院校指定为学习教材。
(1)C语言程序设计的经典教材,目前英文原版更新至第17版。前16版被翻译为印地语、古吉拉特语、英语、日语、韩语,分别在印度、美国、日本、新加坡、韩国出版。
(2)适合初学者。对编程语言概念进行详细解释,尤其对复杂主题提供深入理解;每章配有随学随练的章末练习与总结提炼的课后笔记,帮助巩固本章所涵盖的概念和技巧。
(3)本书相较前16版,增加概念实例和面试常见问题。每个编程概念给出实例,使主题更容易理解;而且设有单独的面试常见问题的章节,是准备面试的参考手册。
(4)本书提供C 语言程序员快速参考卡片、可供读者下载的程序源代码,并配套出版《C 语言程序设计 习题解答》。
本书这一版本(第17 版)除了讲解C 语言中基本的函数、指针、控制指令、数据类型、数组、字符串、输入输出、位操作等内容外,还增加了C 语言程序设计的各个主题的实例和面试问题,以便读者尽快熟悉C 语言的实际应用。书中的实例和习题已经过作者认真挑选,集中体现了各个知识要点的具体用法。本书提供可供读者下载的程序源代码,并配套出版《C 语言程序设计 习题解答》。
本书结构合理,内容深入浅出,既适合用作高等学校本科和专科学生学习C 语言程序设计的教材,也适合用作零基础的程序设计初学者的自学用书。
目录
第 1 章 起步 001
本章内容 002
1.1 什么是C 语言 003
1.2 C 语言的基础知识 003
1.2.1 字母、数字和特殊符号 004
1.2.2 常量、变量和关键字 004
1.2.3 C 语言的常量类型 004
1.2.4 整型常量的创建规则 005
1.2.5 浮点型常量的创建规则 005
1.2.6 字符型常量的创建规则 005
1.2.7 C 语言的变量类型 006
1.2.8 变量名的创建规则 006
1.2.9 C 语言的关键字 006
1.3 第 1 个C 语言程序 007
1.3.1 C 语言程序的格式 007
1.3.2 C 语言程序中的注释 007
1.3.3 什么是main() 008
1.3.4 变量及其用法 009
1.3.5 printf() 及其用法 009
1.3.6 编译和运行 010
1.4 接收输入 010
1.5 程序 011
习题 012
课后笔记 014
第 2 章 C 语言的指令 017
本章内容 018
2.1 指令的类型 019
2.2 类型声明指令 019
2.3 算术指令 019
2.4 整型和浮点型的转换 021
2.5 赋值时的类型转换 021
2.6 操作符的优先层次 022
2.7 操作符的结合性 024
2.8 控制指令 024
2.9 程序 024
习题 026
课后笔记 028
第3 章 决策控制指令 031
本章内容 032
3.1 if-else 语句 033
3.2 if-else 中的多条语句 034
3.3 嵌套的if-else 语句 035
3.4 一点告诫 036
3.5 程序 037
习题 038
课后笔记 041
第4 章 更复杂决策的创建 043
本章内容 044
4.1 使用逻辑操作符:检测范围 045
4.2 使用逻辑操作符:是 否问题 046
4.3 ! 操作符 048
4.4 再论操作符的优先层次 049
4.5 条件操作符 049
4.6 程序 050
习题 052
课后笔记 056
第5 章 循环控制指令 059
本章内容 060
5.1 循环 061
5.2 while 循环 061
5.2.1 提示和陷阱 062
5.2.2 其他操作符 063
5.3 程序 065
习题 066
课后笔记 068
第6 章 更复杂的循环控制
指令 069
本章内容 070
6.1 for 循环 071
6.1.1 循环的嵌套 073
6.1.2 for 循环的多重初始化 074
6.2 break 语句 074
6.3 continue 语句 075
6.4 do-while 循环 076
6.5 非常规循环 077
6.6 程序 078
习题 079
课后笔记 081
第7 章 case 控制指令 083
本章内容 084
7.1 使用switch 的决策 085
7.2 switch 与if-else 梯状结构的对比 088
7.3 goto 关键字 088
7.4 程序 090
习题 092
课后笔记 095
第8 章 函数 097
本章内容 098
8.1 什么是函数 099
8.2 在函数之间传递值 101
8.3 参数的传递顺序 104
8.4 使用库函数 104
8.5 一个不确定的问题 105
8.6 函数的返回类型 105
8.7 程序 106
习题 108
课后笔记 109
第9 章 指针 111
本章内容 112
9.1 传值调用和传引用调用 113
9.2 指针概述 113
9.3 再论函数调用 116
9.4 结论 118
9.5 程序 118
习题 120
课后笔记 122
第 10 章 递归 125
本章内容 126
10.1 递归的概念 127
10.2 程序 128
习题 130
课后笔记 131
第 11 章 再论数据类型 133
本章内容 134
11.1 整型:long、short、signed、unsigned 135
11.2 字符型:signed、unsigned 136
11.3 浮点型:float、double、long double 136
11.4 一些其他问题 137
11.5 C 语言的存储类型 138
11.5.1 自动存储类型 138
11.5.2 寄存器存储类型 139
11.5.3 静态存储类型 140
11.5.4 外部存储类型 140
11.5.5 一些微妙的问题 142
11.5.6 何时何地使用存储类型 143
习题 143
课后笔记 145
第 12 章 C 预处理器 149
本章内容 150
12.1 C 预处理器的特性 151
12.2 宏展开指令 151
12.2.1 带参数的宏 152
12.2.2 宏与函数的比较 153
12.3 文件包含指令 153
12.4 条件编译指令 154
12.5 #if 和#elif 指令 155
12.6 其他指令 156
12.6.1 #undef 指令 156
12.6.2 #pragma 指令 156
12.7 构建过程 158
12.8 程序 159
习题 161
课后笔记 162
第 13 章 数组 165
本章内容 166
13.1 什么是数组 167
13.2 关于数组的其他信息 168
13.2.1 数组的初始化 168
13.2.2 内存中的数组元素 168
13.2.3 边界检查 169
13.2.4 向函数传递数组元素 169
13.3 指针和数组 170
13.3.1 使用指针访问数组元素 171
13.3.2 把数组传递给函数 172
13.4 可变长数组 174
13.5 程序 175
习题 176
课后笔记 179
第 14 章 多维数组 181
本章内容 182
14.1 二维数组 183
14.1.1 二维数组的初始化 183
14.1.2 二维数组的内存映射 184
14.1.3 指针和二维数组 184
14.1.4 指向数组的指针 186
14.1.5 把二维数组传递给函数 186
14.2 指针数组 187
14.3 三维数组 188
14.4 程序 189
习题 191
课后笔记 193
第 15 章 字符串 195
本章内容 196
15.1 什么是字符串 197
15.2 关于字符串的其他说明 197
15.3 指针和字符串 199
15.4 字符串处理函数 200
15.4.1 strlen() 201
15.4.2 strcpy() 202
15.4.3 strcat() 203
15.4.4 strcmp() 203
15.5 程序 204
习题 206
课后笔记 208
第 16 章 处理多个字符串 211
本章内容 212
16.1 二维字符数组 213
16.2 字符串指针数组 214
16.3 字符串指针数组的限制 216
16.4 程序 216
习题 218
课后笔记 219
第 17 章 结构体 221
本章内容 222
17.1 为什么要使用结构体 223
17.2 结构体数组 224
17.3 结构体的细节 225
17.3.1 结构体的声明 225
17.3.2 结构体元素的存储 226
17.3.3 复制结构体元素 227
17.3.4 嵌套的结构体 227
17.3.5 传递结构体元素 结构体变量 228
17.3.6 结构体元素的对齐 229
17.4 结构体的应用 230
17.5 程序 230
习题 233
课后笔记 234
第 18 章 控制台输入输出 237
本章内容 238
18.1 I O 的类型 239
18.2 控制台I O 函数 239
18.2.1 格式化的控制台I O 函数 240
18.2.2 sprintf() 和sscanf() 函数 244
18.2.3 未格式化的控制台I O 函数 245
习题 246
课后笔记 249
第 19 章 文件输入输出 251
本章内容 252
19.1 文件操作 253
19.1.1 打开文件 253
19.1.2 读取文件 254
19.1.3 关闭文件 255
19.2 对字符、制表符、空格等进行计数 255
19.3 一个文件复制程序 256
19.4 文件打开模式 257
19.5 文件中的字符串(行)I O 257
19.6 文本文件和二进制文件 259
19.7 文件中的记录I O 259
19.8 低层文件I O 262
19.9 程序 264
习题 266
课后笔记 267
第 20 章 关于输入输出的更多知识 271
本章内容 272
20.1 使用argc 和argv 273
20.2 在读取 写入时检测错误 275
20.3 标准文件指针 276
20.4 I O 重定向 276
20.4.1 输出重定向 276
20.4.2 输入重定向 277
20.4.3 同时重定向 278
习题 278
课后笔记 279
第 21 章 对位进行操作 281
本章内容 282
21.1 位的编号和转换 283
21.2 位操作 284
21.3 反码操作符 284
21.4 右移位和左移位操作符 285
21.4.1 警告 286
21.4.2 << 操作符的用途 287
21.5 AND、OR 和XOR 位操作符 287
21.5.1 & 操作符的用途 288
21.5.2 | 操作符的用途 289
21.5.3 ^ 操作符的用途 289
21.6 showbits() 函数 290
21.7 位复合赋值操作符 290
21.8 程序 291
习题 292
课后笔记 294
第 22 章 C 语言的其他特性 295
本章内容 296
22.1 枚举数据类型 297
22.1.1 枚举数据类型的用途 297
22.1.2 枚举真有必要吗 298
22.2 使用typedef 对数据类型进行重命名 299
22.3 强制类型转换 300
22.4 位段 300
22.5 函数指针 301
22.6 返回指针的函数 302
22.7 接收可变数量参数的函数 302
22.8 联合体 303
22.9 volatile 限定符 306
22.10 程序 306
习题 307
课后笔记 309
第 23 章 常见的C 语言面试问题 311
附录A 编译和运行 325
附录B 优先级表格 331
附录C 追踪缺陷 333
附录D ASCII 表 339
附录E 阶段测验 343
作者简介
亚沙万特,.卡内特卡尔(Yashavant Kanetkar)是一位极受欢迎的IT 领域演说家,在TedEx、印度理工学院(IIT)、印度国家理工学院(NIT)、印度信息技术学院(IIIT)和一些全球软件公司举办过研讨会和讲习班。他的作品在世界范围内广受欢迎,数以百万计的学生和专业人员从中受益。他的作品被翻译为印地语、古吉拉特语、英语、日语、韩语和汉语,分别在印度、美国、日本、韩国和中国出版。由于在创业、专业以及教育方面的建树,他被印度理工学院坎普尔校区授予久负盛名的“杰出校友奖”(distinguished alumnus award)。连续5 年,他被微软公司授予“Z佳.NET 技术撰稿人”和“Z有价值专家”称号。