C语言从入门到精通(pdf+txt+epub+azw3+mobi电子书在线阅读下载)

txtpdf查看全部>>

人气321
点击下载

C语言从入门到精通(pdf+txt+epub+azw3+mobi电子书在线阅读下载)

C语言从入门到精通 精粹版

作者:梁义涛

格式: pdf、txt、epub、azw3、mobi、docx

编辑推荐

本书特色
*零基础、入门级的讲解
无论读者是否从事计算机相关行业,是否接触过C语言,是否使用C语言开发过项目,都能从本书受益。
*实用、专业的范例和项目
本书结合实际工作中的范例,逐一讲解C语言的各种知识和技术,还以世纪开发项目来总结本书所学内容,帮助读者在实战中掌握知识,轻松拥有项目经验。
*随时监测自己的学习成果
每章首页给出了“本章要点”,以便读者明确学习方向。每章的“实战练习”则根据所在章的知识点精心设计而成,读者可以随时自我检测,巩固所学知识。
*细致入微、贴心提示
本书在讲解过程中使用了“提示”“注意”“技巧”等小栏目,帮助读者在学习过程中更清楚地理解基本概念、掌握相关操作,并轻松获取实战技巧。
海量学习资源免费赠送
*C语言标准库函数查询手册
*C语言常用信息查询手册
*10套超值完整源代码
*计算机等级考试二级C语言考试大纲及应试技巧
*C语言常见面试题
*C语言常见错误及解决方案
*C语言开发经验及技巧大汇总
*C语言程序员职业规划
*C语言程序员面试技巧
*Java和Oracle项目实战教学录像 

内容简介

《C语言从入门到精通(精粹版)》以零基础讲解为宗旨,用实例引导读者学习,深入浅出地介绍了C语言的相关知识和实战技能。
《C语言从入门到精通(精粹版)》第Ⅰ篇【基础知识】主要讲解C语言的基础知识、C程序的组成、字符集、标识符和关键字、变量、数制、数据类型、运算符和表达式、顺序结构与选择结构、循环结构与转向语句、输入和输出、数组以及字符数组等;第Ⅱ篇【算法应用】主要讲解算法与流程图、基础算法、C世界中的高级算法、数学在程序设计中的应用、算法设计的常用思路以及算法竞赛实例等;第Ⅲ篇【核心技术】主要介绍函数、函数中的变量、文件、库函数、位运算、结构体和联合体以及数据结构等;第Ⅳ篇【高级应用】主要介绍指针、指针与数组、指针与函数、指针与字符串、指针与结构体以及指针的高级应用与技巧等;第Ⅴ篇【趣味题解】主要介绍K-均值聚类算法、哥德巴赫猜想、猴子选大王游戏、迷宫求解、背包问题求解、火车车厢重排、哈夫曼编码、八皇后问题、商人过河游戏、K阶斐波那契序列以及*短路径等。
《C语言从入门到精通(精粹版)》提供了与图书内容全程同步的教学录像。此外,还赠送了大量相关学习资料,以便读者扩展学习。
《C语言从入门到精通(精粹版)》适合任何想学习C语言的读者,无论您是否从事计算机相关行业,是否接触过C语言,均可通过学习快速掌握C语言的开发方法和技巧。

作者简介

梁义涛,工学博士,教授,研究生导师,曾在普渡大学做访问学者,现执教于河南工业大学信息科学与工程学院。主要研究方向为嵌入式系统设计、智能视频处理等。主持和参与河南省厅级以上项目22 项,发表相关科研或教研论文30 余篇,获河南省级教学成果二等奖1 项,河南省科学技术进步奖三等奖2项。

目  录

第0章 学习攻略

0.1 编程的魔力002

0.2 C语言的来源及特点002

0.3 让计算机开口说话004

0.4 C语言的用途005

0.5 学习C语言的方法005

第 1章 步入C的世界—Hello C

1.1 C语言的开发环境009

1.1.1 C语言常用的开发环境009

1.1.2 VC 开发环境的安装009

1.1.3 Turbo C 2.0开发环境的安装012

1.2 认识常用开发环境013

1.2.1 认识VC 开发环境013

1.2.2 认识Turbo开发环境014

1.3 开始C编程—我的第 1个C程序015

1.3.1 程序编写及运行流程015

1.3.2 在Visual C 6.0中开发C程序016

1.3.3 在Turbo C中开发C程序018

1.4 高手点拨020

1.5 实战练习020

第 2章 C程序的组成

2.1 简单例子022

2.2 声明区022

2.2.1 头文件022

2.2.2 函数声明023

2.2.3 变量声明024

2.3 主函数025

2.4 函数定义区026

2.5 注释026

2.6 代码的规矩027

2.7 高手点拨027

2.8 实战练习028

第3章 C语言的基本构成元素—字符集、标识符和关键字

3.1 标识符和关键字030

3.1.1 标识符030

3.1.2 关键字030

3.2 常量030

3.2.1 什么是常量030

3.2.2 常量的声明032

3.3 常量的类别032

3.3.1 数值常量032

3.3.2 字符常量033

3.3.3 字符串常量034

3.3.4 符号常量034

3.4 综合应用—常量指针与指针常量036

3.5 高手点拨036

3.6 实战练习037

第4章 变量

4.1 变量040

4.1.1 什么是变量040

4.1.2 变量的定义与声明041

4.2 变量的类别041

4.2.1 局部变量041

4.2.2 形式参数042

4.2.3 全局变量043

4.3 变量的存储类型045

4.3.1 自动变量045

4.3.2 静态变量045

4.3.3 外部变量046

4.3.4 寄存器变量047

4.4 变量的赋值和初始化048

4.5 综合应用—根据变量的不同决定运行的结果050

4.6 高手点拨052

4.7 实战练习052

第5章 计算机如何识数—数制

5.1 二进制054

5.2 八进制055

5.3 十进制055

5.4 十六进制055

5.5 数制间的转换056

5.6 综合应用—数制转换057

5.7 高手点拨057

5.8 实战练习058

第6章 数据的种类—数据类型

6.1 数据类型的分类060

6.1.1 基本数据类型060

6.1.2 构造数据类型060

6.1.3 指针数据类型060

6.1.4 空类型061

6.2 整型061

6.3 字符型063

6.4 浮点型065

6.5 类型转换067

6.5.1 隐式转换067

6.5.2 显式转换069

6.6 综合应用—类型转换070

6.7 高手点拨070

6.8 实战练习071

第7章 C世界中的加减乘除—运算符和表达式

7.1 C中的运算符和表达式074

7.1.1 运算符074

7.1.2 表达式074

7.2 算术运算符和表达式075

7.2.1 算术运算符075

7.2.2 算术表达式075

7.2.3 应用举例075

7.3 关系运算符和表达式077

7.3.1 关系运算符077

7.3.2 关系表达式077

7.3.3 应用举例077

7.4 逻辑运算符和表达式078

7.4.1 逻辑运算符078

7.4.2 逻辑表达式079

7.4.3 应用举例079

7.5 条件运算符和表达式081

7.6 赋值运算符和表达式082

7.6.1 赋值运算符082

7.6.2 赋值表达式082

7.6.3 应用举例083

7.7 自增、自减运算符084

7.8 逗号运算符和表达式085

7.9 位运算符086

7.9.1 按位与运算符086

7.9.2 按位或运算符087

7.9.3 按位异或运算符087

7.9.4 按位取反运算符088

7.9.5 左移运算符088

7.9.6 右移运算符089

7.9.7 位运算赋值运算符090

7.9.8 位运算应用090

7.10 优先级与结合性093

7.10.1 算术运算符的优先级和结合性093

7.10.2 关系运算符的优先级和结合性093

7.10.3 逻辑运算符的优先级和结合性093

7.10.4 赋值运算符的优先级与结合性094

7.11 综合应用—根据输入值计算结果094

7.12 高手点拨095

7.13 实战练习095

第8章 顺序结构与选择结构

8.1 程序流程概述098

8.2 语句098

8.2.1 基本赋值语句098

8.2.2 表达式语句099

8.2.3 基本输入/输出语句099

8.2.4 控制语句101

8.2.5 空语句和复合语句101

8.3 顺序结构与语句102

8.4 选择结构103

8.4.1 选择结构103

8.4.2 单分支选择结构—if语句103

8.4.3 双分支选择结构—if-else语句106

8.4.4 多分支选择结构—if-else的嵌套形式107

8.4.5 多分支选择结构—switch语句111

8.5 综合应用—根据不同的利润计算奖金113

8.6 高手点拨114

8.7 实战练习115

第9章 C程序的流程—循环结构与转向语句

9.1 循环结构与语句118

9.1.1 循环结构118

9.1.2 当型循环语句—for语句119

9.1.3 当型循环语句—while语句122

9.1.4 直到型循环语句—do-while语句123

9.1.5 循环的嵌套125

9.2 转向语句128

9.2.1 goto语句129

9.2.2 break语句129

9.2.3 continue语句131

9.3 综合应用—简单计算器132

9.4 高手点拨134

9.5 实战练习134

第 10章 用户与计算机的交互—输入和输出

10.1 标准输入/输出136

10.2 格式化输入/输出136

10.2.1 格式化输出函数—printf()136

10.2.2 格式控制字符138

10.2.3 格式化输入函数—scanf()142

10.3 字符输入/输出144

10.3.1 字符输出函数—putchar()144

10.3.2 字符输入函数—getchar()146

10.4 字符串输入/输出146

10.4.1 字符串输出函数—puts()146

10.4.2 字符串输入函数—gets()147

10.5 高手点拨148

10.6 实战练习148

第 11章 数组

11.1 数组概述152

11.2 一维数组152

11.2.1 一维数组的定义152

11.2.2 一维数组的初始化155

11.2.3 一维数组元素的操作156

11.2.4 数组作为参数传递158

11.2.5 一维数组的应用举例160

11.3 二维数组162

11.3.1 二维数组的定义162

11.3.2 二维数组的初始化163

11.3.3 二维数组元素的操作163

11.3.4 二维数组的应用举例164

11.4 多维数组165

11.5 综合应用—杨辉三角166

11.6 高手点拨167

11.7 实战练习168

第 12章 字符数组

12.1 字符数组概述170

12.2 字符数组170

12.2.1 字符数组的初始化170

12.2.2 字符数组的引用170

12.2.3 字符数组的输入与输出171

12.3 字符串172

12.3.1 字符串和字符数组172

12.3.2 字符串的输入/输出174

12.3.3 字符串应用举例175

12.4 综合应用—自动分类字符177

12.5 高手点拨178

12.6 实战练习179

第 13章 程序的灵魂—算法与流程图

13.1 算法基础183

13.1.1 算法的概念183

13.1.2 算法的特性183

13.1.3 简单算法举例—解方程184

13.2 流程图的基础185

13.2.1 流程图中的元素及含义185

13.2.2 流程图的绘制186

13.3 如何表示一个算法188

13.3.1 用自然语言表示算法188

13.3.2 用流程图表示算法190

13.3.3 用传统流程图表示3种基本结构192

13.3.4 用N-S图表示算法193

13.3.5 用伪代码表示算法195

13.3.6 用计算机语言表示算法195

13.4 结构化程序设计方法196

13.5 综合应用—求解一元二次方程197

13.6 高手点拨199

13.7 实战练习200

第 14章 基础算法

14.1 排序算法202

14.1.1 桶排序法202

14.1.2 冒泡排序法203

14.1.3 快速排序法204

14.2 栈、队列、链表算法206

14.2.1 队列206

14.2.2 栈209

14.2.3 链表211

14.2.4 模拟链表216

14.3 枚举算法218

14.4 搜索算法220

14.4.1 深度优先搜索220

14.4.2 广度优化搜索220

14.5 图的遍历算法221

14.5.1 深度和广度的区别221

14.5.2 图的深度优化遍历221

14.5.3 图的广度优化遍历223

14.6 综合应用—宝岛探险225

14.7 高手点拨227

14.8 实战练习228

第 15章 C世界中的高级算法

15.1 模拟算法230

15.2 简单动态规划231

15.3 用递归实现回溯算法233

15.4 最短路径算法236

15.4.1 只有五行的算法—Floyd-Warshall236

15.4.2 Dijkstra 算法—单源最短边237

15.4.3 Bellman-Ford—解决负权边237

15.4.4 Bellman-Ford的队列优化238

15.4.5 最短路径算法对比分析238

15.5 树算法240

15.5.1 二叉树算法240

15.5.2 堆算法241

15.5.3 并查集241

15.6 综合应用—镖局运镖243

15.7 高手点拨245

15.8 实战练习246

第 16章 数学在程序设计中的应用

16.1 常用数学函数248

16.2 质因数分解249

16.3 最大公约数的欧几里得算法251

16.4 加法原理与乘法原理252

16.5 排列与组合253

16.6 综合应用—圆排列、可重集排列254

16.7 高手点拨255

16.8 实战练习256

第 17章 算法设计的常用思路

17.1 分治算法258

17.2 动态规划算法259

17.3 贪心算法261

17.4 回溯算法263

17.5 高手点拨265

17.6 实战练习265

第 18章 算法竞赛实例

18.1 衡量程序质量的标准268

18.2 Hilbert曲线269

18.3 验证四色问题271

18.4 n女王问题273

18.5 跳马问题274

18.6 生成全部排列及其应用276

18.7 贪吃蛇游戏278

18.8 快速排序283

18.9 幻方284

18.10 高精度计算288

18.11 高手点拨289

18.12 实战练习290

第 19章 函数

19.1 函数概述293

19.1.1 什么是函数293

19.1.2 函数的分类294

19.2 函数的定义294

19.3 函数的返回值及类型297

19.3.1 函数的返回值297

19.3.2 函数的类型298

19.4 函数的参数及传递方式300

19.4.1 函数的参数301

19.4.2 函数参数的传递方式302

19.5 函数的调用303

19.5.1 函数调用方式304

19.5.2 函数的声明305

19.5.3 函数的嵌套调用307

19.5.4 函数的递归调用308

19.6 内部函数和外部函数312

19.6.1 内部函数312

19.6.2 外部函数313

19.7 main()函数314

19.8 综合应用—用截弦法求方程的根315

19.9 高手点拨316

19.10 实战练习318

第 20章 函数中的变量

20.1 局部变量与全局变量320

20.1.1 局部变量320

20.1.2 全局变量321

20.2 变量的存储类别323

20.2.1 自动类型(auto)324

20.2.2 寄存器类型(register)324

20.2.3 静态类型(static)325

20.2.4 外部类型(extern)327

20.3 综合应用—日期判断328

20.4 高手点拨329

20.5 实战练习330

第 21章 文件

21.1 文件概述332

21.1.1 文件类型332

21.1.2 C如何操作文件—文件指针332

21.1.3 文件缓冲区333

21.2 文件的打开和关闭333

21.2.1 文件的打开—fopen()函数333

21.2.2 文件的关闭—fclose()函数334

21.2.3 文件结束检测—feof()函数335

21.3 文件的顺序读写335

21.3.1 文本文件中字符的输入/输出335

21.3.2 文本文件中字符串的输入/输出337

21.3.3 格式化输入/输出339

21.3.4 二进制文件的输入/输出—数据块读写340

21.4 文件的随机读写342

21.5 综合应用—文件操作343

21.6 高手点拨345

21.7 实战练习346

第 22章 库函数概览

22.1 标准C库函数348

22.2 数学函数348

22.2.1 绝对值函数348

22.2.2 幂函数和开平方函数349

22.2.3 指数函数和对数函数350

22.2.4 三角函数350

22.2.5 取整函数和取余函数350

22.3 字符串处理函数351

22.3.1 字符串长度函数351

22.3.2 字符串连接函数352

22.3.3 字符串复制函数353

22.3.4 字符串比较函数353

22.3.5 字符串查找函数354

22.3.6 字符串填充函数355

22.4 字符处理函数356

22.4.1 字符类型判断函数356

22.4.2 字符大小写转换函数357

22.5 转换和存储管理函数358

22.5.1 转换函数358

22.5.2 存储管理函数359

22.6 随机函数360

22.6.1 初识随机函数360

22.6.2 使用随机函数361

22.7 日期和时间处理函数362

22.8 诊断函数363

22.9 命令行参数364

22.10 其他函数365

22.10.1 exit()函数366

22.10.2 qsort()函数366

22.11 综合应用—猜数字游戏367

22.12 高手点拨369

22.13 实战练习370

第 23章 合理利用内存—位运算

23.1 二进制数372

23.1.1 二进制372

23.1.2 无符号数和有符号数372

23.2 位运算符372

23.2.1 按位与运算符373

23.2.2 按位或运算符373

23.2.3 按位异或运算符374

23.2.4 按位取反运算符375

23.2.5 左移运算符375

23.2.6 右移运算符375

23.2.7 位运算赋值运算符376

23.2.8 位运算应用377

23.3 位域379

23.4 综合应用—数制转换380

23.5 高手点拨381

23.6 实战练习382

第 24章 结构体和联合体

24.1 结构体384

24.1.1 结构体类型384

24.1.2 定义结构体变量385

24.1.3 初始化结构体变量386

24.1.4 结构体变量的引用387

24.2 结构体数组388

24.2.1 定义结构体数组388

24.2.2 初始化结构体数组390

24.2.3 结构体数组元素的引用390

24.3 结构体与函数392

24.3.1 结构体作为函数的参数392

24.3.2 结构体作为函数的返回值394

24.4 联合体395

24.4.1 联合体类型395

24.4.2 联合体变量的定义396

24.4.3 联合体变量的初始化397

24.4.4 联合体变量的引用399

24.5 结构体和联合体的区别与联系400

24.6 综合应用—计算学生成绩400

24.7 高手点拨402

24.8 实战练习403

第 25章 数据管理者—数据结构

25.1 数据结构概述406

25.2 线性表406

25.2.1 顺序表407

25.2.2 单链表410

25.3 栈416

25.3.1 栈的基本运算416

25.3.2 顺序栈的类型定义417

25.3.3 链式栈的类型定义417

25.4 队列417

25.4.1 队列的基本运算418

25.4.2 顺序队列类型定义418

25.4.3 链队列类型定义419

25.5 二叉树419

25.6 查找420

25.6.1 顺序查找420

25.6.2 折半查找422

25.7 排序423

25.7.1 冒泡排序法424

25.7.2 选择排序法425

25.7.3 插入排序法426

25.8 综合应用—链表的反转427

25.9 高手点拨430

25.10 实战练习439

第 26章 内存的快捷方式—指针

26.1 指针概述443

26.1.1 指针的类型443

26.1.2 指针所指向的类型443

26.1.3 指针的值443

26.1.4 指针所占内存443

26.2 指针的算术运算444

26.2.1 指针与整数的运算444

26.2.2 指针与指针的运算445

26.3 运算符&和*446

26.4 指针表达式447

26.5 综合应用—使用指针进行排序448

26.6 高手点拨449

26.7 实战练习450

第 27章 指针与数组

27.1 数组指针452

27.2 数组指针作为函数参数452

27.3 指针与字符数组453

27.4 指针数组与指针的指针454

27.5 综合应用—报数游戏456

27.6 高手点拨457

27.7 实战练习457

第 28章 指针与函数

28.1 函数指针460

28.1.1 函数指针的定义460

28.1.2 函数指针的赋值461

28.1.3 通过函数指针调用函数461

28.2 指针函数462

28.3 指向函数的指针作为函数参数463

28.4 综合应用—日期的输出465

28.5 高手点拨466

28.6 实战练习466

第 29章 指针与字符串

29.1 字符串指针468

29.1.1 创建字符串468

29.1.2 处理字符串469

29.1.3 输出字符串472

29.2 字符串指针作为函数参数472

29.3 字符指针变量与字符数组的区别474

29.4 综合应用—“回文”问题474

29.5 实战练习476

第30章 指针与结构体

30.1 结构体指针478

30.1.1 定义结构体指针478

30.1.2 初始化结构体指针478

30.1.3 使用指针访问成员478

30.1.4 给结构体指针赋值479

30.2 指向结构体变量的指针480

30.3 指向结构体数组的指针481

30.4 综合应用—创建简单链表482

30.5 高手点拨484

30.6 实战练习484

第31章 指针的高级应用与技巧

31.1 指向指针的指针486

31.2 void操作487

31.3 内存操作489

31.4 指针的传递491

31.5 综合应用—数值的降序排列492

31.6 高手点拨493

31.7 实战练习494

第32章 K-均值聚类算法

32.1 问题描述497

32.2 问题分析及实现497

32.2.1 问题分析497

32.2.2 问题实现497

32.2.3 程序运行499

32.3 开发过程常见问题及解决500

第33章 哥德巴赫猜想

33.1 问题描述502

33.2 问题分析及实现502

33.2.1 问题分析502

33.2.2 问题实现502

33.2.3 程序运行504

33.3 开发过程常见问题及解决504

第34章 猴子选大王游戏

34.1 问题描述506

34.2 问题分析及实现506

34.2.1 问题分析506

34.2.2 问题实现506

34.2.3 程序运行507

34.3 开发过程常见问题及解决508

第35章 迷宫求解

35.1 问题描述510

35.2 问题分析及实现510

35.2.1 问题分析510

35.2.2 问题实现510

35.2.3 程序运行513

35.3 开发过程常见问题及解决514

第36章 背包问题求解

36.1 问题描述516

36.2 问题分析及实现516

36.2.1 问题分析516

36.2.2 问题实现516

36.2.3 程序运行518

36.3 开发过程常见问题及解决518

第37章 火车车厢重排

37.1 问题描述520

37.2 问题分析及实现520

37.2.1 问题分析520

37.2.2 问题实现520

37.2.3 程序运行522

37.3 开发过程常见问题及解决522

第38章 哈夫曼编码的实现

38.1 问题描述524

38.2 问题分析及实现524

38.2.1 问题分析524

38.2.2 问题实现524

38.2.3 程序运行526

38.3 开发过程常见问题及解决526

第39章 八皇后问题的实现

39.1 问题描述528

39.2 问题分析及实现528

39.2.1 问题分析528

39.2.2 问题实现528

39.2.3 程序运行530

39.3 开发过程常见问题及解决530

第40章 商人过河游戏

40.1 问题描述532

40.2 问题分析及实现532

40.2.1 问题分析532

40.2.2 问题实现532

40.2.3 程序运行535

40.3 开发过程常见问题及解决536

第41章 K阶斐波那契序列的实现

41.1 问题描述538

41.2 问题分析及实现538

41.2.1 问题分析538

41.2.2 问题实现538

41.2.3 程序运行539

41.3 开发过程常见问题及解决540

第42章 最短路径的实现

42.1 问题描述542

42.2 问题分析及实现542

42.2.1 问题分析542

42.2.2 问题实现542

42.2.3 程序运行543

42.3 开发过程常见问题及解决544

商品评价

相关推荐
  • ANSYS电磁场分析(第2版)(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 物理学的未来(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 精装版(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 地球上最伟大的表演(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 恐龙探秘(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 物种起源(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 基因与细胞(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 相对论(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 陶哲轩实分析(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 通俗天文学(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 西方博物学文化(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 自然史(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 缤纷生物(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 狭义与广义相对论浅说(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 自然史(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 化学哲学新体系(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 能量守恒原理的历史和根源(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 深度学习的数学(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 从量子到宇宙-颠覆人类认知的科学之旅(pdf+txt+epub+azw3+mobi电子书在线阅读下载)
  • 汪老师的植物笔记(pdf+txt+epub+azw3+mobi电子书在线阅读下载)

全部评论: 0

微信公众号

还没账号?马上注册>>

登录

忘记密码

如果您尚未注册,请选择以下方式登录

Q Q 登 录 微 博 登 录
已有账号?快去登录>>

注册

发送验证码