《零起点学通C语言 多媒体范例教学》PDF下载

  • 购买积分:18 如何计算积分?
  • 作  者:范磊编著
  • 出 版 社:北京:科学出版社
  • 出版年份:2013
  • ISBN:9787030371201
  • 页数:640 页
图书介绍:本书总结了十几本C语言图书及教材的优点,摈弃了它们语言拖沓、层次结构混乱等缺陷,从零开始、由浅入深、层层递进、细致而又详尽地讲解C编程语言。本书知识系统全面,拥有字典般的容量,可随用随查,涵盖函数、指针、结构体、内存操作、数据结构、宏等主流C语言开发技术。为了使读者能够活学活用,本书针对重要的概念精心设计了438个实用范例,囊括大量经验和技巧,即使已从事C语言工作多年的朋友,也能从中汲取新的养料。

第1章 基础知识 1

1.1 计算机语言概述 1

1.1.1机器语言——面向机器的语言 1

1.1.2汇编语言——面向机器的语言 1

1.1.3高级语言——面向过程、面向对象的语言 2

1.2 C语言的起源 2

1.3为什么要学习C语言 4

1.4集成开发环境 5

第2章 一个最简短的C程序 6

2.1程序示例 6

2.2注释 7

2.3 语句 9

2.4块 9

2.5表达式 9

2.6表达式语句 10

2.7总结 11

第3章 运算符 12

3.1常用运算符 12

3.1.1数学运算符 12

3.1.2赋值运算符 13

3.1.3复合赋值运算符 13

3.1.4自加、自减运算符 15

3.1.5前置的自加、自减运算 15

3.1.6后置的自加、自减运算 16

3.2总结 16

第4章 初识函数 17

4.1 自定义函数 17

4.2带参数的函数 18

4.3函数的返回值 19

4.4形式参数与实际参数 20

4.5形参与实参的类型必须一致 21

4.6局部变量 22

4.7全局变量 23

4.8全局变量的缺点 25

4.9作用域 26

4.10输出函数 27

4.11输入函数 29

4.12字符输出函数 31

4.13字符输入函数 31

4.14函数的声明与定义 33

4.15总结 34

5.1 C语言为什么要有数据类型 35

第5章 数据类型 35

5.2变量的通用原则 35

5.2.1变量的声明 35

5.2.2变量的命名 36

5.2.3变量的定义 37

5.2.4变量的赋值与初始化 38

5.2.5初始化的用途 38

5.2.6变量在内存中的排列 39

5.3整型变量 39

5.3.1整型变量的取值范围 40

5.3.2超出取值范围的后果 40

5.3.3 long与int的区别 41

5.3.4输出短整型变量的值 42

5.3.5输出整型变量的值 42

5.3.6输出长整型变量的值 43

5.3.7输出双长整型变量的值 44

5.3.8输出八进制数和十六进制数 45

5.3.9为类型设置别名 46

5.4浮点型变量 47

5.4.1 float型变量的取值范围 48

5.4.2 double型变量的取值范围 49

5.4.3 long double型变量的取值范围 50

5.4.4浮点型变量的精度 51

5.4.5超出精度的误差 51

5.4.6输出浮点型变量的值 53

5.4.7输入数值到浮点型变量 54

5.5字符型变量 54

5.5.1字符型变量与ASCII码 55

5.5.2字符型变量的赋值 56

5.5.3字符型变量只能保存单个字符 57

5.5.4输出所有的可见字符 57

5.5.5数字与数字字符 58

5.5.6显式转换与隐式转换 58

5.5.7类型提升 59

5.5.8类型下降 60

5.5.9特殊字符 60

5.6 _Bool型变量 62

5.7常量 63

5.7.1宏 63

5.7.2 const常量 65

5.7.3 const常量与宏的区别 65

5.7.4枚举型常量 65

5.8总结 66

第6章 条件选择语句 67

6.1关系运算符 67

6.2 if语句 68

6.2.1 else语句 70

6.2.2 else if语句 70

6.2.3 if语句的嵌套 72

6.2.4 if与else的配对 73

6.2.5复杂的嵌套 75

6.3逻辑运算符 76

6.3.1 逻辑与 77

6.3.2 逻辑或 77

6.3.3 逻辑非 78

6.3.4括号改变优先级 79

6.3.5真与假 80

6.4三目运算符 81

6.4.1三目运算符的优先级 82

6.4.2灵活运用三目运算符 82

6.4.3三目运算符的操作数类型 83

6.4.4三目运算符最常见的用法 83

6.5 switch语句 84

6.5.1 switch语句的用法 84

6.5.2 去掉break的switch语句 85

6.6 总结 86

第7章 循环语句 87

7.1 循环语句的前身——goto语句 87

7.2 慎用goto语句 88

7.3 while语句 88

7.3.1带逻辑运算符的while语句 89

7.3.2限定while循环的次数 90

7.3.3 continue语句 91

7.3.4 break语句 92

7.3.5 exit函数 92

7.3.6猜数字 93

7.3.7永不休止的while循环 95

7.4 do...while循环 96

7.5 for循环 97

7.5.1 for循环的执行过程 98

7.5.2 for循环的注意细则 99

7.5.3域 99

7.5.4灵活的for循环 100

7.5.5条件为空的for循环 100

7.5.6导航菜单 102

7.5.7执行为空的for循环 103

7.5.8嵌套的for循环 104

7.5.9九九乘法表 105

7.6总结 106

第8章 综合实例——博弈机 107

8.1模块1——游戏规则 108

8.2模块2——确定选择方式与支出积分 108

8.3模块3——掷出骰子 109

8.4模块4——判断点数的大小 110

8.5模块5——计算输赢的积分数 111

8.6模块6——检查积分够不够 113

8.7程序的入口——主函数 114

8.8完整程序 116

8.9总结 123

第9章 初识指针 124

9.1什么是地址 124

9.2什么是指针 124

9.3通过指针进行读取 125

9.4通过指针进行修改 126

9.5空指针 127

9.6变更指针保存的地址 128

9.7指针自身的地址 128

9.8指针运算 129

9.8.1指针的加减运算 129

9.8.2指针的赋值运算 130

9.8.3指针的相减运算 131

9.8.4指针的比较运算 131

9.9指针的类型 132

9.10 const与指针 133

9.10.1常量指针 133

9.10.2指向常量的指针 134

9.10.3指向常量的常指针 134

9.11总结 135

第10章 堆和栈 136

10.1内存中的数据 136

10.2什么是堆和栈 138

10.2.1栈 138

10.2.2堆 138

10.2.3堆和栈的应用 138

10.3堆与指针 139

10.3.1利用指针访问堆 139

10.3.2释放指针指向的堆空间 140

10.3.3关于free函数的注意事项 141

10.3.4 内存泄露 142

10.3.5迷途指针 143

10.4总结 144

第11章 数组 145

11.1数组的用法 145

11.1.1数组的定义 145

11.1.2数组的元素 145

11.1.3数组的下标越界 146

11.1.4倒序存放数据 147

11.1.5将数组的长度定义为常量 148

11.1.6新手容易犯的错误 149

11.1.7数组的初始化 149

11.2数组的实例 150

11.2.1求平均成绩 150

11.2.2斐波那契数列 151

11.2.3查找最大数 152

11.2.4.查找某数 154

11.3排序算法 155

11.3.1冒泡排序法 155

11.3.2选择排序法 157

11.3.3插入排序法 160

11.4数组在内存中的分布 163

11.5数组名 165

11.6数组名的地址 165

11.7数组与指针 166

11.7.1利用指针输出数组元素 166

11.7.2查找最大数 167

11.8数组与枚举常量 168

11.9什么是多维数组 169

11.10多维数组的初始化 170

11.11 打印杨辉三角形(1) 171

11.12打印杨辉三角形(2) 172

11.13总结 174

第12章 字符串 175

12.1字符数组 175

12.1.1定义字符数组 175

12.1.2初始化字符数组 175

12.1.3输出字符数组中的所有字符 176

12.2字符串 177

12.2.1字符串的初始化 177

12.2.2字符串的输入 178

12.2.3字符串输入的常见问题 179

12.3常用字符串函数 180

12.3.1 strlen函数——得到字符串长度 180

12.3.2 strlwr函数——将大写转为小写 180

12.3.3 strupr函数——将小写转为大写 181

12.3.4 puts函数——字符串输出 181

12.3.5 strcpy函数——字符串复制 182

12.3.6 memcpy函数——内存复制 182

12.3.7 memccpy函数——内存复制 183

12.3.8 strcat函数——字符串连接 184

12.3.9 strncat函数——连接n个字符 184

12.3.10 strchr函数——查找字符 185

12.3.11 strset函数——设置字符串 186

12.3.12 strcmp函数——比较字符串 186

12.3.13 strrev函数——反转字符串 187

12.3.14 strstr函数——查找子串 188

12.3.15常见的字符串函数列表 188

12.4字符串函数的实现思路 189

12.4.1 strlen函数的实现思路 189

12.4.2 strcat函数的实现思路 189

12.4.3 strcpy函数的实现思路 190

12.4.4 strcmp函数的实现思路 191

12.4.5 strrev函数的实现思路 192

12.5字符串函数的应用实例 192

12.5.1 密码验证 193

12.5.2插入字符串 194

12.5.3姓名排序 195

12.6指针与字符串 197

12.6.1字符指针 197

12.6.2字符串常量 198

12.6.3删除字符串中的字符 198

12.6.4字符指针数组 199

12.6.5指向指针的指针 200

12.6.6英语词典 201

12.7总结 203

第13章 结构体和共用体 204

13.1什么是结构体 204

13.2什么是结构变量 204

13.3结构变量的多种定义方式 205

13.4结构变量的简单应用 206

13.5结构变量的初始化 207

13.6结构变量的赋值 208

13.7结构体数组 209

13.8英汉词典 210

13.9结构体的嵌套 217

13.9.1在职员工档案登记系统 218

13.9.2退休员工档案登记系统 220

13.10结构体的大小 222

13.11结构体与指针 224

13.11.1指向结构体变量的指针 224

13.11.2指向结构体数组的指针 225

13.11.3指向结构体数组的指针运算 226

13.12结构体与typedef 227

13.13共用体 228

13.13.1共用体的大小 229

13.13.2共用体变量不能被初始化 229

13.13.3共用体类型可以在结构体类型中定义 230

13.13.4共用体的作用 231

13.14总结 232

第14章 深入函数 233

14.1函数的运行机理 233

14.2函数的特殊调用方式 235

14.3函数的求参顺序 235

14.4函数的嵌套调用 236

14.5函数的递归调用 237

14.5.1直接调用自身 237

14.5.2 间接调用自身 237

14.5.3 终止递归调用 238

14.5.4递归调用的用途 239

14.6指针作为函数参数 240

14.6.1按值传递 240

14.6.2按址传递 241

14.6.3实现系统库函数strlwr 242

14.7数组作为函数参数 243

14.8数组的长度作为函数参数 244

14.9数组只有一个原本 245

14.10数组形参退化为指针 246

14.11指针数组作为函数参数 247

14.12指向指针的指针作为函数参数 249

14.13结构体变量作为函数的参数 250

14.14结构体数组作为函数的参数 251

14.15内部函数 253

14.16外部函数 253

14.17可变参数 255

14.18外部变量 255

14.19静态变量 256

14.19.1静态局部变量 257

14.19.2静态局部变量的应用 258

14.19.3静态全局变量 259

14.19.4全局变量 260

14.20自动变量 260

14.21寄存器变量 261

14.22总结 261

第15章 预处理指令 262

15.1宏定义指令 262

15.1.1无参宏 262

15.1.2无参宏的注意事项 263

15.1.3无参宏的应用 263

15.1.4宏的嵌套定义 264

15.1.5#undef指令 265

15.1.6带参宏 265

15.1.7带参宏的注意事项 266

15.1.8带参宏与函数的区别 266

15.1.9带参宏的应用 267

15.1.10#运算符 267

15.1.11 可变参数 267

15.2包含文件指令 270

15.2.1 包含文件的方式 270

15.2.2头文件 271

15.3条件编译指令 273

15.3.1#if指令 273

15.3.2#elif指令 274

15.3.3#ifdef指令 274

15.3.4#ifdef的应用 275

15.3.5#ifndef的应用 276

15.4预定义的宏 276

15.5 assert()宏 279

15.6尝试编写一个简单的assert()宏 279

15.7总结 282

第16章 学生成绩管理系统 283

16.1模块1——菜单选择 284

16.2模块2——添加记录 284

16.3模块3——显示记录 285

16.4模块4——修改记录 286

16.5模块5——删除记录 287

16.6模块6——查找记录 288

16.7模块7——排序记录 288

16.8程序的入口——主函数 289

16.9完整程序 290

16.10总结 296

第17章 深入指针 298

17.1 void指针 298

17.1.1声明void指针 298

17.1.2 void指针的作用 299

17.1.3实现memset函数 301

17.2返回指针的函数 303

17.3函数指针 304

17.3.1声明函数指针 304

17.3.2为什么要使用函数指针 305

17.3.3 函数指针作为函数参数 307

17.3.4函数指针数组 308

17.3.5利用typedef简化函数指针类型的声明 309

17.4动态数组 311

17.4.1什么是动态数组 311

17.4.2多维动态数组 312

17.5链表 314

17.5.1什么是链表 314

17.5.2声明链表结构 315

17.5.3静态链表 315

17.5.4动态链表 316

17.5.5动态创建节点 317

17.5.6显示节点数据 320

17.5.7删除节点 321

17.5.8修改节点数据 322

17.5.9查找节点 323

17.5.10统计节点 324

17.5.11排序节点 324

17.5.12链表的应用 326

17.5.13完整的动态链表清单 327

第18章 位运算 336

18.1位运算符 336

18.1.1按位与运算符(&) 336

18.1.2为什么用补码来表示负数 337

18.1.3按位与运算符的用途——按位清零 339

18.1.4按位与运算符的用途——取指定位 340

18.1.5按位或运算符(|) 340

18.1.6按位或运算符的用途——将某数低4位取1 341

18.1.7异或运算符(∧) 341

18.1.8异或运算符的特点 342

18.1.9异或运算符的用途——使特定或全部位反转 342

18.1.10异或运算符的用途——不用临时变量来交换两个值 343

18.1.11取反运算符(~) 344

18.1.12取反运算符的用途——便于移植 344

18.1.13取反运算符的用途——提供遮罩 346

18.1.14左移运算符(<<) 346

18.1.15右移运算符(>>) 347

18.1.16位运算的注意事项 348

18.1.17位运算的实例1——输出整数的补码 349

18.1.18位运算的实例2——输出整数的原码 350

18.2复合赋值运算符 350

18.3位字段 351

18.3.1位字段的大小 353

18.3.2位字段的注意事项 354

18.3.3位字段的实例 356

18.3.4输出浮点数的二进制 359

18.4总结 360

第19章 文件 361

19.1文件概述 361

19.1.1文本文件与二进制文件 361

19.1.2文件名 362

19.2缓冲区 362

19.3流 363

19.3.1输入与输出设备 364

19.3.2什么是流 364

19.4流函数 368

19.5标准库中的流函数 370

19.5.1 vprintf函数 370

19.5.2 vfprintf函数 371

19.5.3 fprintf函数 372

19.5.4 vscanf函数 372

19.5.5 vfscanf函数 373

19.5.6 fscanf函数 373

19.5.7 puts函数 373

19.5.8 fputs函数 374

19.5.9 putchar函数 374

19.5.10 putc函数 375

19.5.11 fputc函数 378

19.5.12 gets函数 379

19.5.13 fgets函数 381

19.5.14 getchar函数 382

19.5.15 getchar函数须知 382

19.5.16 getc函数 384

19.5.17 fgetc函数 387

19.6非标准库中的流函数 388

19.6.1 putw函数 388

19.6.2 getw函数 388

19.7特殊的流函数 389

19.7.1 getch函数 389

19.7.2 getche函数 390

19.8文件的读写 390

19.8.1读取文本文件 391

19.8.2写入文本文件 393

19.8.3不调用fclose函数的后果 394

19.9以行为单位读写文件 395

19.9.1一次读取一行 395

19.9.2一次写入一个字符串 396

19.10格式化读写文件 397

19.10.1格式化写文件 397

19.10.2格式化读文件 398

19.11成块读写文件 398

19.11.1成块写文件 398

19.11.2成块读文件 400

19.11.3按结构块读写文件 401

19.12文件的多种打开方式 403

19.12.1打开方式为″r″ 404

19.12.2打开方式为″w″ 405

19.12.3打开方式为″r+″ 406

19.12.4打开方式为″w+″ 407

19.12.5打开方式为″a″ 408

19.12.6打开方式为″a+″ 409

19.12.7″r″、″w″、″r+″、″w+″、″a″、″a+″须知 410

19.12.8打开方式为″wb″和″rb″ 410

19.12.9打开方式为″rb+″与″wb+″ 412

19.12.10打开方式为″ab″ 413

19.12.11打开方式为″ab+″ 416

19.12.12″rb″、″wb″、″rb+″、″wb+″、″ab″、″ab+″须知 417

19.12.13打开文本文件和打开二进制文件的区别 417

19.13错误处理 418

19.13.1文件的权限不够 418

19.13.2读取错误 419

19.14随机读写文件 421

19.14.1 fseek函数 421

19.14.2 ftell函数 424

19.15统计文件内容 425

19.15.1统计英文文档 425

19.15.2统计中英混合文档 426

19.16文件操作 431

19.16.1文件改名 431

19.16.2删除文件 432

19.16.3删除目录 433

19.16.4创建目录 434

19.16.5列出指定目录中的文件和子目录 435

19.16.6查找文件 440

19.16.7创建临时文件 445

19.16.8产生临时文件名 446

19.16.9为临时文件名添加后缀 447

19.17文件内容操作 449

19.17.1查找文件中的字符串 449

19.17.2复制文件中的内容到另一文件 450

19.17.3删除文件中的字符串 452

19.17.4修改文件中的字符串 455

19.17.5添加字符串到文件中 457

19.18文件的分割与合并 460

19.18.1分割文件 460

19.18.2合并文件 463

19.19文件的加密与解密 466

19.20批量修改文件 468

19.21非标准文件操作函数 470

19.21.1 access函数 471

19.21.2 _mktemp函数 472

19.22总结 473

第20章 通讯录 474

20.1模块1——用户注册 475

20.2模块2——用户登录 479

20.3菜单1——申请登录系统 480

20.4菜单2——通讯录管理系统 481

20.5模块3——增加记录 482

20.6模块4——删除记录 483

20.7模块5——列出记录 484

20.8模块6——查找记录 485

20.9模块7——保存记录 486

20.10模块8——读取记录 487

20.11主模块——main函数 488

20.12完整程序 489

20.13总结 501

第21章 补充知识 502

21.1逗号、自加自减运算符 502

21.1.1逗号运算符 502

21.1.2逗号运算符的优先级 503

21.1.3逗号运算符的结合方向 504

21.1.4逗号的其他用途 504

21.1.5 自加、自减运算符的优先级 505

21.1.6 自加、自减运算符的结合方向 505

21.1.7未定义的行为 507

21.1.8总结 507

21.2可移植的整数类型 507

21.3头文件stdint.h 508

21.4 printf详解 512

21.4.1 printf中的格式符 512

21.4.2打印字符和字符串 513

21.4.3打印有符号整数 513

21.4.4打印无符号整数 513

21.4.5打印浮点数 514

21.4.6打印地址 515

21.4.7计算字符数%n 515

21.4.8打印百分号% 516

21.4.9 printf的修饰符 516

21.4.10修饰符n 517

21.4.11修饰符m 518

21.4.12修饰符m.n 519

21.4.13修饰符 519

21.4.14处理其他数据类型的修饰符 519

21.4.15标志(-) 522

21.4.16标志(+) 522

21.4.17标志(空格) 523

21.4.18标志(0) 523

21.4.19标志(#) 523

21.5 scanf详解 524

21.5.1 scanf中的格式符 524

21.5.2读入字符和字符串 525

21.5.3读入有符号整数 526

21.5.4读入无符号整数 527

21.5.5读入浮点数 527

21.5.6格式串中的分隔符 528

21.5.7输入地址 528

21.5.8计算字符数%n 529

21.5.9读入百分号% 529

21.5.10扫描集合%[] 530

21.5.11 scanf的修饰符 531

21.5.12域长修饰符 532

21.5.13修饰符 532

21.5.14 scanf的注意事项 533

21.6缓冲区与编译器 533

21.6.1设置缓冲区 534

21.6.2缓冲模式 537

21.6.3缓冲模式须知 540

21.6.4刷新缓冲区 540

21.7强制刷新缓冲区 541

21.7.1 Windows平台下强制刷新缓冲区 542

21.7.2 Linux平台下强制刷新缓冲区 543

21.7.3 自己写代码刷新输入缓冲区 544

21.7.4非即时性的检查 547

21.7.5利用fpurge函数刷新输入缓冲区 549

21.8 总结 550

附录A ASCII码对照表 551

附录B C语言的关键字 554

附录C 运算符的优先级 556

附录D C语言常用头文件列表 558

附录E C标准库(C89) 559

E.1 C标准头文件(C89) 559

E.2 C标准库函数(C89) 560

E.2.1标准数学函数 560

E.2.2标准输入输出函数 563

E.2.3标准字符串函数 568

E.2.4标准字符分类函数 572

E.2.5标准类型转换函数 573

E.2.6标准多字节处理函数 575

E.2.7标准内存分配函数 576

E.2.8标准算法函数 577

E.2.9标准整型算术函数 577

E.2.10标准环境接口函数 578

E.2.11 标准日期与时间函数 579

E.2.12标准本地化函数 580

E.2.13标准信号处理函数 580

E.2.14标准非局部跳转函数 581

E.2.15标准可变参数宏 581

E.2.16标准诊断宏 582

E.2.17标准宏 582

E.3 C标准库中的常量(C89) 583

E.3.1 检测数值范围的常量 583

E.3.2错误码常量 585

附录F C89增补1 587

F.1 #include<iso646.h> 587

F.2 #include<wchar.h> 588

F.3 #include<wctype.h> 593

附录G C99 594

G.1 #include<complex.h> 594

G.2 #include<tgmath.h> 595

G.3 #include<fenv.h> 596

G.4 #include<stdbool.h> 596

G.5 #include<stdint.h> 596

G.6 #include<inttypes.h> 602

附录H 主流集成开发环境 611

H.1主流集成开发环境的介绍 611

H.1.1 Code?Blocks? 611

H.1.2 Dev-C+++? 611

H.1.3 Microsoft Visual C+++6.0? 611

H.1.4 Microsoft Visual Studio? 612

H.2主流集成开发环境的安装与设置 612

H.2.1 Code?Blocks的安装与设置? 612

H.2.2 Dev-C+++的安装与设置? 615

H.2.3 Microsoft Visual C+++6.0的安装与设置? 619

H.2.4 Microsoft Visual Studio的安装与设置? 628

H.3主流集成开发环境的使用 631

H.3.1 Code?Blocks的使用? 631

H.3.2 Dev-C+++的使用? 634

H.3.3 Microsoft Visual C+++6.0的使用? 636

H.3.4 Microsoft Visual Studio 2010的使用? 638

后记 640