图书介绍
Linux C程序设计王者归来PDF|Epub|txt|kindle电子书版本网盘下载
![Linux C程序设计王者归来](https://www.shukui.net/cover/43/30659045.jpg)
- 吴岳等编著 著
- 出版社: 北京:清华大学出版社
- ISBN:9787302355632
- 出版时间:2014
- 标注页数:766页
- 文件大小:118MB
- 文件页数:791页
- 主题词:Linux操作系统-程序设计;C语言-程序设计
PDF下载
下载说明
Linux C程序设计王者归来PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1篇 Linux下C语言基础2
第1章 Linux简介(?教学视频:16分钟)2
1.1 GNU简介2
1.2 Linux简介2
1.2.1 Linux发展史2
1.2.2 Linux发行版4
1.2.3 Linux内核版本5
1.2.4 Linux与UNIX的关系5
1.2.5 Linux在服务器方面的发展5
1.2.6 Linux在嵌入式系统方面的发展6
1.2.7 Linux在桌面系统方面的发展6
1.3 Linux环境下的其他编程语言7
1.3.1 C++++7
1.3.2 Java9
1.3.3 Perl11
1.3.4 Python12
1.3.5 Ruby13
1.3.6 PHP13
第2章 控制结构(?教学视频:56分钟)16
2.1 goto语句16
2.1.1 C语言中的无条件跳转16
2.1.2 使用goto语句进行出错处理17
2.1.3 出错处理的一般模型19
2.2 C语言中的分支结构20
2.2.1 分支结构的翻译20
2.2.2 使用goto语句实现分支结构22
2.3 短路计算22
2.3.1 短路计算22
2.3.2 &&运算的短路计算23
2.3.3 Ⅱ运算的短路计算24
2.4 C语言中的循环结构26
2.4.1 while循环26
2.4.2 do…while循环28
2.4.3 for循环30
2.5 switch语句32
2.5.1 switch语句的应用32
2.5.2 使用goto语句实现switch语句33
2.6 优化控制结构34
2.6.1 表达式优化——使用替换程序中的乘除法34
2.6.2 表达式优化——常量折叠35
2.6.3 表达式优化——使用数学公式36
2.6.4 表达式优化——存储问题37
2.6.5 分支优化——改变判断顺序38
2.6.6 分支优化——使用switch语句41
2.6.7 循环优化——次性计算42
第3章 C语言中的函数(?教学视频:56分钟)46
3.1 函数的本质46
3.2 变量的作用域和生命期47
3.2.1 全局变量47
3.2.2 局部变量48
3.3 变量的初始值50
3.3.1 全局变量的初始值50
3.3.2 局部变量的初始值50
3.4 与函数有关的优化51
3.4.1 函数调用与程序优化52
3.4.2 变量存储优化54
3.5 编写多文件程序——变量的存储类别56
3.5.1 存储类别56
3.5.2 static变量的作用——改变变量的生命期56
3.5.3 static变量的作用——实现封装和模块化设计58
3.6 编写多文件的程序——链接的作用61
3.6.1 链接多个文件61
3.6.2 链接时符号解析规则63
3.6.3 链接规则的应用63
3.7 可变参数66
3.7.1 可变参数的概念66
3.7.2 实现一个简单的可变参数的函数67
3.7.3 可变参数实例69
3.7.4 关于printf()函数的疑问——缺少整型参数74
3.7.5 关于printf()函数的疑问——缺少字符串地址参数75
第4章 C语言中的指针与字符串(?教学视频:48分钟)78
4.1 sizeof运算符78
4.1.1 sizeof运算符的应用——得到内置类型的大小78
4.1.2 sizeof运算符的应用——得到复合类型的大小79
4.2 指针的应用80
4.2.1 指针与别名陷阱80
4.2.2 数组的指针82
4.2.3 指针的指针83
4.2.4 指针与参数传递85
4.2.5 指针类型的意义90
4.2.6 void型指针91
4.3 函数的指针94
4.3.1 C语言中的函数指针94
4.3.2 函数指针的应用——回调函数97
4.3.3 函数指针数组102
4.4 字符串103
4.4.1 字符串与字符数组103
4.4.2 字符串与指针104
4.4.3 限定修饰符const106
4.4.4 const关键字修饰指针——在指针定义之前107
4.4.5 const关键字修饰指针——在指针定义之中107
4.4.6 const关键字修饰指针——在指针定义之前和定义之中107
4.4.7 使用const关键字的意义108
第5章 C语言的高级技术(?教学视频:30分钟)111
5.1 结构体与共同体111
5.1.1 结构体中成员变量的存储分布111
5.1.2 内存对齐112
5.2 位运算115
5.2.1 掩码运算115
5.2.2 不安全的位运算117
5.2.3 异或运算的特性119
5.2.4 移位运算的陷阱121
5.2.5 移位运算的实例122
5.3 预处理124
5.3.1 常用的代码组织形式124
5.3.2 调试开关129
5.4 C99新标准关键字详解130
5.4.1 inline关键字的概念131
5.4.2 inline关键字实例131
5.4.3 inline关键字使用总结132
5.4.4 restrict关键字的概念133
5.4.5 restrict关键字的应用134
第2篇 C语言开发环境136
第6章 vi编辑器(?教学视频:44分钟)136
6.1 vi编辑器入门136
6.1.1 vi简介136
6.1.2 vi的工作模式136
6.2 vi一般操作137
6.2.1 进入vi137
6.2.2 文本插入操作140
6.2.3 文本删除操作141
6.2.4 文本复制操作143
6.2.5 撤销命令144
6.2.6 重复命令145
6.2.7 退出vi145
6.3 vi的增强操作147
6.3.1 替换命令147
6.3.2 光标移动148
6.3.3 按行移动光标148
6.3.4 按字移动光标149
6.3.5 按句移动光标150
6.3.6 按段移动光标151
6.3.7 文本行的移动151
6.3.8 文本的异行移动153
6.3.9 屏幕滚动153
6.3.10 查找命令154
6.3.11 替换命令155
6.3.12 窗口的切分157
6.3.13 设置环境157
第7章 gcc编译器(?教学视频:27分钟)159
7.1 初探gcc编译器159
7.1.1 从经典的hello world开始159
7.1.2 gcc编译流程160
7.2 gcc常用选项160
7.2.1 gcc常用选项汇总161
7.2.2 -c选项161
7.2.3 -S选项162
7.2.4 -E选项163
7.2.5 -o选项164
7.2.6 -I选项165
7.2.7 -g选项165
7.3 链接原理165
7.3.1 链接器的任务165
7.3.2 目标文件165
7.3.3 ELF格式的可重定位目标文件167
7.3.4 目标文件中的符号表168
7.3.5 重定位的概念172
7.3.6 符号的重定位信息172
7.4 关于库173
7.4.1 使用库的优势173
7.4.2 静态库的概念175
7.4.3 创建静态库175
7.4.4 使用静态库176
7.4.5 动态库的概念177
7.4.6 创建动态库178
7.4.7 使用动态库180
7.5 gcc工具链181
第8章 构建makefile文件(?教学视频:46分钟)183
8.1 makefile文件入门183
8.1.1 makefile文件的组成内容183
8.1.2 makefile文件包含183
8.1.3 make工具的退出码184
8.2 书写makefile规则185
8.2.1 使用基本规则185
8.2.2 使用隐式规则186
8.2.3 使用伪目标187
8.2.4 使用通配符188
8.2.5 搜索源文件189
8.3 使用命令190
8.3.1 显示命令190
8.3.2 执行命令190
8.3.3 命令出错192
8.4 使用变量192
8.4.1 使用普通变量192
8.4.2 变量中的变量194
8.4.3 追加变量的值196
8.4.4 自动化变量197
8.5 使用条件判断197
8.5.1 条件表达式197
8.5.2 表达式实例199
8.6 使用函数200
8.6.1 函数调用的语法200
8.6.2 字符串处理函数201
8.6.3 文件名操作函数206
8.6.4 foreach函数209
8.6.5 if函数210
8.6.6 call函数210
8.6.7 origin函数211
8.6.8 shell函数211
8.7 makefile实例212
8.7.1 makefile实例——项目中的总makefile212
8.7.2 makefile实例makefile模板214
第9章 gdb调试器(?教学视频:27分钟)216
9.1 列出源程序216
9.1.1 不带参数的list命令216
9.1.2 带一个参数的list命令217
9.1.3 带两个参数的list命令217
9.2 运行程序的命令218
9.3 操作断点的命令220
9.3.1 设置断点220
9.3.2 显示当前gdb的断点信息222
9.3.3 删除指定的断点223
9.3.4 禁止或启用断点223
9.3.5 清除断点223
9.3.6 观察点224
9.3.7 设置断点实例225
9.4 查看运行时数据228
9.4.1 数据观察命令229
9.4.2 对程序中函数的调用230
9.4.3 查看表达式的值231
9.4.4 查看数组的值231
9.4.5 变量的输出格式232
9.4.6 查看内存233
9.4.7 自动显示变量233
9.4.8 设置显示选项237
9.4.9 显示变量的历史记录239
9.4.10 查看寄存器239
9.4.11 查看使用gdb环境变量240
9.4.12 查看数据实例241
9.5 改变程序的执行245
9.5.1 修改变量的值246
9.5.2 跳转执行246
9.5.3 信号的产生及处理248
9.5.4 强制调用函数248
9.5.5 强制函数返回249
9.6 gdb高级应用249
9.6.1 产生core文件250
9.6.2 跟踪栈上数据250
9.6.3 绑定运行进程252
9.6.4 源文件搜索254
9.6.5 机器语言工具254
9.6.6 其他有用的调试命令255
第3篇 Linux进程操作258
第10章 进程环境(?教学视频:44分钟)258
10.1 程序的启动和退出258
10.1.1 在shell中启动一个程序258
10.1.2 加载一个程序259
10.1.3 加载地址260
10.1.4 退出程序261
10.1.5 进程终止处理函数262
10.2 Linux进程内存管理263
10.2.1 数据的内部存储263
10.2.2 C程序的存储布局——代码段265
10.2.3 C程序的存储布局——数据段和缓冲段267
10.2.4 C程序的存储布局——栈268
10.2.5 C程序的存储布局——堆269
10.2.6 常量的存储270
10.2.7 动态内存管理271
10.2.8 动态内存分配的深入研究273
10.3 shell环境276
10.3.1 命令行参数277
10.3.2 得到程序文件名278
10.3.3 环境变量278
10.3.4 得到指定的环境变量280
10.3.5 设置一个环境变量280
10.3.6 得到进程结束状态285
10.3.7 使用ermo调试程序286
10.3.8 输出错误原因288
10.4 全局跳转289
10.4.1 局部跳转的局限性289
10.4.2 使用全局跳转291
10.4.3 使用全局跳转代替局部跳转292
第11章 进程控制(?教学视频:45分钟)295
11.1 进程标识符295
11.1.1 进程ID295
11.1.2 进程中重要的ID值296
11.2 进程操作297
11.2.1 创建一个进程298
11.2.2 父子进程的共享资源299
11.2.3 fork()函数的出错情况302
11.2.4 创建一个共享空间的子进程303
11.2.5 在函数内部调用vfork()函数304
11.2.6 退出进程305
11.2.7 使用exit() 函数检查进程出错信息306
11.2.8 exit()函数与内核函数的关系307
11.2.9 设置进程所有者307
11.2.10 调试多进程——设置跟踪流309
11.2.11 调试多进程——使用gdb的attach命令309
11.3 执行程序310
11.3.1 执行一个新程序310
11.3.2 执行解释器文件313
11.3.3 在程序中执行shell命令315
11.3.4 实现system()函数317
11.4 关系操作318
11.4.1 等待进程退出318
11.4.2 等待指定的进程321
11.4.3 僵尸进程的概念323
11.4.4 产生一个僵尸进程324
11.4.5 避免僵尸进程的产生325
11.4.6 输出进程统计信息327
第12章 时间和日历历程(?教学视频:7分钟)330
12.1 系统时间330
12.2 日历时间332
第13章 信号及信号处理(?教学视频:48分钟)335
13.1 信号的基础335
13.1.1 信号的基本概念335
13.1.2 产生信号336
13.1.3 处理信号336
13.1.4 常用信号的使用方法337
13.2 信号的影响338
13.2.1 重入339
13.2.2 原子操作341
13.2.3 中断系统调用343
13.3 信号处理函数343
13.3.1 设置信号处理函数343
13.3.2 发送信号347
13.3.3 向进程本身发送信号348
13.3.4 设置Linux定时器349
13.3.5 定时等待I/O350
13.3.6 挂起进程352
13.3.7 进程休眠353
13.4 信号集与屏蔽信号356
13.4.1 信号集和信号集处理函数356
13.4.2 屏蔽信号358
13.4.3 处理未决信号360
13.4.4 高级信号注册函数362
13.4.5 信号选项实例——SA NOCLDWAIT选项363
13.4.6 信号选项实例——SA NODEFER选项364
13.4.7 信号选项实例——SA RESETHAND选项366
第14章 进程间通信(?教学视频:52分钟)368
14.1 进程间通信概述368
14.1.1 进程间通信简介368
14.1.2 进程间通信的难点369
14.1.3 IPC的多种方式369
14.2 管道370
14.2.1 管道的概念370
14.2.2 匿名半双工管道370
14.2.3 匿名半双工管道的读写操作371
14.2.4 创建管道的标准库函数375
14.3 FIFO管道377
14.3.1 FIFO的概念377
14.3.2 创建FIFO378
14.3.3 FIFO的读写操作379
14.3.4 FIFO的缺点382
14.4 System V IPC/POSIX IPC383
14.4.1 IPC对象的概念383
14.4.2 IPC对象的问题385
14.4.3 IPC对象系统命令385
14.5 共享内存386
14.5.1 共享内存的概念386
14.5.2 共享内存的创建387
14.5.3 共享内存的操作388
14.5.4 共享内存使用注意事项390
14.6 信号量391
14.6.1 信号量的概念391
14.6.2 信号量的创建392
14.6.3 信号量集的操作394
14.7 消息队列396
14.7.1 消息队列的概念396
14.7.2 创建消息队列397
14.7.3 读写消息队列399
第15章 线程(?教学视频:34分钟403
15.1 线程与进程403
15.1.1 线程的概念403
15.1.2 线程的优势404
15.2 线程标识符405
15.3 线程基本操作405
15.3.1 创建线程405
15.3.2 向线程体函数传递参数407
15.3.3 线程访问资源的限制409
15.3.4 终止线程412
15.3.5 正确得到线程退出信息的方法415
15.3.6 取消一个线程的运行417
15.3.7 线程退出函数420
第16章 线程高级操作(?教学视频:28分钟)423
16.1 线程同步——使用互斥量423
16.1.1 初始化与销毁互斥量423
16.1.2 得到与释放互斥量424
16.1.3 使用互斥量的实例425
16.2 线程同步——使用读写锁430
16.2.1 初始化与销毁读写锁430
16.2.2 得到与释放互斥锁431
16.2.3 使用互斥量与读写锁的比较432
16.3 线程属性438
16.3.1 创建和销毁属性结构438
16.3.2 线程的分离状态439
16.3.3 分离一个已经创建的线程440
16.3.4 线程栈的属性442
第4篇 Linux文件操作446
第17章 文件I/O(?教学视频:71分钟)446
17.1 文件描述符的概念446
17.2 文件I/O操作446
17.2.1 打开一个文件446
17.2.2 打开文件的出错情况450
17.2.3 关闭一个文件450
17.2.4 创建一个新文件451
17.2.5 文件定位453
17.2.6 文件截短455
17.2.7 清空一个文件458
17.2.8 文件的读写操作460
17.2.9 文件同步463
17.3 文件描述符操作465
17.3.1 复制文件描述符465
17.3.2 I/O重定向概念及其应用466
17.3.3 控制文件469
17.3.4 修改打开文件的文件状态470
17.4 非阻塞文件I/O473
17.4.1 非阻塞I/O的概念473
17.4.2 以非阻塞方式打开文件474
17.4.3 将一个打开文件设置为非阻塞方式475
17.5 内存映射I/O477
17.5.1 内存映射I/O的概念477
17.5.2 创建一个内存映射478
17.5.3 撤销一个内存映射480
17.5.4 内存映射同步482
17.5.5 更改内存映射的权限485
第18章 文件管理(?教学视频:42分钟487
18.1 文件状态487
18.2 文件类型488
18.3 文件权限490
18.3.1 访问权限491
18.3.2 设置用户ID位和设置组ID位492
18.3.3 设置用户ID位的作用493
18.3.4 使用设置用户ID位的实例494
18.4 文件权限操作496
18.4.1 测试文件访问权限497
18.4.2 设置用户ID位与文件权限测试499
18.4.3 使用文件权限屏蔽字499
18.4.4 在shell中使用文件权限屏蔽字500
18.4.5 在程序中使用文件权限屏蔽字501
18.4.6 改变文件访问权限502
18.4.7 在shell中改变文件权限503
18.4.8 在程序中改变文件权限504
18.4.9 改变一个打开的文件权限505
18.5 文件系统结构509
18.6 文件的硬链接513
18.6.1 创建一个硬链接513
18.6.2 删除一个硬链接515
18.7 改变文件所有者519
18.8 操作文件的时间522
第19章 目录操作(?教学视频:30分钟)526
19.1 目录的权限526
19.1.1 目录的访问权限526
19.1.2 测试目录的访问权限527
19.2 目录操作528
19.2.1 创建一个目录528
19.2.2 删除一个目录529
19.2.3 目录项结构530
19.2.4 打开与关闭目录531
19.2.5 读目录531
19.2.6 读目录操作的实例——实现自己的Is命令534
19.2.7 得到目录文件的读写位置536
19.2.8 定位目录537
19.2.9 回卷目录文件539
19.3 进程的工作目录540
19.3.1 工作目录的概念540
19.3.2 改变进程的工作目录541
19.3.3 得到进程的当前工作目录542
19.3.4 子进程工作目录对父进程的影响545
第20章 特殊文件(?教学视频:32分钟)548
20.1 符号链接操作548
20.1.1 符号链接548
20.1.2 符号链接的功能549
20.1.3 创建符号链接549
20.1.4 创建指向不存在文件的符号链接550
20.1.5 读写符号链接的目的文件551
20.1.6 读写多重符号链接的目的文件553
20.1.7 读写符号链接555
20.1.8 取得符号链接的状态558
20.1.9 更改符号链接的所有者562
20.2 proc文件系统566
20.2.1 proc文件系统566
20.2.2 常用的内核信息567
20.2.3 读取内核信息568
20.2.4 进程状态信息575
20.2.5 读取进程状态576
20.2.6 proc文件系统编程实例——实现自己的ps命令578
第21章 基于流的I/O(?教学视频:30分钟)581
21.1 流与缓冲581
21.2 基于流的文件操作583
21.2.1 打开和关闭流583
21.2.2 文件内容的冲洗585
21.2.3 以字符为单位读写数据587
21.2.4 以行为单位读写数据588
21.2.5 gets()函数的漏洞589
21.2.6 逐行读取文件内容590
21.2.7 输出XML形式的配置文件591
21.2.8 读写数据块593
21.2.9 文件读写实例——实现cp命令594
21.2.10 文件读写实例——字符统计596
21.2.11 文件读写实例——目录下所有文件的字符统计597
第5篇 Linux网络编程602
第22章 TCP和UDP协议(?教学视频:22分钟)602
22.1 计算机网络的体系结构简介602
22.1.1 计算机网络体系结构简介602
22.1.2 OSI参考模型中各层功能描述603
22.1.3 TCP/IP参考模型的各层功能描述603
22.1.4 面向连接服务和无连接服务604
22.2 客户/服务器方式简介604
22.3 用户数据报协议UDP605
22.3.1 用户数据报的格式605
22.3.2 用户数据报检验和的计算606
22.3.3 UDP用户数据报的特性及用途607
22.4 传输控制协议TCP608
22.4.1 TCP简介608
22.4.2 TCP报文段的首部608
22.4.3 TCP数据编号与确认609
22.4.4 TCP的流量控制与拥塞控制610
22.4.5 TCP的运输连接管理612
第23章 网络编程基础(?教学视频: 50分钟)614
23.1 套接字概念614
23.2 准备工作615
23.2.1 字节序615
23.2.2 地址格式616
23.2.3 地址形式转换617
23.2.4 获得主机信息619
23.2.5 地址映射620
23.3 套接字基础编程621
23.3.1 建立和销毁套接字描述符621
23.3.2 地址绑定623
23.3.3 建立一个连接624
23.3.4 最简单的网络应用程序——服务器端626
23.3.5 最简单的网络应用程序——客户端629
23.3.6 使用文件读写函数读写套接字631
23.3.7 使用完整读写函数的网络应用程序634
23.3.8 面向连接的数据传输637
23.3.9 面向连接的网络应用程序——服务器端638
23.3.10 面向连接的网络应用程序——客户端641
23.3.11 无连接的数据传输643
23.3.12 无连接的网络应用程序——服务器端644
23.3.13 无连接的网络应用程序——客户端646
23.4 非阻塞套接字649
23.4.1 非阻塞网络应用程序——服务器端649
23.4.2 非阻塞网络应用程序——客户端651
第24章 网络编程进阶(?教学视频:32分钟)654
24.1 套接字编程深入654
24.1.1 bind函数的作用654
24.1.2 并发服务器655
24.1.3 UDP协议的connect()函数应用657
24.2 多路选择I/O660
24.2.1 多路选择I/O的概念660
24.2.2 实现多路选择I/O661
24.2.3 使用多路选择I/O处理多个连接663
24.2.4 屏蔽信号的多路选择I/O666
24.2.5 对比select()函数和pselect() 函数667
24.2.6 轮询I/O669
24.3 非网络通信套接字670
24.3.1 非命名UNIX域套接字671
24.3.2 命名UNIX域套接字672
24.3.3 UNIX域套接字实例——服务器端673
24.3.4 UNIX域套接字实例——客户端677
第25章 网络编程实例——实现文件传输程序(?教学视频:18分钟)679
25.1 程序设计679
25.1.1 整体程序设计679
25.1.2 客户端程序设计679
25.1.3 服务器端程序设计680
25.2 文件传输程序的实现683
25.2.1 客户端程序的实现——头文件683
25.2.2 客户端程序的实现——程序主函数684
25.2.3 客户端程序的实现——命令拆分函数686
25.2.4 客户端程序的实现——命令处理模块687
25.2.5 服务器端程序的实现——头文件697
25.2.6 服务器端程序的实现——程序主函数698
25.2.7 服务器端程序的实现——客户端命令处理模块699
25.3 测试和验证706
第26章 网络编程实例——简单的Web服务器(?教学视频:10分钟)707
26.1 程序设计707
26.1.1 整体程序设计707
26.1.2 步骤1——解析客户端发送的内容708
26.1.3 步骤2——寻找客户端需要的文件709
26.1.4 步骤3——将客户端信息返回709
26.2 Web服务器的实现710
26.2.1 Web服务器程序的实现——头文件710
26.2.2 Web服务器程序的实现——程序主函数711
26.2.3 Web服务器程序的实现——请求处理模块715
26.3 测试和验证719
第6篇 shell脚本知识722
第27章 shell脚本基础(?教学视频:32分钟)722
27.1 编写最简单的shell脚本722
27.1.1 使用shell脚本的原因722
27.1.2 脚本内容723
27.1.3 运行一段脚本724
27.2 shell中的变量724
27.2.1 用户自定义变量725
27.2.2 引用变量726
27.2.3 为表达式求值727
27.2.4 变量的类型729
27.2.5 操作自定义变量730
27.2.6 位置变量731
27.2.7 重新分配位置变量732
27.3 退出状态734
27.4 条件测试736
27.4.1 测试文件状态736
27.4.2 测试时使用逻辑操作符738
27.4.3 字符串测试739
27.4.4 测试数值741
第28章 shell脚本中的控制结构(?教学视频:29分钟)743
28.1 shell脚本中的命令替换743
28.2 分支结构744
28.2.1 if/else分支结构744
28.2.2 多重分支结构745
28.2.3 使用case结构的分支语句747
28.2.4 在case语句中使用逻辑表达式749
28.3 条件测试命令的值750
28.3.1 测试整数与字符串751
28.3.2 测试字符串和空值752
28.3.3 测试未初始化的变量752
28.3.4 测试“false”的值753
28.4 循环结构754
28.4.1 while循环结构754
28.4.2 until循环结构757
28.4.3 for循环结构759
28.4.4 break和continue命令762
28.5 定义函数和使用函数764