《跟我学C语言》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:陈锐,田建新编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2013
  • ISBN:9787302330080
  • 页数:651 页
图书介绍:本书内容全面,结构清晰,语言通俗,重难点突出,所有程序都能够直接运行。本书内容包括C语言概述、常用的程序开发环境、基本数据类型、表达式、顺序结构程序设计、选择结构程序设计、循环结构程序设计、数组、函数、预处理命令、指针、结构图与联合体、位运算、文件、链表、网络编程基础、算法基础、鼠标和键盘等。

第1章C语言概述 1

1.1为什么要选择C语言 2

1.1.1选择C语言的好处 2

1.1.2 C语言的特点 2

1.1.3如何学好C语言 3

1.2进制转换 4

1.2.1十进制数的表示 4

1.2.2二进制数的表示 5

1.2.3二进制数、十六进制数和八进制数转换为十进制数 6

1.2.4十进制数转换为二进制数 6

1.2.5十进制数转换为十六进制数 9

1.2.6十进制数转换为八进制数 11

1.2.7二进制数与十六进制数、八进制数的转换 12

1.3计算机中数的表示 13

1.3.1计算机中的正数与负数表示 14

1.3.2原码和补码 14

1.3.3浮点数 17

1.4小结 19

第2章C语言开发环境 21

2.1 Turbo C 2.0开发环境介绍 22

2.1.1运行Turbo C 2.0 22

2.1.2 Turbo C 2.0环境设置 23

2.1.3 Turbo C 2.0的使用 25

2.2 Win-TC开发环境介绍 27

2.2.1 Win-TC开发环境概述 27

2.2.2 Win-TC的使用 28

2.3 LCC开发环境介绍 30

2.3.1使用LCC开发环境创建项目 30

2.3.2 LCC开发环境的介绍 32

2.3.3 LCC的使用 33

2.4 Visual C+++ 6.0开发环境介绍 34

2.4.1使用Visual C+++ 6.0新建项目 34

2.4.2使用Visual C+++ 6.0新建源程序文件 36

2.4.3使用Visual C+++ 6.0开发环境 37

2.5小结 38

第3章 基本数据类型 39

3.1变量 40

3.1.1为什么要使用变量 40

3.1.2什么是变量——变量在计算机中的表示 40

3.1.3如何定义变量 41

3.1.4为什么要有数据类型 41

3.1.5 C语言有哪些数据类型 42

3.1.6什么符号可以作为变量名——用户定义的标识符 43

3.1.7关键字——己经被占用的标识符 44

3.1.8初识变量赋值 44

3.2整型变量 45

3.2.1为什么要使用整型变量 45

3.2.2基本整型变量 46

3.2.3基本整型变量的输入——使用scanf函数 47

3.2.4基本整型变量的输出——使用printf函数 49

3.2.5长整型变量——解决大整数问题 50

3.2.6短整型变量——节省内存空间 52

3.2.7无符号整型变量——只包括非负的整数 53

3.2.8整型变量的应用举例 54

3.3实型变量 57

3.3.1为什么使用实型变量 57

3.3.2单精度浮点型变量 57

3.3.3双精度浮点型变量 60

3.3.4长双精度浮点型变量 61

3.3.5实型变量的应用举例 62

3.4字符型数据类型 64

3.4.1为什么要使用字符型变量 64

3.4.2字符型变量 64

3.4.3字符型数据的输入与字符型变量值的输出——使用和(null) 65

3.4.4字符型变量的应用举例 66

3.5常量 68

3.5.1为什么使用常量 68

3.5.2整型常量 68

3.5.3浮点型常量 69

3.5.4字符型常量与字符串型常量 69

3.5.5常量与常数 70

3.6小结 70

习题 70

第4章 运算符与表达式 73

4.1表达式 74

4.1.1运算符有哪些 74

4.1.2什么是表达式 74

4.1.3运算符的优先级与结合性 75

4.1.4自动类型转换 76

4.2算术运算符与算术表达式 77

4.2.1基本算术表达式 77

4.2.2自增表达式——+++a和a+++ 79

4.2.3自减表达式——--a和a-- 82

4.2.4算术运算符的混合运算——算术运算符的优先级与结合性 83

4.2.5算术表达式应用举例 84

4.3赋值运算符与赋值表达式及其应用 86

4.3.1赋值运算符与赋值表达式 86

4.3.2类型转换 89

4.3.3赋值表达式的应用举例 91

4.4关系运算符与关系表达式及其应用 93

4.4.1关系运算符和关系表达式 93

4.4.2关系表达式应用举例 94

4.5逻辑运算符与逻辑表达式及其应用 95

4.5.1逻辑运算符和逻辑表达式 95

4.5.2逻辑表达式应用举例 97

4.6逗号表达式 98

4.6.1逗号运算符与逗号表达式 99

4.6.2逗号表达式中应注意的问题 99

4.6.3逗号表达式应用举例 99

4.7小结 100

第5章 顺序结构程序设计 101

5.1语句和程序 102

5.1.1什么是简单语句 102

5.1.2为什么使用复合语句 103

5.1.3什么是复合语句 103

5.1.4使用复合语句应注意的问题 104

5.1.5为什么要有程序 105

5.1.6 C语言程序的框架结构 106

5.2顺序结构程序设计 107

5.2.1顺序结构程序设计的特点——自上而下执行每一个语句 107

5.2.2顺序结构程序设计——求圆的面积 107

5.2.3顺序结构程序——求一元二次方程ax 2+bx+c=0的根 110

5.2.4顺序结构程序设计应用举例——将小写字母转换为大写字母 111

5.3小结 113

第6章 选择结构程序设计 115

6.1条件运算符 116

6.1.1为什么要有条件运算符 116

6.1.2条件运算符与条件表达式 116

6.2 if选择语句 119

6.2.1为什么要有if选择语句——理解容易 119

6.2.2 if选择语句——单分支选择结构 120

6.2.3 if-else选择语句——双分支的选择结构 124

6.2.4 if…else if…else选择语句——多分支选择结构 126

6.2.5 if选择语句的嵌套 131

6.2.6设置标志变量 135

6.2.7 if选择语句与条件运算符——相互转换 136

6.3 switch选择语句 137

6.3.1 switch选择语句 137

6.3.2 switch选择语句应用举例 138

6.4选择结构程序设计应用举例 143

6.5小结 151

第7章 循环结构程序设计 153

7.1为什么要有循环结构 154

7.1.1如何重复输出多个hello world 154

7.1.2如何求连续的n个自然数的和 154

7.2 while循环语句 155

7.2.1 while循环语句——当型循环 155

7.2.2 while循环语句应用举例 158

7.3 do-while循环语句 160

7.3.1为什么要有do-while 160

7.3.2 do-while循环语句——直到型循环 160

7.3.3 比较while循环结构和do-while循环结构 162

7.4 for循环语句 165

7.4.1 for循环语句概述 165

7.4.2 for循环语句的灵活性 169

7.4.3几种循环语句的比较 174

7.5 goto语句与goto语句构成的循环语句 175

7.5.1 goto语句——无条件转移语句 175

7.5.2 goto语句构成的循环语句——向前跳转 176

7.5.3 goto语句与while语句、for语句的比较 177

7.6 break语句 178

7.6.1循环中的“提前开溜” 178

7.6.2使用break语句 179

7.7 continue语句 181

7.7.1为什么要有continue语句 181

7.7.2使用continue语句 181

7.7.3 continue语句与break语句的区别 182

7.7.4 continue语句应用举例 183

7.8多重循环程序设计 184

7.8.1为什么要有循环的嵌套——一层循环是不能解决所有问题的 184

7.8.2循环的嵌套——循环结构中还可以有循环结构 185

7.8.3多重循环应用举例——输出乘法口诀表 187

7.9循环结构程序应用举例 190

7.9.1循环结构程序应用举例——求π的近似值 190

7.9.2循环结构程序应用举例——求101~200之间的所有质数 193

7.9.3循环结构程序应用举例——质数问题的改进算法 195

7.9.4循环结构程序应用举例——百鸡问题 196

7.10小结 198

第8章 数组 199

8.1为什么要有数组 200

8.1.1多变量的解决之道——数组的引入 200

8.1.2数组就是这个样子——初识数组 201

8.1.3数组的数组——维度的出现 202

8.2一维数组 204

8.2.1一维数组是这样定义的 204

8.2.2一维数组的引用——其实很简单 205

8.2.3一维数组的初始化——方法有许多 206

8.2.4一维数组的应用举例——求数组各元素的平均值 208

8.2.5一维数组的应用举例——数组元素的倒排 209

8.2.6一维数组的应用举例——冒泡排序 211

8.3二维数组 214

8.3.1二维数组原来是这样定义的 214

8.3.2二维数组的引用——其实并不难 216

8.3.3二维数组的初始化——多样的初始化 217

8.3.4二维数组应用举例——计算各科成绩的平均分 220

8.3.5二维数组应用举例——矩阵的转置 222

8.3.6二维数组应用举例——有趣的魔方阵 223

8.4字符数组 227

8.4.1字符数组是这样定义的 227

8.4.2字符数组的初始化 228

8.4.3字符数组的连续输出——格式符 230

8.4.4字符数组的连续输入——格式符 231

8.4.5常用的字符串处理函数 232

8.4.6字符数组的应用举例 236

8.5小结 240

第9章 函数 241

9.1为什么要有函数及函数的分类 242

9.1.1为什么要有函数 242

9.1.2函数有哪些——库函数和用户函数 243

9.2函数的定义形式 243

9.2.1不带参数的函数定义形式 243

9.2.2带参数的函数定义形式——有参数列表 244

9.2.3带参数的函数定义形式——形参定义的传统方式 245

9.3局部变量与全局变量 246

9.3.1局部变量 246

9.3.2全局变量 248

9.4函数的参数与函数的值 250

9.4.1形式参数与实际参数 250

9.4.2函数的返回值 252

9.5函数的调用 254

9.5.1函数调用的一般形式 254

9.5.2函数调用的方式 256

9.5.3对被调用函数的声明 257

9.6函数的嵌套调用 260

9.6.1函数的嵌套调用过程 260

9.6.2函数的嵌套应用举例 261

9.7函数的递归调用 262

9.7.1什么是递归——自己调用自己 262

9.7.2递归函数应用举例——求n! 263

9.7.3递归函数调用应用举例——Fibonacci数列 265

9.8数组作为函数的参数 266

9.8.1数组元素作为函数的参数——只能传递一个数组元素 266

9.8.2数组名作为函数的参数——可以传递整个数组 268

9.8.3数组名作为参数传递——实际上传递的是数组的首地址 271

9.8.4多维数组名作为函数的参数——传递整个数组 275

9.9变量的存储 277

9.9.1什么是动态存储与静态存储——生存期不同 278

9.9.2 auto变量——自动类型变量 278

9.9.3 static变量——静态变量 278

9.9.4 register变量——使运行速度更快的变量 281

9.9.5 extem变量——声明外部变量 282

9.10内部函数与外部函数 284

9.10.1内部函数——使用static 284

9.10.2外部函数——使用extern 285

9.11函数应用举例 286

9.11.1函数应用举例——递归求解n个数的最大值 286

9.11.2函数应用举例——递归求解a与b的最大公约数 288

9.11.3函数应用举例——字符数组元素逆序存放 289

9.12小结 290

第10章 预处理命令 291

10.1宏定义 292

10.1.1为什么要有宏定义 292

10.1.2不带参数的宏定义 292

10.1.3宏定义与常量定义的区别 294

10.1.4带参数的宏定义 294

10.1.5宏定义中的参数与函数的参数的区别 295

10.2文件包含命令 297

10.2.1为什么要有文件包含命令 297

10.2.2文件包含命令——include 297

10.3条件编译 299

10.3.1第一种条件编译命令——#ifdef 300

10.3.2第二种条件编译命令——#ifdef…#elif…#endif 301

10.3.3第三种条件编译命令——#ifndef 302

10.3.4第四种条件编译命令——#if 303

10.4小结 304

第11章 指针 305

11.1指针的相关概念 306

11.1.1为什么要有指针和指针变量 306

11.1.2什么是地址 306

11.1.3什么是指针变量——存放地址的变量 307

11.2指针变量 308

11.2.1定义指针变量 308

11.2.2使用指针变量 310

11.2.3指针变量作为函数参数 313

11.3数组与指针 317

11.3.1指向数组元素的指针 317

11.3.2通过指针引用数组元素 318

11.3.3指针变量的自增运算和自减运算 322

11.3.4数组指针作为函数的参数 323

11.3.5指向多维数组的指针变量 329

11.4字符串与指针 336

11.4.1指向字符串的指针变量 336

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

11.4.3字符数组与字符指针变量的比较 346

11.5指针数组与指向指针的指针 347

11.5.1指针数组 347

11.5.2指向指针的指针 351

11.5.3指针数组作为main函数的参数 353

11.6函数与指针 354

11.6.1函数指针调用函数 354

11.6.2指向函数的指针作为函数参数 355

11.7返回指针值的函数 358

11.7.1为什么函数要返回指针值——可以返回多个值 358

11.7.2返回指针类型的函数 358

11.8小结 360

第12章 结构体和共用体 361

12.1结构体 362

12.1.1为什么要有结构体 362

12.1.2结构体类型的定义 363

12.1.3定义结构体变量 363

12.1.4引用结构体变量 365

12.1.5结构体变量的初始化 367

12.2结构体数组 369

12.2.1为什么要有结构体数组 369

12.2.2定义结构体数组 369

12.2.3结构体数组的初始化 370

12.2.4结构体数组应用举例 371

12.3指针与结构体 375

12.3.1指向结构体变量的指针 375

12.3.2指向结构体数组的指针 376

12.3.3结构体变量和指向结构体的指针作为函数的参数 378

12.4 typedef类型定义 382

12.4.1 typedef——为数据类型重新起个名字 382

12.4.2使用typedef时应注意的问题 384

12.4.3 typedef的应用举例 384

12.5共用体 387

12.5.1为什么要有共用体——节省内存,多选一 387

12.5.2定义共用体 388

12.5.3引用共用体变量 389

12.5.4使用共用体应该注意的问题 390

12.5.5共用体应用举例 390

12.6枚举类型 393

12.6.1为什么要有枚举类型——变量的值只有有限的几种 393

12.6.2定义枚举类型及变量 394

12.6.3使用枚举类型时应注意的问题 394

12.6.4枚举类型应用举例 395

12.7小结 396

第13章 位运算 397

13.1为什么要有位运算与位运算符 398

13.1.1为什么要有位运算——提高效率 398

13.1.2位运算符 398

13.1.3位运算符的优先级与结合性 399

13.2位运算符和位运算 399

13.2.1按位与运算符和按位与运算 399

13.2.2按位或运算符与按位或运算 401

13.2.3按位异或运算符与按位异或运算 401

13.2.4按位取反运算符与按位取反运算 403

13.2.5左移运算符与左移运算 404

13.2.6右移运算符与右移运算 405

13.2.7与位运算符相结合的赋值运算符 405

13.3位运算应用举例 406

13.3.1以二进制形式输出一个数——按位与运算并输出1或0 406

13.3.2取一个整数的中间几位 407

13.4位段 409

13.4.1定义位段 409

13.4.2引用位段成员 410

13.4.3使用位段需要说明的问题 411

13.5小结 412

第14章 文件 413

14.1文件的相关概念 414

14.1.1为什么要有文件 414

14.1.2文件的分类——二进制文件和文本文件 414

14.1.3缓冲文件系统 414

14.2打开与关闭文件 415

14.2.1文件类型指针——FILE 415

14.2.2打开文件——使用fopen函数 416

14.2.3关闭文件——使用fclose函数 417

14.3读取文件与写入文件 418

14.3.1使用fputc函数写文件和使用fgetc函数读取文件 418

14.3.2使用fputs函数写文件和使用fgets函数读取文件 422

14.3.3使用fwrite函数写文件和使用fread函数读取文件 424

14.3.4使用fprintf函数写文件和使用fscanf函数读取文件 426

14.4文件的定位 428

14.4.1 rewind函数——移动位置指针到文件的开始位置 428

14.4.2 fseek函数——移动位置指针到任意位置 429

14.4.3 ftell函数——得到位置指针的当前位置 431

14.5文件状态检测 432

14.5.1 feof函数——检测位置指针是否到了文件末尾 432

14.5.2 ferror函数——检测是否操作文件错误 432

14.5.3 clearerr函数——清除错误标志 433

14.6文件的输入与输出操作函数总结 433

14.7小结 434

第15章 链表 435

15.1链表的相关概念 436

15.1.1为什么要有链表——节省内存单元,不用事先定义空间大小 436

15.1.2什么是链表 436

15.1.3简单链表——静态链表 438

15.1.4动态存储分配 442

15.2链表的操作 443

15.2.1创建链表 443

15.2.2链表的输出操作 447

15.2.3链表的插入操作 449

15.2.4链表的删除操作 453

15.2.5链表的综合操作 456

15.3链表操作应用举例 457

15.3.1链表操作应用举例——逆置链表 457

15.3.2链表操作应用举例——约瑟夫问题 463

15.4小结 467

第16章 键盘和鼠标 469

16.1键盘操作 470

16.1.1键盘编码 470

16.1.2键盘操作函数 470

16.2鼠标操作 472

16.2.1鼠标的工作原理 473

16.2.2鼠标综合应用举例 477

16.3小结 484

第17章 网络编程基础 485

17.1网络基础知识 486

17.1.1什么是计算机网络 486

17.1.2网络协议 486

17.1.3协议分层 487

17.1.4网络参考模型 488

17.1.5端口 491

17.2 WinSocket基础 491

17.2.1套接字Socket 491

17.2.2基于TCP的Socket编程 491

17.2.3基于UDP的Socket编程 493

17.3 WinSocket相关函数 493

17.3.1 WSAStartup函数——启动套接字库 494

17.3.2 Socket函数——建立套接字 494

17.3.3 bind函数——绑定本地IP地址和端口 495

17.3.4 listen函数——侦听客户端请求 496

17.3.5 accept函数——等待客户端的请求 496

17.3.6 send函数——发送数据 496

17.3.7 recv函数——接收数据 497

17.3.8 connect函数——建立连接 497

17.3.9 recvfrom函数——接收数据 497

17.3.10 sendto函数——发送数据 497

17.4基于TCP的简单网络程序 498

17.4.1服务器端的程序实现 498

17.4.2客户端程序的实现 501

17.5基于UDP的简单网络聊天程序 503

17.5.1服务器端程序的实现 503

17.5.2客户端程序的实现 505

17.6小结 506

第18章 常用算法 507

18.1算法基础 508

18.1.1什么是算法及算法的描述语言 508

18.1.2算法的特性 509

18.1.3算法设计的目标 509

18.1.4算法的时间复杂度和空间复杂度 510

18.2迭代算法 511

18.2.1算法思想 511

18.2.2求一个数的平方根 511

18.2.3角谷猜想 512

18.2.4牛顿迭代法 513

18.3递推算法 515

18.3.1认识递推 515

18.3.2斐波那契数列 516

18.3.3分西瓜 517

18.3.4该存多少钱 518

18.4穷举算法 518

18.4.1算法思想 519

18.4.2完全数 519

18.4.3背包问题 520

18.5递归算法 521

18.5.1算法思想 522

18.5.2数制转换 522

18.5.3组合问题 523

18.6分治算法 525

18.6.1算法思想 525

18.6.2求n个数的最大值和最小值 525

18.6.3赛程安排问题 527

18.7贪心算法 530

18.7.1算法思想 530

18.7.2加油站问题 531

18.7.3找零钱问题 532

18.8矩阵算法 534

18.8.1打印魔方阵 534

18.8.2打印拉丁方阵 536

18.8.3将矩阵旋转90度 537

18.9小结 539

第19章 简单数据结构——栈和队列 541

19.1队列 542

19.1.1队列的定义 542

19.1.2队列的表示与实现 543

19.1.3顺序循环队列 544

19.1.4顺序循环队列的实现 545

19.1.5链式队列的表示与实现 547

19.1.6队列的应用——商品货架模拟 549

19.2栈 553

19.2.1栈的定义 553

19.2.2顺序栈的存储结构与实现 553

19.2.3链式栈的存储结构与实现 555

19.2.4栈的应用举例——算术表达式求值 557

19.3小结 563

第20章 常用技术——排序 565

20.1排序的基础知识 566

20.1.1排序的相关概念 566

20.1.2排序算法的分类 567

20.2插入类排序 567

20.2.1直接插入排序 568

20.2.2折半插入排序 569

20.2.3希尔排序 571

20.3选择类排序 573

20.3.1简单选择排序 573

20.3.2堆排序 575

20.4交换类排序 582

20.4.1冒泡排序 582

20.4.2快速排序 584

20.5归并类排序 587

20.5.1二路归并排序算法思想 587

20.5.2二路归并排序算法实现 588

20.6分配类排序 591

20.6.1基数排序算法思想 591

20.6.2基数排序算法实现 592

20.7各种排序方法的比较 598

20.8小结 599

第21章 学生成绩管理系统 601

21.1系统总体设计 602

21.1.1项目开发目标 602

21.1.2系统功能描述 602

21.2系统详细设计 603

21.2.1主函数的运行流程 603

21.2.2功能模块设计 604

21.2.3数据结构设计 606

21.2.4函数功能描述 606

21.3系统实现与系统测试 608

21.3.1编码 608

21.3.2系统测试 621

21.4小结 625

第22章C语言常见错误与程序调试技术 627

22.1常见错误 628

22.1.1错误分类 628

22.1.2常见错误举例 628

22.2程序调试 632

22.2.1 Visual C+++ 6.0开发环境的程序调试 632

22.2.2程序调试应用举例 638

22.3小结 643

后记 645

参考文献 651