图书介绍

C语言宝典 第2版【2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载】

C语言宝典 第2版
  • 刘丕顺主编 著
  • 出版社: 北京:电子工业出版社
  • ISBN:9787121127380
  • 出版时间:2011
  • 标注页数:638页
  • 文件大小:375MB
  • 文件页数:658页
  • 主题词:C语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

C语言宝典 第2版PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第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

热门推荐