c语言字符串很长如何换货,C语言程序设计:现代方法:第2版

第1章 C语言概述1

1.1 C语言的历史1

1.1.1 起源1

1.1.2 标准化1

1.1.3 基于C的语言2

1.2 C语言的优缺点3

1.2.1 C语言的优点3

1.2.2 C语言的缺点3

1.2.3 高效地使用C语言4

问与答5

第2章 C语言基本概念7

2.1 编写一个简单的C程序7

程序 显示双关语7

2.1.1 编译和链接8

2.1.2 集成开发环境8

2.2 简单程序的一般形式9

2.2.1 指令9

2.2.2 函数9

2.2.3 语句10

2.2.4 显示字符串10

2.3 注释11

2.4 变量和赋值12

2.4.1 类型12

2.4.2 声明13

2.4.3 赋值13

2.4.4 显示变量的值14

程序 计算箱子的空间重量14

2.4.5 初始化15

2.4.6 显示表达式的值16

2.5 读入输入16

程序 计算箱子的空间重量(改进版)16

2.6 定义常量的名字17

程序 华氏温度转换为摄氏温度17

2.7 标识符18

2.8 C程序的书写规范19

问与答21

练习题23

编程题24

第3章 格式化输入/输出26

3.1 printf函数26

3.1.1 转换说明27

程序 用printf函数格式化数28

3.1.2 转义序列28

3.2 scanf函数29

3.2.1 scanf函数的工作方法30

3.2.2 格式串中的普通字符31

3.2.3 易混淆的printf函数和scanf

函数32

程序 分数相加32

问与答33

练习题34

编程题35

第4章 表达式36

4.1 算术运算符36

程序 计算通用产品代码的校验位38

4.2 赋值运算符39

4.2.1 简单赋值40

4.2.2 左值41

4.2.3 复合赋值41

4.3 自增运算符和自减运算符42

4.4 表达式求值43

4.5 表达式语句45

问与答45

练习题47

编程题49

第5章 选择语句50

5.1 逻辑表达式50

5.1.1 关系运算符50

5.1.2 判等运算符51

5.1.3 逻辑运算符51

5.2 if语句52

5.2.1 复合语句53

5.2.2 else子句53

5.2.3 级联式if语句54

程序 计算股票经纪人的佣金55

5.2.4 “悬空else”的问题56

5.2.5 条件表达式57

5.2.6 C89中的布尔值58

5.2.7 C99中的布尔值 58

5.3 switch语句59

程序 显示法定格式的日期61

问与答62

练习题65

编程题67

第6章 循环69

6.1 while语句69

程序 显示平方表71

程序 数列求和71

6.2 do语句72

程序 计算整数的位数73

6.3 for语句73

6.3.1 for语句的惯用法74

6.3.2 在for语句中省略表达式75

6.3.3 C99中的for语句 75

6.3.4 逗号运算符76

程序 显示平方表(改进版)77

6.4 退出循环78

6.4.1 break语句78

6.4.2 continue语句78

6.4.3 goto语句79

程序 账簿结算80

6.5 空语句81

问与答83

练习题84

编程题85

第7章 基本类型88

7.1 整数类型88

7.1.1 C99中的整数类型 90

7.1.2 整数常量90

7.1.3 C99中的整数常量 91

7.1.4 整数溢出91

7.1.5 读/写整数91

程序 数列求和(改进版)92

7.2 浮点类型93

7.2.1 浮点常量94

7.2.2 读/写浮点数94

7.3 字符类型94

7.3.1 字符操作95

7.3.2 有符号字符和无符号字符95

7.3.3 算术类型96

7.3.4 转义序列96

7.3.5 字符处理函数97

7.3.6 用scanf和printf读/写字符98

7.3.7 用getchar和putchar读/写

字符98

程序 确定消息的长度99

7.4 类型转换100

7.4.1 常用算术转换101

7.4.2 赋值过程中的转换102

7.4.3 C99中的隐式转换 103

7.4.4 强制类型转换103

7.5 类型定义105

7.5.1 类型定义的优点105

7.5.2 类型定义和可移植性105

7.6 sizeof运算符106

问与答107

练习题109

编程题110

第8章 数组113

8.1 一维数组113

8.1.1 数组下标113

程序 数列反向115

8.1.2 数组初始化115

8.1.3 指定初始化式 116

程序 检查数中重复出现的数字116

8.1.4 对数组使用sizeof运算符117

程序 计算利息118

8.2 多维数组119

8.2.1 多维数组初始化120

8.2.2 常量数组121

程序 发牌121

8.3 C99中的变长数组 122

问与答123

练习题124

编程题125

第9章 函数129

9.1 函数的定义和调用129

程序 计算平均值129

程序 显示倒计数130

程序 显示双关语(改进版)131

9.1.1 函数定义132

9.1.2 函数调用133

程序 判定素数134

9.2 函数声明135

9.3 实际参数136

9.3.1 实际参数的转换137

9.3.2 数组型实际参数138

9.3.3 变长数组形式参数 140

9.3.4 在数组参数声明中使用

static 141

9.3.5 复合字面量 141

9.4 return语句142

9.5 程序终止143

9.6 递归144

程序 快速排序146

问与答147

练习题150

编程题153

第10章 程序结构155

10.1 局部变量155

10.1.1 静态局部变量156

10.1.2 形式参数156

10.2 外部变量156

10.2.1 示例:用外部变量实现栈156

10.2.2 外部变量的利与弊157

程序  猜数158

10.3 程序块161

10.4 作用域162

10.5 构建C程序163

程序 给一手牌分类163

问与答169

练习题169

编程题170

第11章 指针172

11.1 指针变量172

11.2 取地址运算符和间接寻址运算符173

11.2.1 取地址运算符173

11.2.2 间接寻址运算符174

11.3 指针赋值174

11.4 指针作为参数176

程序 找出数组中的最大元素和最

小元素177

11.5 指针作为返回值179

问与答180

练习题181

编程题182

第12章 指针和数组184

12.1 指针的算术运算184

12.1.1 指针加上整数185

12.1.2 指针减去整数185

12.1.3 两个指针相减186

12.1.4 指针比较186

12.1.5 指向复合常量的指针 186

12.2 指针用于数组处理186

12.3 用数组名作为指针188

程序  数列反向(改进版)189

12.3.1 数组型实际参数(改进版)189

12.3.2 用指针作为数组名191

12.4 指针和多维数组191

12.4.1 处理多维数组的元素191

12.4.2 处理多维数组的行192

12.4.3 处理多维数组的列192

12.4.4 用多维数组名作为指针192

12.5 C99中的指针和变长数组 193

问与答194

练习题195

编程题197

第13章 字符串198

13.1 字符串字面量198

13.1.1 字符串字面量中的转义序列198

13.1.2 延续字符串字面量199

13.1.3 如何存储字符串字面量199

13.1.4 字符串字面量的操作200

13.1.5 字符串字面量与字符常量200

13.2 字符串变量200

13.2.1 初始化字符串变量201

13.2.2 字符数组与字符指针202

13.3 字符串的读和写203

13.3.1 用printf函数和puts函数

写字符串203

13.3.2 用scanf函数和gets函数读

字符串203

13.3.3 逐个字符读字符串204

13.4 访问字符串中的字符205

13.5 使用C语言的字符串库206

13.5.1 strcpy函数207

13.5.2 strlen函数208

13.5.3 strcat函数208

13.5.4 strcmp函数209

程序  显示一个月的提醒列表209

13.6 字符串惯用法211

13.6.1 搜索字符串的结尾211

13.6.2 复制字符串213

13.7 字符串数组214

程序  核对行星的名字217

问与答218

练习题220

编程题222

第14章 预处理器225

14.1 预处理器的工作原理225

14.2 预处理指令227

14.3 宏定义227

14.3.1 简单的宏227

14.3.2 带参数的宏229

14.3.3 #运算符231

14.3.4 ##运算符231

14.3.5 宏的通用属性232

14.3.6 宏定义中的圆括号233

14.3.7 创建较长的宏233

14.3.8 预定义宏234

14.3.9 C99中新增的预定义宏 235

14.3.10 空的宏参数 236

14.3.11 参数个数可变的宏 236

14.3.12 __func__标识符 237

14.4 条件编译237

14.4.1 #if指令和#endif指令238

14.4.2 defined运算符238

14.4.3 #ifdef指令和#ifndef

指令239

14.4.4 #elif指令和#else指令239

14.4.5 使用条件编译240

14.5 其他指令240

14.5.1 #error指令240

14.5.2 #line指令241

14.5.3 #pragma指令242

14.5.4 _Pragma运算符 242

问与答243

练习题245

第15章 编写大型程序248

15.1 源文件248

15.2 头文件249

15.2.1 #include指令249

15.2.2 共享宏定义和类型定义250

15.2.3 共享函数原型251

15.2.4 共享变量声明252

15.2.5 嵌套包含253

15.2.6 保护头文件253

15.2.7 头文件中的#error指令254

15.3 把程序划分成多个文件254

程序 文本格式化255

15.4 构建多文件程序260

15.4.1 makefile260

15.4.2 链接期间的错误262

15.4.3 重新构建程序262

15.4.4 在程序外定义宏264

问与答264

练习题265

编程题266

第16章 结构、联合和枚举267

16.1 结构变量267

16.1.1 结构变量的声明267

16.1.2 结构变量的初始化269

16.1.3 指定初始化 269

16.1.4 对结构的操作270

16.2 结构类型270

16.2.1 结构标记的声明271

16.2.2 结构类型的定义272

16.2.3 结构作为参数和返回值272

16.2.4 复合字面量 273

16.3 嵌套的数组和结构274

16.3.1 嵌套的结构274

16.3.2 结构数组274

16.3.3 结构数组的初始化275

程序  维护零件数据库275

16.4 联合281

16.4.1 用联合来节省空间282

16.4.2 用联合来构造混合的数据

结构284

16.4.3 为联合添加“标记字段”284

16.5 枚举285

16.5.1 枚举标记和类型名286

16.5.2 枚举作为整数286

16.5.3 用枚举声明“标记字段”286

问与答287

练习题289

编程题293

第17章 指针的高级应用294

17.1 动态存储分配294

17.1.1 内存分配函数294

17.1.2 空指针295

17.2 动态分配字符串296

17.2.1 使用malloc函数为字符串

分配内存296

17.2.2 在字符串函数中使用动态

存储分配296

17.2.3 动态分配字符串的数组297

程序  显示一个月的提醒列表

(改进版)297

17.3 动态分配数组299

17.3.1 使用malloc函数为数组分配

存储空间299

17.3.2 calloc函数300

17.3.3 realloc函数300

17.4 释放存储空间301

17.4.1 free函数301

17.4.2 “悬空指针”问题301

17.5 链表302

17.5.1 声明结点类型302

17.5.2 创建结点303

17.5.3 -)运算符303

17.5.4 在链表的开始处插入结点304

17.5.5 搜索链表306

17.5.6 从链表中删除结点307

17.5.7 有序链表308

程序  维护零件数据库(改进版)309

17.6 指向指针的指针313

17.7 指向函数的指针314

17.7.1 函数指针作为参数314

17.7.2 qsort函数314

17.7.3 函数指针的其他用途316

程序  列三角函数表317

17.8 受限指针 318

17.9 灵活数组成员 319

问与答320

练习题323

编程题325

第18章 声明327

18.1 声明的语法327

18.2 存储类型328

18.2.1 变量的性质328

18.2.2 auto存储类型329

18.2.3 static存储类型329

18.2.4 extern存储类型330

18.2.5 register存储类型331

18.2.6 函数的存储类型332

18.2.7 小结332

18.3 类型限定符333

18.4 声明符334

18.4.1 解释复杂声明335

18.4.2 使用类型定义来简化声明336

18.5 初始化式336

18.6 内联函数 337

18.6.1 内联定义338

18.6.2 对内联函数的限制339

18.6.3 在GCC中使用内联函数339

问与答339

练习题342

第19章 程序设计345

19.1 模块345

19.1.1 内聚性与耦合性347

19.1.2 模块的类型347

19.2 信息隐藏347

19.3 抽象数据类型350

19.3.1 封装351

19.3.2 不完整类型351

19.4 栈抽象数据类型352

19.4.1 为栈抽象数据类型定义接口352

19.4.2 用定长数组实现栈抽象数据

类型353

19.4.3 改变栈抽象数据类型中数据

项的类型354

19.4.4 用动态数组实现栈抽象数据

类型355

19.4.5 用链表实现栈抽象数据类型357

19.5 抽象数据类型的设计问题359

19.5.1 命名惯例359

19.5.2 错误处理359

19.5.3 通用抽象数据类型359

19.5.4 新语言中的抽象数据类型360

问与答360

练习题361

编程题362

第20章 底层程序设计363

20.1 位运算符363

20.1.1 移位运算符363

20.1.2 按位求反运算符、按位与运

算符、按位异或运算符和按

位或运算符364

20.1.3 用位运算符访问位365

20.1.4 用位运算符访问位域366

程序  XOR加密366

20.2 结构中的位域367

20.3 其他底层技术369

20.3.1 定义依赖机器的类型369

20.3.2 用联合提供数据的多个视角370

20.3.3 将指针作为地址使用371

程序  查看内存单元371

20.3.4 volatile类型限定符373

问与答374

练习题374

编程题376

第21章 标准库377

21.1 标准库的使用377

21.1.1 对标准库中所用名字的

限制377

21.1.2 使用宏隐藏的函数378

21.2 C89标准库概述378

21.3 C99标准库更新380

21.4 (stddef.h):常用定义381

21.5 (stdbool.h):布尔类型和值 381

问与答382

练习题382

编程题383

第22章 输入/输出384

22.1 流384

22.1.1 文件指针385

22.1.2 标准流和重定向385

22.1.3 文本文件与二进制文件385

22.2 文件操作386

22.2.1 打开文件386

22.2.2 模式387

22.2.3 关闭文件388

22.2.4 为打开的流附加文件389

22.2.5 从命令行获取文件名389

程序  检查文件是否可以打开389

22.2.6 临时文件390

22.2.7 文件缓冲391

22.2.8 其他文件操作392

22.3 格式化的输入/输出393

22.3.1 …printf函数393

22.3.2 …printf转换说明393

22.3.3 C99对…printf转换说明的

修改 395

22.3.4 …printf转换说明示例396

22.3.5 …scanf函数398

22.3.6 …scanf格式串398

22.3.7 …scanf转换说明398

22.3.8 C99对...scanf转换说明的

改变 400

22.3.9 scanf示例400

22.3.10 检测文件末尾和错误条件401

22.4 字符的输入/输出403

22.4.1 输出函数403

22.4.2 输入函数403

程序  复制文件404

22.5 行的输入/输出405

22.5.1 输出函数405

22.5.2 输入函数406

22.6 块的输入/输出406

22.7 文件定位407

程序  修改零件记录文件409

22.8 字符串的输入/输出409

22.8.1 输出函数410

22.8.2 输入函数410

问与答411

练习题414

编程题416

第23章 库对数值和字符数据的支持419

23.1 (float.h):浮点类型的特性419

23.2 (limits.h):整数类型的大小421

23.3 (math.h):数学计算(C89)422

23.3.1 错误422

23.3.2 三角函数422

23.3.3 双曲函数423

23.3.4 指数函数和对数函数423

23.3.5 幂函数424

23.3.6 就近取整函数、绝对值函数

和取余函数424

23.4 (math.h):数学计算(C99) 425

23.4.1 IEEE浮点标准425

23.4.2 类型426

23.4.3 宏426

23.4.4 错误426

23.4.5 函数427

23.4.6 分类宏427

23.4.7 三角函数428

23.4.8 双曲函数428

23.4.9 指数函数和对数函数429

23.4.10 幂函数和绝对值函数430

23.4.11 误差函数和伽玛函数430

23.4.12 就近取整函数431

23.4.13 取余函数432

23.4.14 操作函数432

23.4.15 最大值函数、最小值函数

和正差函数433

23.4.16 浮点乘加433

23.4.17 比较宏434

23.5 (ctype.h):字符处理434

23.5.1 字符分类函数435

程序  测试字符分类函数436

23.5.2 字符大小写映射函数437

程序  测试大小写映射函数437

23.6 (string.h):字符串处理437

23.6.1 复制函数437

23.6.2 拼接函数438

23.6.3 比较函数439

23.6.4 搜索函数440

23.6.5 其他函数442

问与答442

练习题443

编程题444

第24章 错误处理446

24.1 (assert.h):诊断446

24.2 (errno.h):错误447

24.3 (signal.h):信号处理448

24.3.1 信号宏449

24.3.2 signal函数449

24.3.3 预定义的信号处理函数450

24.3.4 raise函数450

程序  测试信号451

24.4 (setjmp.h):非局部跳转452

程序  测试setjmp和longjmp452

问与答453

练习题454

第25章 国际化特性456

25.1 (locale.h):本地化456

25.1.1 类别456

25.1.2 setlocale函数457

25.1.3 localeconv函数458

25.2 多字节字符和宽字符461

25.2.1 多字节字符461

25.2.2 宽字符461

25.2.3 统一码和通用字符集462

25.2.4 统一码编码462

25.2.5 多字节/宽字符转换函数463

25.2.6 多字节/宽字符串转换函数465

25.3 双字符和三字符465

25.3.1 三字符465

25.3.2 双字符466

25.3.3 (iso646.h):拼写替换467

25.4 通用字符名 467

25.5 (wchar.h):扩展的多字节和宽字符

实用工具 467

25.5.1 流倾向468

25.5.2 格式化宽字符输入/输出

函数468

25.5.3 宽字符输入/输出函数470

25.5.4 通用的宽字符串实用工具471

25.5.5 宽字符时间转换函数474

25.5.6 扩展的多字节/宽字符转换

实用工具474

25.6 (wctype.h):宽字符分类和映射实

用工具 477

25.6.1 宽字符分类函数477

25.6.2 可扩展的宽字符分类函数478

25.6.3 宽字符大小写映射函数478

25.6.4 可扩展的宽字符大小写映射

函数478

问与答479

练习题479

编程题480

第26章 其他库函数482

26.1 (stdarg.h):可变参数482

26.1.1 调用带有可变参数列表的

函数483

26.1.2 v…printf函数484

26.1.3 v…scanf函数 485

26.2 (stdlib.h):通用的实用工具485

26.2.1 数值转换函数485

程序  测试数值转换函数486

26.2.2 伪随机序列生成函数488

程序  测试伪随机序列生成函数488

26.2.3 与环境的通信489

26.2.4 搜索和排序实用工具490

程序  确定航空里程491

26.2.5 整数算术运算函数492

26.3 (time.h):日期和时间492

26.3.1 时间处理函数493

26.3.2 时间转换函数495

程序  显示日期和时间498

问与答500

练习题501

编程题502

第27章 C99对数学计算的新增支持503

27.1 (stdint.h):整数类型 503

27.1.1 (stdint.h)类型503

27.1.2 对指定宽度整数类型的限制504

27.1.3 对其他整数类型的限制505

27.1.4 用于整数常量的宏505

27.2 (inttypes.h):整数类型的格式

转换 506

27.2.1 用于格式说明符的宏506

27.2.2 用于最大宽度整数类型的

函数507

27.3 复数 508

27.3.1 复数的定义508

27.3.2 复数的算术运算509

27.3.3 C99中的复数类型509

27.3.4 复数的运算510

27.3.5 复数类型的转换规则510

27.4 (complex.h):复数算术运算 511

27.4.1 (complex.h)宏511

27.4.2 CX_LIMITED_RANGE编译

提示512

27.4.3 (complex.h)函数512

27.4.4 三角函数512

27.4.5 双曲函数513

27.4.6 指数函数和对数函数514

27.4.7 幂函数和绝对值函数514

27.4.8 操作函数514

程序  求二次方程的根515

27.5 (tgmath.h):泛型数学 515

27.5.1 泛型宏516

27.5.2 调用泛型宏517

27.6 (fenv.h):浮点环境 518

27.6.1 浮点状态标志和控制模式518

27.6.2 (fenv.h)宏519

27.6.3 FENV_ACCESS编译提示519

27.6.4 浮点异常函数520

27.6.5 舍入函数520

27.6.6 环境函数521

问与答521

练习题522

编程题523

附录A C语言运算符524

附录B C99与C89的比较525

附录C C89与经典C的比较529

附录D 标准库函数532

附录E ASCII字符集569

参考文献570

索引573

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值