图书目录

第1章程序设计和C语言1

1.1计算机与程序、程序设计语言1

1.2C语言的特点2

1.3简单的C语言程序3

1.4C语言程序的结构6

1.5运行C程序的步骤与方法8

1.6程序设计的任务10

1.7算法——程序的灵魂11

1.7.1程序是什么11

1.7.2什么是算法12

1.7.3怎样表示一个算法13

1.8结构化程序设计方法19

1.9学习程序设计,培养计算思维21

本章小结23

习题23

第2章最简单的C程序设计——顺序程序设计25

2.1顺序程序设计举例25

2.2数据的类型及存储形式29

2.2.1C的数据类型29

2.2.2数据的表现形式——常量和变量29

2.2.3整型数据31

2.2.4字符型数据36

2.2.5浮点型数据41

2.3用表达式进行数据的运算43

2.3.1C表达式43

2.3.2C运算符44

2.3.3运算符的优先级与结合性46〖〗〖〗〖〗〖〗〖〗2.3.4不同类型数据间的混合运算46

2.3.5强制类型转换47

2.4最常用的C语句——赋值语句48

2.4.1C语句综述48

2.4.2赋值表达式50

2.4.3赋值语句53

2.5数据的输入输出55

2.5.1C语言中输入输出的概念55

2.5.2用printf函数输出数据57

2.5.3用scanf函数输入数据62

2.5.4字符数据的输入输出65

本章小结67

习题68

第3章选择结构程序设计71

3.1简单的选择结构程序71

3.2选择结构中的关系运算73

3.2.1关系运算符及其优先次序73

3.2.2关系表达式73

3.3选择结构中的逻辑运算74

3.3.1逻辑运算符及其优先次序75

3.3.2逻辑表达式76

3.4用if语句实现选择结构78

3.4.1if语句的三种形式78

3.4.2if语句的嵌套80

3.5用条件表达式实现选择结构83

3.6利用switch语句实现多分支选择结构86

3.7选择结构程序综合举例88

本章小结94

习题94

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

4.1程序需要循环96

4.2用while语句和do…while语句实现循环96

4.2.1用while语句实现循环96

4.2.2用do…while语句实现循环98

4.2.3while循环和do…while循环的比较99

4.2.4递推与迭代101

4.3用for语句实现循环104

4.3.1for语句的执行过程104

4.3.2for语句的各种形式106

4.3.3for循环应用举例108

4.4循环的嵌套110

4.5用break语句和continue语句改变循环状态110

4.5.1用break语句提前退出循环110

4.5.2用continue语句提前结束本次循环111

4.6几种循环的比较113

4.7循环程序举例113

本章小结116

习题117

第5章利用数组处理批量数据119

5.1数组的作用119

5.2怎样定义和引用一维数组120

5.2.1怎样定义一维数组120

5.2.2怎样引用一维数组元素120

5.2.3一维数组的初始化121

5.2.4利用一维数组的典型算法——递推与排序122

5.3怎样定义和引用二维数组125

5.3.1怎样定义二维数组125

5.3.2怎样引用二维数组的元素126

5.3.3二维数组程序举例126

5.3.4二维数组的初始化129

5.4利用字符数组处理字符串数据130

5.4.1怎样定义字符数组 130

5.4.2字符数组的初始化131

5.4.3引用字符数组的元素132

5.4.4字符串和字符串结束标志133

5.4.5字符数组的输入输出方法135

5.4.6有关字符处理的算法136

5.4.7利用字符串处理函数139

本章小结142

习题143

第6章利用函数进行模块化程序设计145

6.1为什么要使用函数145

6.1.1函数是什么145

6.1.2程序和函数146

6.2怎样定义函数147

6.2.1为什么要定义函数147

6.2.2怎样定义无参函数148

6.2.3怎样定义有参函数148

6.3函数参数和函数的值149

6.3.1形式参数和实际参数 149

6.3.2函数的返回值150

6.4函数的调用151

6.4.1函数调用的一般形式151

6.4.2调用函数的方式152

6.4.3对被调用函数的声明和函数原型152

6.5函数的嵌套调用155

6.6函数的递归调用156

6.6.1什么是函数的递归调用156

6.6.2递归算法分析157

6.6.3用递归函数实现递归算法160

6.7数组作为函数参数164

6.8函数应用举例——编写排序程序167

6.9变量的作用域和生存期170

6.9.1局部变量171

6.9.2全局变量171

6.9.3变量的存储方式和生存期172

6.9.4作用域与生存期小结175

6.10关于变量的声明和定义177

本章小结178

习题180

第7章善于使用指针181

7.1什么是指针181

7.2变量的指针和指向变量的指针变量183

7.2.1怎样定义指针变量183

7.2.2怎样引用指针变量185

7.2.3指针变量作为函数参数188

7.3通过指针引用数组192

7.3.1数组元素的指针192

7.3.2指针的运算193

7.3.3通过指针引用数组元素195

7.3.4用数组名作函数参数198

7.4通过指针引用字符串204

7.4.1引用字符串的方法204

7.4.2字符指针作函数参数208

7.4.3对使用字符指针变量和字符数组的归纳211

本章小结213

习题217

第8章根据需要创建数据类型219

8.1定义和引用结构体变量219

8.1.1怎样创建结构体类型219

8.1.2怎样定义结构体类型变量 221

8.1.3引用结构体变量223

8.2使用结构体数组226

8.2.1定义结构体数组226

8.2.2结构体数组应用举例228

8.3结构体指针229

8.3.1指向结构体变量的指针229

8.3.2指向结构体数组的指针231

8.3.3用结构体变量和结构体变量的指针作函数参数232

8.4用指针处理链表235

8.4.1什么是链表235

8.4.2建立简单的静态链表237

8.4.3建立动态链表238

8.4.4输出链表241

8.5使用枚举类型244

8.5.1什么是枚举和枚举变量244

8.5.2枚举型数据应用举例245

本章小结248

习题249

第9章利用文件保存数据250

9.1C文件的有关概念250

9.1.1什么是文件250

9.1.2文件名251

9.1.3文件的分类251

9.1.4文件缓冲区252

9.1.5文件指针252

9.1.6文件的位置指针253

9.2文件的打开与关闭254

9.2.1用fopen函数打开文件254

9.2.2用fclose函数关闭文件255

9.3文件的顺序读写255

9.3.1向文件读写一个字符256

9.3.2向文件读写一个字符串258

9.3.3对文件进行格式化读写261

9.3.4按二进制方式对文件进行读写261

9.4文件的随机读写262

9.4.1文件位置指针的定位262

9.4.2对文件进行随机读写264

本章小结265

习题267

附录A常用字符与ASCII代码对照表268附录BC语言中的关键字269附录C运算符和结合性270附录DC语言常用语法提要273附录EC库函数278参考文献285

〖〗〖〗〖〗〖〗〖〗第2篇基于过程的程序设计

第3章程序设计初步45

3.1基于过程的程序设计和算法45

3.1.1算法的概念45

3.1.2算法的表示46

3.2C++的程序结构和C++语句47

3.3赋值操作50

3.4C++的输入与输出50

3.4.1输入流与输出流的基本操作51

3.4.2在标准输入流与输出流中使用控制符53

3.4.3用getchar和putchar 函数进行字符的输入和输出56

3.4.4用scanf和printf函数进行输入和输出57

3.5编写顺序结构的程序58

3.6关系运算和逻辑运算59

3.6.1关系运算和关系表达式60

3.6.2逻辑常量和逻辑变量61

3.6.3逻辑运算和逻辑表达式62

3.7选择结构和if语句64

3.7.1if语句的形式64

3.7.2if语句的嵌套67

3.7.3条件运算符和条件表达式68

3.7.4多分支选择结构与switch 语句69

3.7.5编写选择结构的程序71

3.8循环结构和循环语句74

3.8.1用while语句构成循环74

3.8.2用dowhile语句构成循环75

3.8.3用for语句构成循环76

3.8.4几种循环的比较79

3.8.5循环的嵌套79

3.8.6提前结束循环(break语句和continue语句)80

3.8.7编写循环结构的程序81

习题85

第4章利用函数实现指定的功能88

4.1为什么需要函数88

4.2定义函数的一般形式90

4.2.1定义无参函数的一般形式90

4.2.2定义有参函数的一般形式91

4.3函数参数和函数的值91

4.3.1形式参数和实际参数91

4.3.2函数的返回值93

4.4函数的调用94

4.4.1函数调用的一般形式94

4.4.2函数调用的方式94

4.4.3对被调用函数的声明和函数原型94

4.5函数的嵌套调用97

4.6函数的递归调用994.7内置函数1034.8函数的重载1044.9函数模板1074.10有默认参数的函数109

4.11局部变量和全局变量111

4.11.1局部变量111

4.11.2全局变量112

4.12变量的存储类别113

4.12.1动态存储方式与静态存储方式113

4.12.2自动变量114

4.12.3用static声明静态局部变量115

4.12.4用register声明寄存器变量117

4.12.5用extern声明外部变量118

4.12.6用static声明静态外部变量119

4.13变量属性小结120

4.14关于变量的声明和定义122

4.15内部函数和外部函数123

4.15.1内部函数123

4.15.2外部函数123

4.16头文件125

4.16.1头文件的内容125

4.16.2关于C++标准库和头文件的形式126

习题126

第5章利用数组处理批量数据128

5.1为什么需要用数组128

5.2定义和引用一维数组129

5.2.1定义一维数组129

5.2.2引用一维数组的元素129

5.2.3一维数组的初始化130

5.2.4一维数组程序举例130

5.3定义和引用二维数组132

5.3.1定义二维数组133

5.3.2引用二维数组的元素134

5.3.3二维数组的初始化134

5.3.4二维数组程序举例136

5.4用数组作函数参数137

5.5字符数组141

5.5.1定义和初始化字符数组141

5.5.2字符数组的赋值与引用142

5.5.3字符串和字符串结束标志143

5.5.4字符数组的输入输出144

5.5.5使用字符串处理函数对字符串进行操作146

5.5.6字符数组应用举例1485.6C++处理字符串的方法——字符串类与字符串变量149

5.6.1字符串变量的定义和引用150

5.6.2字符串变量的运算151

5.6.3字符串数组151

5.6.4字符串运算举例152

习题155

第6章善于使用指针与引用157

6.1什么是指针157

6.2变量与指针159

6.2.1定义指针变量159

6.2.2引用指针变量161

6.2.3用指针作函数参数163

6.3数组与指针168

6.3.1指向数组元素的指针168

6.3.2用指针变量作函数形参接收数组地址170

6.4字符串与指针173

6.5函数与指针175

6.5.1用函数指针调用函数175

6.5.2用指向函数的指针作函数参数176

6.6返回指针值的函数177

6.7指针数组和指向指针的指针 177

6.7.1指针数组177

6.7.2指向指针的指针1796.8const指针181

6.9void指针类型183

6.10有关指针的数据类型和指针运算的小结184

6.10.1有关指针的数据类型的小结184

6.10.2指针运算小结1856.11引用186

6.11.1什么是变量的引用186

6.11.2引用的简单使用188

6.11.3引用作为函数参数188

习题192

第7章用户自定义数据类型194

7.1结构体类型194

7.1.1为什么需要用结构体类型194

7.1.2结构体类型变量的定义方法及其初始化195

7.1.3引用结构体变量198

7.1.4结构体数组200

7.1.5指向结构体变量的指针204

7.1.6结构体类型数据作为函数参数207

7.1.7用new和delete运算符进行动态分配和撤销存储空间210

7.2共用体类型212

7.3枚举类型212

7.4用typedef声明新的类型名216

习题218

第3篇基于对象的程序设计

第8章类和对象的特性223

8.1面向对象程序设计方法概述223

8.1.1什么是面向对象的程序设计223

8.1.2面向对象程序设计的特点227

8.1.3类和对象的作用228

8.1.4面向对象的软件开发229

8.2类的声明和对象的定义230

8.2.1类和对象的关系230

8.2.2声明类类型230

8.2.3定义对象的方法233

8.2.4类和结构体类型的异同234

8.3类的成员函数236

8.3.1成员函数的性质236

8.3.2在类外定义成员函数236

8.3.3内置成员函数237

8.3.4成员函数的存储方式239

8.4对象成员的引用241

8.4.1通过对象名和成员运算符访问对象中的成员241

8.4.2通过指向对象的指针访问对象中的成员241

8.4.3通过对象的引用来访问对象中的成员242

8.5类的封装性和信息隐蔽242

8.5.1公用接口与私有实现的分离242

8.5.2类声明和成员函数定义的分离244

8.5.3面向对象程序设计中的几个名词245

8.6类和对象的简单应用举例245

习题252

第9章怎样使用类和对象255

9.1利用构造函数对类对象进行初始化255

9.1.1对象的初始化255

9.1.2用构造函数实现数据成员的初始化256

9.1.3带参数的构造函数258

9.1.4用参数初始化表对数据成员初始化260

9.1.5构造函数的重载261

9.1.6使用默认参数的构造函数263

9.2析构函数265

9.3调用构造函数和析构函数的顺序267

9.4对象数组269

9.5对象指针271

9.5.1指向对象的指针271

9.5.2指向对象成员的指针272

9.5.3this指针275

9.6共用数据的保护276

9.6.1常对象277

9.6.2常对象成员278

9.6.3指向对象的常指针279

9.6.4指向常对象的指针变量280

9.6.5对象的常引用283

9.6.6const型数据的小结284

9.7对象的动态建立和释放284

9.8对象的赋值和复制286

9.8.1对象的赋值286

9.8.2对象的复制287

9.9静态成员290

9.9.1静态数据成员290

9.9.2静态成员函数292

9.10友元296

9.10.1友元函数296

9.10.2友元类300

9.11类模板300

习题305

第10章运算符重载308

10.1什么是运算符重载308

10.2运算符重载的方法310

10.3重载运算符的规则313

10.4运算符重载函数作为类成员函数和友元函数314

10.5重载双目运算符318

10.6重载单目运算符322

10.7重载流插入运算符“<<”和流提取运算符“>>”325

10.7.1重载流插入运算符“<<”325

10.7.2重载流提取运算符“>>”328

10.8有关运算符重载的归纳 329

10.9不同类型数据间的转换331

10.9.1标准类型数据间的转换331

10.9.2用转换构造函数进行不同类型数据的转换331

10.9.3类型转换函数333

习题338

第4篇面向对象的程序设计

第11章继承与派生343

11.1继承与派生的概念343

11.2派生类的声明方式346

11.3派生类的构成346

11.4派生类成员的访问属性348

11.4.1公用继承349

11.4.2私有继承351

11.4.3保护成员和保护继承354

11.4.4多级派生时的访问属性358

11.5派生类的构造函数和析构函数359

11.5.1简单的派生类的构造函数359

11.5.2有子对象的派生类的构造函数363

11.5.3多层派生时的构造函数366

11.5.4派生类构造函数的特殊形式368

11.5.5派生类的析构函数369

11.6多重继承369

11.6.1声明多重继承的方法369

11.6.2多重继承派生类的构造函数370

11.6.3多重继承引起的二义性问题372

11.6.4虚基类376

11.7基类与派生类的转换380

11.8继承与组合384

11.9继承在软件开发中的重要意义385

习题387

第12章多态性与虚函数392

12.1多态性的概念392

12.2一个典型的例子393

12.3利用虚函数实现动态多态性398

12.3.1虚函数的作用398

12.3.2静态关联与动态关联402

12.3.3在什么情况下应当声明虚函数403

12.3.4虚析构函数404

12.4纯虚函数与抽象类405

12.4.1纯虚函数405

12.4.2抽象类406

12.4.3应用实例407

习题413

第13章输入输出流415

13.1C++的输入和输出415

13.1.1输入输出的含义415

13.1.2C++的I/O对C的发展——类型安全和可扩展性415

13.1.3C++的输入输出流416

13.2标准输出流421

13.2.1cout,cerr和clog流421

13.2.2标准类型数据的格式输出423

13.2.3用流成员函数put输出字符426

13.3标准输入流427

13.3.1cin流427

13.3.2用于字符输入的流成员函数428

13.3.3istream类的其他成员函数429

13.4对数据文件的操作与文件流433

13.4.1文件的概念433

13.4.2文件流类与文件流对象434

13.4.3文件的打开与关闭435

13.4.4对ASCII文件的操作437

13.4.5对二进制文件的操作442

13.5字符串流447

习题452

第14章C++工具453

14.1异常处理453

14.1.1异常处理的任务453

14.1.2异常处理的方法454

14.1.3在函数声明中进行异常情况指定461

14.1.4在异常处理中处理析构函数461

14.2命名空间464

14.2.1为什么需要命名空间464

14.2.2什么是命名空间467

14.2.3使用命名空间解决名字冲突469

14.2.4使用命名空间成员的方法471

14.2.5无名的命名空间473

14.2.6标准命名空间std473

14.3使用早期的函数库474

习题475

参考文献480