《C语言宝典 第2版》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:刘丕顺主编
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2011
  • ISBN:9787121127380
  • 页数:638 页
图书介绍:本书共分为5篇,详细介绍了C语言的基础知识、C语言的程序分析方法、调试方法、常见的问题的编程方法以及初学者易犯的错误。本书循序渐进的讲述了C语言基础知识、三种基本控制结构、数组、指针、结构体共用体、文件、底层操作等主要内容,并穿插讲述了一些编译预处理知识和程序设计方法及调试方法等。本书的最后部分,介绍了利用C语言编写的功能比较完备的程序设计过程以及源程序的代码,使读者对C语言程序设计有一个比较完整的设计思路,同时又可以加强对C语言常用的基础知识的理解和程序调试的掌握,还能掌握通用的软件开发过程。

第1部分基础篇 1

第1章认识C语言 2

1.1计算机语言及程序的发展 2

1.1.1计算机语言的历史 2

1.1.2C语言的特点 3

1.2从Hello程序认识C程序 4

1.3程序的实例解析与升华 4

1.3.1简单例题的引申 5

1.3.2C语言程序的组成 6

1.3.3常见的错误解析与解决办法 7

1.4C语言基本组成 9

1.4.1常见的语法规范 9

1.4.2代码编写规范 10

1.5C语言程序的调试过程 11

1.5.1Turbo C 2.0集成开发环境介绍及使用 11

1.5.2Turbo C 2.0运行程序的步骤 14

1.5.3程序编译中常见问题 15

1.6本章的问与答 16

1.6.1编译和运行有什么不同 16

1.6.2如何评价一个程序的好坏 16

1.7小结 17

第2章数据类型、常量和变量 18

2.1数据及数据类型 18

2.1.1C语言常见的数据类型介绍 18

2.1.2常量 19

2.1.3变量 20

2.2常量及常量的应用 21

2.2.1整型常量 21

2.2.2实型常量 23

2.2.3字符常量 24

2.2.4字符串常量 26

2.2.5常量使用时的错误分析 26

2.3变量及变量的应用 28

2.3.1整型变量 28

2.3.2实型变量 30

2.3.3字符型变量 32

2.3.4变量的使用规范 33

2.3.5变量常见错误分析方法 35

2.4本章的问与答 36

2.4.1编写程序的风格很重要吗 36

2.4.2数据结构与数据类型是一回事吗 36

2.4.3main是关键字吗 36

2.4.4说明一个变量和定义一个变量有什么区别 36

2.4.5用const说明常量有什么好处 37

2.5小结 37

第3章运算符与表达式 38

3.1C语言中的运算符及表达式 38

3.1.1运算符及其学习要点 38

3.1.2表达式及其求值顺序 40

3.2运算中的数据类型转换 41

3.2.1强制类型转换 41

3.2.2隐含类型转换 42

3.3算术运算符与算术表达式 43

3.3.1基本算术运算符 43

3.3.2特殊的算术运算符—自加和自减 44

3.3.3常见错误分析与解决方法 46

3.4赋值运算符和赋值表达式 48

3.4.1简单的赋值运算符 48

3.4.2复合赋值运算符 49

3.4.3赋值表达式的运算 50

3.4.4常见错误分析与解决方法 51

3.5逗号运算符和逗号表达式 52

3.6关系运算符和关系表达式 53

3.6.1C语言中的真值和假值 53

3.6.2关系运算符 53

3.6.3关系表达式 54

3.6.4常见错误分析 55

3.7逻辑运算符和逻辑表达式 56

3.7.1逻辑运算符 56

3.7.2逻辑表达式 56

3.7.3常见错误分析 59

3.8条件运算符和条件表达式 59

3.9sizeof运算符 60

3.10取地址运算符 61

3.11几种运算符混合运用与常见的问题分析 62

3.12本章的问与答 63

3.12.1什么是左值(lvalue),什么是右值(rvalue) 63

3.12.2运算符的优先级总能保证“自左至右”或“自右至左”的顺序吗 63

3.12.3表达式和语句有区别吗 64

3.12.4什么时候应该使用类型强制转换 64

3.12.5对不同类型的变量进行算术运算会有问题吗 64

3.13小结 64

第4章顺序程序设计 66

4.1C程序基本结构 66

4.2C语句概述 67

4.2.1表达式语句 67

4.2.2流程控制语句 69

4.2.3跳转语句 69

4.2.4复合语句 69

4.2.5空语句 70

4.3库函数的调用与输入输出的关系 71

4.4格式化输出 72

4.4.1printf函数的一般格式 72

4.4.2printf函数中的格式控制说明 73

4.4.3整型数据的输出 74

4.4.4字符型数据的输出 75

4.4.5实型数据的输出 76

4.4.6字符串的输出 77

4.4.7格式化输出的使用实例分析与常见错误 78

4.5字符输出 79

4.6格式化输入 80

4.6.1scanf函数的一般格式 80

4.6.2scanf函数中的格式控制说明 81

4.6.3格式化输入的使用实例分析与常见的错误 82

4.7字符输入 85

4.7.1getch()和getche()函数 85

4.7.2getchar 数 86

4.8变量如何得到正确的输入数据 87

4.9顺序结构程序典型例题分析与升华 87

4.10本章的问与答 91

4.10.1为什么有时不应该用scanf()来接收数据 91

4.10.2怎样用0补齐一个数字 92

4.10.3怎样判断一个字符是否是字母或数字 92

4.11小结 93

第5章选择程序设计 94

5.1典型的选择问题的程序设计思路 94

5.2用if语句设计选择程序 94

5.2.1if语句的形式:单条件单分支的if语句 95

5.2.2if语句的形式:单条件双分支的if语句 96

5.3if语句的嵌套 99

5.3.1单条件单分支if语句嵌套单条件单分支的if语句 100

5.3.2单条件单分支if语句嵌套单条件双分支的if语句 100

5.3.3单条件双分支if语句的嵌套 101

5.3.4嵌套时if与else的配对规则 105

5.4if语句的使用实例与升华 108

5.5if语句的常见错误与解决方法 112

5.6用switch分支设计选择程序 113

5.6.1switch分支介绍 114

5.6.2switch分支处理的程序特点 117

5.6.3switch分支的使用实例 118

5.6.4switch分支的常见错误与解决方法 119

5.7选择型问题实例的剖析与升华 121

5.8本章常见问题的问与答 123

5.8.1选择程序中如何加入注释 123

5.8.2switch语句的最后一个分支可以不要break语句吗 124

5.8.3共有几种退出switch分支的方法 124

5.8.4什么时候用一条switch语句比用多条if语句更好 124

5.9小结 124

第6章循环结构程序设计 125

6.1典型的循环问题程序设计思路 125

6.2while语句处理的循环 126

6.2.1while语句介绍 126

6.2.2while语句使用要求 128

6.2.3while语句的使用实例 130

6.2.4常见while语句典型程序分析 132

6.2.5while语句的常见错误与解决方法 135

6.3 do …while循环 136

6.3.1 do … while语句介绍 136

6.3.2 do … while语句与while语句的联系与区别 138

6.3.3 do … while语句的使用实例 139

6.3.4常见do … while语句的典型程序分析 140

6.3.5do … while语句的常见错误与解决方法 143

6.4for循环 144

6.4.1for语句介绍 144

6.4.2for语句的特点 146

6.4.3for语句的使用实例与升华 147

6.4.4常见for语句的典型程序分析 149

6.4.5for语句的常见错误与解决方法 153

6.5流程控制语句 154

6.5.1break语句 154

6.5.2continue语句 157

6.5.3break与continue常见的使用错误 159

6.5.4goto语句及其使用 160

6.6循环程序的分析方法 161

6.6.1while循环分析 162

6.6.2do…while循环分析 162

6.6.3for循环分析 163

6.6.4带break与continue语句的循环程序分析 164

6.7循环程序的例题 166

6.8多重循环—循环的嵌套 168

6.8.1循环嵌套的含义 169

6.8.2循环嵌套实例与升华 169

6.8.3循环嵌套的应用 171

6.8.4循环嵌套程序的易错点与程序分析 175

6.9循环实例分析 177

6.10本章常见问题的问与答 179

6.10.1如何为循环程序添加注释 179

6.10.2循环结构应该如何学习 180

6.10.3怎样才能知道循环是否提前结束 180

6.10.4空循环和无穷循环有什么区别 180

6.11小结 181

第2部分进阶篇 183

第7章数组 184

7.1认识数组 184

7.2一维数组 185

7.2.1一维数组的定义 185

7.2.2一维数组的引用 186

7.2.3一维数组的初始化 188

7.3一维数组的使用 190

7.3.1一维数组的使用实例与升华 190

7.3.2一维数组使用中的常见错误与解决方法 192

7.3.3常见一维数组典型程序分析 193

7.4二维数组 198

7.4.1二维数组的定义 198

7.4.2二维数组的引用 199

7.4.3二维数组的初始化 201

7.5二维数组的使用 203

7.5.1二维数组的使用实例与升华 203

7.5.2二维数组使用中的常见错误与解决方法 205

7.5.3常见二维数组典型程序的分析与书写 206

7.6使用数组的程序分析 210

7.7数组实例的剖析与升华 212

7.8本章常见问题的问与答 214

7.8.1数组是基本数据类型吗 214

7.8.2定义数组以后,如果处理的元素超出了数组的范围,如何处理 214

7.8.3数组的下标总是从0开始吗 214

7.8.4为什么要小心使用数组不要越界 214

7.8.5数组可以是左值吗 215

7.9小结 215

第8章函数 216

8.1程序的模块化 216

8.2函数的定义 218

8.2.1C语言函数的简介 219

8.2.2函数的定义 220

8.3函数的调用 222

8.3.1函数调用的一般形式 222

8.3.2被调函数声明和函数原型 224

8.4数据在函数间的传递 226

8.4.1形式参数和实际参数 226

8.4.2函数的返回值 228

8.5数组作为函数的参数 229

8.5.1一维数组作为函数的参数 230

8.5.2二维数组作为函数的参数 233

8.6函数的嵌套调用 234

8.6.1嵌套调用的程序结构 234

8.6.2程序实例的应用 235

8.7函数的递归调用 236

8.7.1递归的含义 236

8.7.2递归程序的分析 238

8.7.3递归程序的实例构思 240

8.8函数使用的常见错误分析 244

8.9典型函数程序实例 245

8.10本章常见问题的问与答 247

8.10.1什么叫函数 247

8.10.2函数的说明与定义的区别 247

8.10.3什么是函数参数以及如何传递函数参数 248

8.10.4一个函数可以有多少个参数 248

8.10.5如果一个函数没有返回值,是否需要加入return语句 248

8.10.6exit()和return有什么不同 248

8.10.7为什么要说明函数原型 248

8.11小结 249

第9章作用域与程序设计 250

9.1变量的作用域 250

9.1.1局部变量 250

9.1.2全局变量 252

9.2变量的存储属性 255

9.3局部变量的存储类别 256

9.3.1自动变量 256

9.3.2静态局部变量 257

9.3.3寄存器变量 258

9.4全局变量的存储类别 259

9.4.1外部全局变量 259

9.4.2静态全局变量 260

9.5常见变量存储的错误分析与解决 261

9.6应用不同存储属性的变量的程序例题分析 263

9.7函数的作用域 264

9.7.1外部函数 264

9.7.2内部函数 265

9.7.3函数的应用 265

9.7.4多个源程序文件的编译和连接 266

9.8简单的程序设计实验 267

9.9本章常见问题的问与答 273

9.9.1文件中增加了函数与变量的存储属性的时候,常见的注释风格是怎样的 273

9.9.2变量存储在内存中的什么地方 273

9.9.3所有变量必须初始化吗 274

9.10小结 274

第10章指针 275

10.1地址和指针的概念 275

10.2变量的指针 277

10.2.1指针变量的定义 277

10.2.2指针变量的赋值与引用 278

10.3指针变量的运算 281

10.3.1&和*运算 281

10.3.2++和--运算以及加减整型常量的运算 282

10.3.3比较运算 283

10.3.4减法运算 284

10.4指针变量作为函数的参数 285

10.4.1以普通变量作为参数完成交换函数 287

10.4.2以指针变量作为参数实现数据的交换 287

10.4.3交换指针变量指向的内容 287

10.5指针变量实例中常见的错误分析与解决 288

10.6指针与一维数组 289

10.6.1指向一维数组元素的指针 289

10.6.2用指针访问一维数组元素 291

10.6.3一维数组作为函数参数 293

10.6.4一维数组作为函数参数的实例 296

10.7指针与二维数组 298

10.7.1处理二维数组中所有元素的指针变量 300

10.7.2使用指向一维数组的指针处理二维数组 301

10.7.3二维数组作为函数参数 303

10.7.4二维数组作为函数参数的实例 304

10.8指针与数组常见的错误分析与解决 305

10.9指针数组与二级指针 306

10.9.1指针数组的概念 306

10.9.2指针数组的应用 309

10.9.3二级指针 311

10.9.4指针数组作为主函数的参数 313

10.9.5指针数组与二级指针常见错误分析与解决 314

10.10指向函数的指针及返回指针的函数 315

10.10.1用函数指针调用函数 315

10.10.2用指向函数的指针作为函数的参数 316

10.10.3返回指针的函数 319

10.11应用例题及实验设计模板 320

10.12本章常见问题的问与答 322

10.12.1指针使用的常见形式有哪些 322

10.12.2什么是void指针 322

10.12.3什么时候使用void指针 322

10.12.4NULL总是被定义为0吗 322

10.12.5用指针作if语句的条件表达式意味什么 322

10.12.6NULL和NUL有什么不同 323

10.13小结 323

第11章字符串 324

11.1字符串与字符串的结束标志 324

11.2字符数组与字符串 324

11.2.1字符数组的定义 324

11.2.2字符数组的初始化 325

11.2.3字符数组的输入输出 327

11.2.4字符数组处理字符串的应用实例 330

11.2.5字符数组处理字符串常见的错误分析与解决 333

11.3常用字符串处理函数 334

11.3.1strcpy(字符数组,字符串):字符串复制函数 335

11.3.2strcat(字符数组1,字符数组2):字符串连接函数 336

11.3.3strcmp(字符串1,字符串2):字符串比较函数 336

11.3.4strlen(字符串):求字符串长度函数 337

11.4指针与字符串 339

11.4.1字符串的表示形式 339

11.4.2字符串指针作为函数参数 342

11.4.3字符串常见错误分析 344

11.5典型例题分析与升华 345

11.6本章常见问题的问与答 346

11.6.1字符是带符号的还是无符号的 346

11.6.2字符串和数组有什么不同 347

11.6.3字符类型与整型的根本区别是什么 347

11.6.4可以将数字形式的字符串转换为数字吗 347

11.7小结 348

第3部分高级篇 349

第12章编译预处理 350

12.1预处理程序 350

12.2宏定义指令 351

12.2.1不带参数的宏定义 351

12.2.2带参数的宏定义 356

12.2.3常见的宏定义错误解析 360

12.3文件包含指令 361

12.4条件编译指令 363

12.4.1#if~#endif条件编译指令 364

12.4.2#if~#else~#endif条件编译指令 364

12.4.3#if~#elif~#else~#endif条件编译指令 365

12.4.4#ifdef格式 366

12.4.5#ifndef格式 366

12.4.6条件编译的应用 367

12.5本章常见问题的问与答 369

12.5.1都有哪些预处理命令 369

12.5.2下面程序的运行结果是什么 369

12.5.3可以用#include指令包含类型名不是“h”的文件吗 369

12.5.4使用宏更好还是使用函数更好 369

12.5.5用#define指令说明常量有什么好处 370

12.6小结 370

第13章程序设计与调试 371

13.1程序设计简介 371

13.2程序调试 374

13.2.1调试的概念 374

13.2.2调试程序 375

13.2.3查错 376

13.2.4常用的避免错误的方法 380

13.3程序的挂起 382

13.3.1未知原因的挂起 382

13.3.2死循环 383

13.3.3运行时间比期望的时间长 384

13.3.4等待正确的输入 385

13.4小结 385

第14章结构体和共用体 386

14.1结构体的概念及结构类型定义 386

14.2结构体变量 388

14.2.1结构体变量的定义 388

14.2.2结构体变量的引用 391

14.2.3结构体变量的初始化 393

14.2.4结构体变量作为函数的参数 395

14.3结构体数组 397

14.3.1结构体数组的定义及引用 398

14.3.2结构体数组的初始化 400

14.3.3结构体数组作为函数的参数 402

14.4结构体指针 405

14.4.1指向结构体变量的指针 405

14.4.2指向结构体数组的指针 407

14.4.3用指向结构体的指针作为函数参数 410

14.5结构体变量常见的错误分析与解决 412

14.6共用体 414

14.6.1共用体的概念 415

14.6.2共用体变量的定义和引用 416

14.6.3共用体应用 420

14.7枚举类型 422

14.7.1枚举类型简介 422

14.7.2枚举变量的定义与应用 423

14.7.3枚举类型常见的错误分析 426

14.8本章常见问题的问与答 427

14.8.1结构体变量的数据传到另外的函数中有几种方法 427

14.8.2用enum关键字说明常量有什么好处 427

14.8.3和用#define指令说明常量相比…用enum关键字说明常量有什么好处 428

14.9小结 428

第15章自定义类型与链表 429

15.1typedef自定义类型 429

15.2动态内存管理 431

15.2.1malloc函数 432

15.2.2calloc函数 432

15.2.3free函数 433

15.2.4realloc函数 433

15.3链表 435

15.3.1链表简介 435

15.3.2建立单链表 437

15.3.3尾插法建立单链表 437

15.3.4头插法建立单链表 440

15.3.5单链表元素的遍历 441

15.4单链表中进行的基本操作 442

15.4.1单链表中查找元素 442

15.4.2按照序号查找 443

15.4.3按照指定值进行查找 443

15.4.4单链表中元素的插入和删除 444

15.4.5单链表中元素的合并 448

15.5单循环链表和双向链表简介 450

15.5.1单循环链表 450

15.5.2双向链表 451

15.5.3在双向链表中插入一个节点 452

15.5.4在双向链表中删除一个节点 453

15.6单链表设计实例与升华 454

15.7自定义类型与链表常见的错误分析与解决 457

15.8本章常见问题的问与答 458

15.8.1什么是线性结构,单链表是不是线性结构,为什么 458

15.8.2类型void*说明什么样的返回值 458

15.8.3本章中函数的参数类型已经是指针类型,为什么还通过返回值把链表的头指针的值返回,而不是通过参数直接改变呢 459

15.8.4NULL总是被定义为0吗 459

15.8.5用malloc()函数更好,还是用calloc()函数更好 459

15.9小结 459

第4部分底层开发篇 461

第16章位与字节 462

16.1数值数据的表示和编码 462

16.1.1数据进制 462

16.1.2数据存储 464

16.2位运算 465

16.2.1位运算简介 465

16.2.2按位与运算符“&” 466

16.2.3按位或运算符“︳” 468

16.2.4按位异或运算符“?” 469

16.2.5按位取反运算符“~” 471

16.2.6按位左移运算符﹤﹤ 471

16.2.7按位右移运算符“?” 472

16.2.8位运算赋值运算符 473

16.2.9位运算符的使用情况和实例分析 474

16.3位运算的应用 475

16.4位段及应用 478

16.4.1位段的定义 478

16.4.2位段的应用 480

16.5位运算的常见错误分析与解决 484

16.6本章的问与答 485

16.6.1对位(bit)和字节(byte)的区分到底是什么 485

16.6.2用什么方法存储标志(flag)效率最高 485

16.6.3移位和乘以2这两种方式中哪一种更好 486

16.6.4什么是高位字节和低位字节 486

16.6.516位和32位的数是怎样存储的 486

16.7小结 487

第17章文件 488

17.1文件系统概述 488

17.2文件指针 491

17.3文件打开与关闭 492

17.3.1打开文件 493

17.3.2关闭文件 495

17.4文件读写函数 497

17.4.1读写字符 497

17.4.2使用fgets()和fputs()处理字符串 501

17.4.3读写磁盘文件 504

17.4.4成组读写 507

17.5文件的定位 509

17.5.1定位到开头 509

17.5.2随机读写 510

17.5.3返回位置 512

17.6错误检测 513

17.6.1ferror()函数 513

17.6.2clearerr()函数 513

17.7文件使用常见错误分析 514

17.8文件例题分析与升华 516

17.9本章常见问题的问与答 519

17.9.1什么是C语言中的文件 519

17.9.2在对文件进行操作的时候,如果要求文件的位置回到文件的开头,应当用到哪个函数 519

17.9.3设fp为文件指针,如果打开一个已经存在的非空文件aa.txt进行修改,应该用什么语句实现 519

17.9.4文件的分类是什么,到底什么是流式文件,是不是文件分类的一种 519

17.9.5读文件和写文件是什么 520

17.9.6如何选择读写函数 520

17.9.7缓冲文件系统是什么 520

17.10小结 520

第18章屏幕和键盘的控制 521

18.1文本窗口 521

18.1.1文本方式 521

18.1.2文本窗口的使用 522

18.1.3窗口内文本的输入输出 524

18.1.4键盘的使用 527

18.1.5具体应用实例—下拉式菜单 529

18.2C语言绘图概述 532

18.2.1图形显示 532

18.2.2图形系统初始化 533

18.2.3图形屏幕的颜色设置 536

18.2.4清除屏幕 537

18.3 C语言中绘图函数的使用 539

18.3.1绘图函数 539

18.3.2线型函数 545

18.3.3填充函数 546

18.3.4自定义窗口 548

18.4图形文本 549

18.4.1文本输出函数 550

18.4.2设置图形文本属性 551

18.5绘图常见错误说明 553

18.6绘图典型例题分析 555

18.7本章的问与答 556

18.7.1什么是像素 556

18.7.2什么是分辨率 556

18.7.3怎样在屏幕上定位光标 557

18.7.4什么时候使用far指针 557

18.8小结 557

第19章系统调用 559

19.1DOS、BIOS与中断简介 559

19.2DOS下的设备控制 560

19.2.1软中断调用函数 560

19.2.2中断设置函数 563

19.2.3端口输入输出函数 565

19.2.4内存操作函数 566

19.3系统驻留程序简介 567

19.4系统函数调用常见错误解析 569

19.5利用中断实现多任务的实例分析 570

19.6本章常见问题的问与答 571

19.6.1DOS是什么 571

19.6.2如何获得具体信息的内存位置 572

19.6.3什么是缓冲区 572

19.6.4什么是环境 572

19.7小结 572

第20章从C到C++ 573

20.1C++对C的扩充 573

20.1.1 C++中输入/输出方式 573

20.1.2新增运算符和关键字简介 575

20.1.3引用 577

20.1.4函数重载 579

20.1.5函数内联 580

20.2面向对象语言的概念 581

20.2.1面向对象的概念 581

20.2.2类的定义 582

20.2.3对象的创建 584

20.2.4对象的继承 586

20.2.5多态性 588

20.3 C++常见的基础错误解析 589

20.4本章的问与答 590

20.4.1C程序员为什么要学习C++++ 590

20.4.2“//”是什么 590

20.4.3C++到底新增了什么知识点 590

20.4.4如何理解抽象 590

20.4.5什么是封装性 591

20.4.6什么是继承性 591

20.4.7什么是多态性 591

20.5小结 592

第5部分应用实例篇 593

第21章应用实例1—复杂表达式求值 594

21.1问题分析 594

21.2概要设计 595

21.2.1全局数据设计 595

21.2.2系统结构设计 595

21.3模块详细设计及实现 597

21.3.1isdelim(char c)函数的实现 597

21.3.2serror(int error) 函数的实现 597

21.3.3get exp ()函数的实现 597

21.3.4atom(double *)函数的实现 598

21.3.5一系列计算函数的实现 598

21.3.6main() 函数的实现 600

21.4程序的测试及维护 601

第22章应用实例2—简单的文本编辑器 602

22.1问题分析 602

22.2概要设计 602

22.2.1全局数据设计 602

22.2.2系统结构设计 603

22.3模块详细设计及实现 604

22.3.1opens(Line *head)函数的实现 604

22.3.2save(Line *head)函数的实现 605

22.3.3view(Line *head) 函数的实现 606

22.3.4qview(Line*q)函数的实现 607

22.3.5color(Line *Hhead)函数的实现 607

22.3.6check(Line *head,int m,int n)函数的实现 607

22.3.7border (int x,int y,int width,int height)函数的实现 608

22.3.8draw m() 函数的实现 608

22.3.9drawmenu(int m,int n) 函数的实现 609

22.3.10menuctrl(Line *Hhead,int key) 函数的实现 610

22.3.11main()函数的实现 611

22.4程序的测试及维护 614

第23章应用实例3—图书管理系统 617

23.1问题分析 617

23.2概要设计 617

23.2.1全局数据设计 617

23.2.2系统结构设计 619

23.3模块详细设计及实现 621

23.3.1new_bk()函数和new_bl()函数的实现 621

23.3.2save_bk(Book*)函数和save_bl(Bk_lender *)函数的实现 623

23.3.3read_bk()函数和read_bl() 函数的实现 624

23.3.4search_bk(Book*)函数的实现 625

23.3.5insert_bk(Book*)函数和insert_bl(Bk_lender *)函数的实现 626

23.3.6delete_bk(Book *)函数和delete_bl(Bk_ lender*)函数的实现 628

23.3.7modify_bk(Book *)函数的实现 630

23.3.8lendbook(Bk_lender *,Book *)函数的实现 631

23.3.9retumbook(Bk_ lender *,Book*)函数的实现 632

23.3.10 disp_bk(Book*)函数和disp_bl(Bk_lender*)函数的实现 633

23.3.11 3个菜单函数的实现 634

23.3.12 main()函数的实现 635

23.4程序的测试及维护 637

23.5程序实现 637

23.6小结 638