C++程序设计案例实训教程 目录

   

 

第一篇  C++过程程序设计

第1章  从最简单的案例讲述C++ 1

1.1  C++程序的结构

【案例1-1  显示Hello World! 1

1.2  常量

【案例1-2】  各类常量的使用例子

1.3  变量与基本类型

【案例1-3】  取之不尽的箱子

【案例1-4】  物品存放

【案例1-5】  交换物品

1.4  运算符与表达式

【案例1-6】  单片机应用(位操作)

【案例1-7】  房间面积(*)

【案例1-8】  平分物品(/)

【案例1-9】  取余数(%)

【案例1-10】 反转整数(%)

【案例1-11】 求余下的物品数(%)

【案例1-12】 班级人数(综合)

【案例1-13】 称水果(比较)

【案例1-14】 信号灯(++ --)

【案例1-15】 篮球反弹

【案例1-16】 求被3整除的数(%+算法)

【案例1-17 鸡兔同笼

1.5  本章练习

2  类型转换及流程控制

2.1  类型转换

【案例2-1】  消失的重量

【案例2-2】  游泳池的容量

【案例2-3】  显式转换

2.2  判断语句

【案例2-4】  计算年份是否为闰年(各种运算符结合)

【案例2-5】  打印ASCII码表

【案例2-6】  求完数

【案例2-7】  密码验证(if)

【案例2-8】  图书管理(if else)

2.3  循环语句

【案例2-9】  输入符合条件整数(跳出循环)

【案例2-10】 买水果小游戏(开关结构综合)

【案例2-11】 用循环计算9的9次方(for)

【案例2-12】 寻找出口小游戏(do while)

【案例2-13】 剪刀石头布

【案例2-14】 编写一个屏幕小时钟程序

【案例2-15】 屏幕变色效果——使用system()函数改变屏幕颜色

【案例2-16】 屏幕背景闪动效果的实现

【案例2-17】 终极密码

【案例2-18】 彩票游戏

【案例2-19】 随机数是否随机

【案例2-20】 抢答数学题

2.4  本章练习

3  数组

3.1  什么是数组

【案例3-1  推箱子(数组元素移动)

【案例3-2  一个简单的数据统计系统 (综合)

【案例3-3】  输出字符串的每个字符(for访问数组)

【案例3-4】  循环改写一段字符串(for访问数组)

32  一维数组

【案例3-5】  内存输出(打印数据)

【案例3-6】  一维数组的应用

【案例3-7】  整数从大到小排序(比较法)

【案例3-8】  传统杀毒软件基本实现原理(文件关键字定位)

3.3  多维数组

【案例3-9】  数据复制(复制一组数组到另一组数组)

【案例3-10】 查找二维坐标点(二维for)

【案例3-11】 查找矩阵中最大的元素(二维for)

【案例3-12】 二分法查找(二维for)

【案例3-13】 查找三维坐标点(三维for)

【案例3-14】 按位数排列

【案例3-15】 统计班上男生和女生的人数(数组随机访问)

【案例3-16】 内存指令表(数组+开关)

【案例3-17】 同学姓名册(字符数组)

【案例3-18】 图书管理系统(字符数组综合)

【案例3-19】 约瑟问题(把异教徒投入海中排法)

【案例3-20】 数组转置

【案例3-21】  0-1背包问题

4  字符串

4.1  操作字符串

【案例4-1】  把一个字符串截断(\0)

【案例4-2】  复制一个字符串(strcpy())

【案例4-3】  获得字符串长度(strlen())

【案例4-4】  字符串的比较(strcmp())

【案例4-5】  连接两个字符串(strcat())

【案例4-6】  将小写字符转换为大写(strupr())

【案例4-7】  比较两个string字符串

【案例4-8】  查找string的某个元素

【案例4-9】 获取string字符串的长度

【案例4-10】 提取string字符串的子串

【案例4-11】 把两个string字符串相加

【案例4-12】 string字符串与单字符相加

【案例4-13】 使用atoi()函数把字符串转换为整数

【案例4-14】 使用itoa()函数把整数转换为字符串

4.2  字符串输入输出

【案例4-15】 使用get()函数吸收缓冲区垃圾

【案例4-16】 字符串的输入(getline())

4.3  C风格字符串

【案例4-17】 string与C风格字符串转换

【案例4-18】 string字符串与C风格字符串相加

4.4  本章练习

5  指针与引用

5.1  指针的定义与使用

【案例5-1  病毒特征码定位器(文件划分)

52  指针运算

【案例5-2】  将A段内存复制到B段内存(指针内存复制)

【案例5-3】  将内存的数据倒转过来(指针内存复制+算法)

【案例5-4】  将数据隐藏于内存(自定义数据访问规则)

【案例5-5】  输出本机内存数据并排序(高端先存还是低端先存)

【案例5-6】  寻找地址(指针加减法)

【案例5-7】  利用指针删除数组中的指定元素 (指针移动)

5.3  动态内存分配

【案例5-8】  简单地获取变量的字节大小(sizeof)

【案例5-9】  获取数组大小(sizeof)

【案例5-10】 错误释放指针导致程序崩溃

【案例5-11】 经典栈溢出案例

5.4  指针和const

【案例5-12】 求最长字符

【案例5-13】 DOS命令解释器(使main函数接收参数)

【案例5-14】 动态输入字符串作函数参数的实现

【案例5-15】 强制修改常量的值

【案例5-16】 防止野指针的代码

5.5  指针数组和数组指针

【案例5-17】 验证码(函数实现)

【案例5-18】 坐标指针(数组+指针)

【案例5-19】 打印内存数据(char 打印1字节)

5.6引用

【案例5-20】 万能箱子(void*)

【案例5-21】 图书名整理系统

【案例5-22】 指针引用使用问题

【案例5-23】 斗牛网络游戏

5.7  本章练习

6  结构、共用体与链表

6.1  结构

【案例6-1】  输出Huffman编码(结构+算法)

【案例6-2】  用C++实现定时器功能

【案例6-3】  TCP端口扫描器

【案例6-4】  密码破解器

【案例6-5】  扫描主机开放端口

【案例6-6】  删除进程

62  共用体

【案例6-7】  设计一个动态指令接收程序

【案例6-8】  图形输出算法

【案例6-9】  编写指令响应程序

6.3  结构数组和共用体数组

【案例6-10】 网络客户端开发(TCP/UDP)

【案例6-11】 网络服务端开发(TCP/UDP)

【案例6-12】 网络聊天室(基于UDP)

6.4  指向结构的指针

【案例6-13】 指向结构体变量的指针

【案例6-14】 统计数据(综合)

【案例6-15】 人工智能(随机+数据库)

【案例6-16】 最短哈密顿回路问题

【案例6-17】 扫雷游戏

6.5  链表

【案例6-18】 队列的高效历遍(++、--指针运用的高效循环)

6.6  本章练习

7  函数

7.1  模块化带来的好处

【案例7-1】  投骰子游戏

【案例7-2】  使用随机函数让程序带有随机性

【案例7-3】  自定义函数生成一段随机数据

72  函数定义

【案例7-4】  格式打印

【案例7-5】  定义函数求N的N次方

【案例7-6】  main()后执行代码

7.3  函数声明

【案例7-7】  姓名测试

7.4  函数的调用机制

【案例7-8】  指令接收器(字符串形参)

【案例7-9】  求班级男女的人数

【案例7-10】 分水果(使函数一次性返回N个值)

【案例7-11】 补充代码并保证变量A的值等于10

【案例7-12】 使用数组名作函数参数

【案例7-13】 让函数一次返回多个值

7.5  递归函数

【案例7-14】 阶乘计算1到100的积

【案例7-15】 互动式程序的基本框架

【案例7-16】 编写一个进制数转换器

【案例7-17】 皇后位置放置(栈+回溯法)

【案例7-18】 数学训练营(巧算24点)

7.6  函数重载

【案例7-19】 更简便的命令解释器

7.7  本章练习

8  关于函数的高级专题

8.1  内存使用错误剖析

【案例8-1】  释放字符串常量内存错误案例

82  重申:函数参数传递和返回机制

【案例8-2】  宝宝改名(形参引用))

8.3  函数与指针

【案例8-3】  函数映射表

8.4  函数与数组

【案例8-4】  学生成绩统计

8.5  函数与结构体、共用体及类对象

【案例8-5】  设计一个数据查询系统

【案例8-6】  一个简单加密算法的实现

【案例8-7】  解密算法的实现

【案例8-8】  使用随机函数生成密钥

【案例8-9】  设计一个完整的加密解密系统

【案例8-10】 数据包简单加密(加密技术)

8.6  函数编写的建议

【案例8-11】 补充代码使输出结果成立

【案例8-12】 清空屏幕——清屏的实现

【案例8-13】 七彩文字——改文字色

【案例8-14】 设计一个黑客界面动画

【案例8-15】 文字闪动效果的实现

8.7  本章练习

第二篇  面向对象的C++程序设计

9  面向对象技术基础

9.1  面向对象基本概念

【案例9-1】  营业额

【案例9-2】  命令响应

【案例9-3】  动态口令(系统时间+口令表或算法)

9.2  C++类的定义

【案例9-4】  汽车行驶里程

【案例9-5】  产量统计

【案例9-6】  走出迷宫(类+算法)

9.3  C++类的实现

【案例9-7】  求圆的面积和周长

【案例9-8】  主动连接型木马框架

【案例9-9】  反弹式穿墙木马框架)

9.4  C++类的使用

【案例9-10】 实现类自动化管理内存

【案例9-11】 定义一个ping类

【案例9-12】 利用ICMP协议实现ping

【案例9-13】 相亲速配系统

【案例9-14】 注册帐号数据库

【案例9-15】 网吧管理系统

【案例9-16】 网络购物系统

9.5  对象的创建和撤销

【案例9-17】 利用多媒体接口函数取得音量值

【案例9-18】 利用多媒体接口函数设置音量值

9.6  复制构造函数

【案例9-19】 入学登记系统

9.7  特殊数据成员

【案例9-20】一个类的对象作为另一个类的成员

9.8  特殊函数成员

【案例9-21】类的静态成员

9.9  对象的组织

【案例9-22】 对象数组

9.10  为对象态分配内存

【案例9-23】 通讯录

9.11  本章练习

10  关于对象的高级专题

10.1  类的作用域

【案例10-1  类的作用域

10.2  类定义的作用域与可见域

【案例10-2  类定义的作用域   

10.3  对象生存期、作用域和可见域

【案例10-3  超出作用域错误案例

【案例10-4】  作用域的相互屏蔽例程

10.4  类的友元

【案例10-5】  乡村生产总值

【案例10-6】  回合制对战小游戏

【案例10-7】  十二星座运气测试

10.5  运算符重载

【案例10-8】  使用C++字符串类string打印字符串

10.6  类型转换

【案例10-9】  使用成员函数检测string字符串是否非空

10.7  重载函数选择规则

【案例10-10】  函数重载陷阱案例

10.8   实体的作用域和可见域

【案例10-11】作用域  

10.9  名称空间的作用域和可见域

【案例10-12】  

10.10  本章练习

11  继承

11.1  继承与派生概述

【案例11-1】  动物对象进化

11.2  派生类

【案例11-2】  错误的模糊引用

【案例11-3  MP3录音类

【案例11-4】  MP3录音类

11.3  多基派生

【案例11-5】  判断一个点是否在正方体内

11.4  虚基类

【案例11-6】  判断一个矩形是否成立

【案例11-7】  判断两个矩形是否存在重合

【案例11-8】  补充代码使正方体不重合且Z轴距离为10

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

【案例11-9】  卫星定位街道系统

【案例11-10】 传气球

11.6  分清继承还是组合

【案例11-11】继承和组合区别使用

11.7  基类与派生类对象间的相互转换

【案例11-12】基类与派生类之间对象指针转化

11.8  本章练习

12  多态

12.1  多态与虚函数

【案例12-1  月薪发放

【案例12-2】  学生的假期生活 

12.2  虚函数的访问

【案例12-3】  比谁跑得远

【案例12-4】  矩形范围

12.3  纯虚函数与抽象类

【案例12-5】  头文件重定义错误

【案例12-6】  走迷宫

12.4  虚函数引入的二义性

【案例12-7】  虚函数引入的二义性

12.5  重载、覆盖与隐藏

【案例12-8】  人体健康评估系统

12.6  本章练习

第三篇  泛型程序设计与模板库

13  模板

13.1  为什么定义模板

【案例13-1】  绕过形参限制

【案例13-2】  定义一个实现计算的静态模板

13.2  函数模板

【案例13-3】  求N*N的值

【案例13-4】  万能计算器

【案例13-5】  用户与管理员

【案例13-6】  模板函数的重载例程

【案例13-7】  输出内存区域的各类型数据(void*)

13.3  类模板与模板类

【案例13-8】  模拟栈空间

【案例13-9】  判断参数为字符串类型就输出字符串

【案例13-10】 模拟压栈退栈

【案例13-11】 双向链表历遍

【案例13-12】 井字游戏

【案例13-13】 贪食蛇

13.4  模板的嵌套

【案例13-14】 求AB对象成员的和

11.5  模板参数

【案例13-15】 变幻的对象——使用template定义一个类模板

13.6  隐式实例化和显式实例化

【案例13-16】 输出浮点型数据和整型数据

【案例13-17】 补充代码使输出结果成立

【案例13-18】 求AB对象的和(类参数)

【案例13-19】 显式调用析构函数案例

【案例13-20】 隐式转换错误案例

13.7  本章练习

第14  标准模板库

14.1  理解STL

【案例14-1】 使用STL库创建容器

【案例14-2】  裁员计划——获取、删除和清空容器

【案例14-3】  图书印刷——复制元素并自动输出

14.2  使用序列式容器

【案例14-4】  成绩转换为标准分

【案例14-5】  打印容器元素的值

【案例14-6】  一个简单的学生管理系统

【案例14-7】  一个简单的计算器

【案例14-8】  一个经典的压缩算法

【案例14-9】  自定义函数实现数据压缩

【案例14-10】 自定义函数实现数据解压

【案例14-11】 高效倍增算法

【案例14-12】 推箱子

14.3  使用关联式容器

【案例14-13】 队列镜像

【案例14-14】 反暴力破解

14.4  关联式容器的成员函数操作

【案例14-15】 在容器中部插入元素

14.5  迭代器

【案例14-16】 模拟文件资源管理系统

14.6  泛型算法

【案例14-17】 反向输出

14.7  适配器

【案例14-18】 获取列队头尾

【案例14-19】 利用容器适配器实现栈功能

14.8  本章练习

第四篇  输入输出处理

 

第15  输入输出与文件

15.1  输入输出概述     

【案例15-1  使用流类库输出一个文件

【案例15-2】  如何获得文件长度

【案例15-3】  使用system()函数使屏幕停止

15.2  高层I/O

【案例15-4】  读写二进制文件

【案例15-5】  读写记事本

【案例15-6】  搜索文本

【案例15-7】  猜灯谜

15.3  流类库

【案例15-8】  移动文件指针现实文件中部写入数据

15.4  输出类

【案例15-9】  输出高精度浮点数

【案例15-10】 设置输出域宽

13.5  输入类

【案例15-11】 使用get和getline函数读取C风格字符串

15.6  流状态

【案例15-12】 读取流状态

【案例15-13】 设置状态字

15.7  重载>><<

【案例15-14】 complex

15.8  文件操作

【案例15-15】 设计一个简单的学生数据库类

【案例15-16】 实现程序退出自动保存数据库内容到磁盘文件

【案例15-17】 实现程序启动时自动读取数据库

【案例15-18】 编写一个学生数据管理系统V1.0

【案例15-19】 编写一个学生数据管理系统V2.0

【案例15-20】 网络文件传输

【案例15-21】 断点续传

15.9  字符串流

【案例15-22】 输入输出流之字符串流

15.10 本章练习

第16  异常处理

16.1  编码时的防错     

【案例16-1】 判断语句经典错误

【案例16-2】  函数实现把0内存删除

【案例16-3】  传送的是地址还是值

【案例16-4】  cin输入列队错误案例

【案例16-5】  数组超界访问案例

【案例16-6】  数组错用sizeof案例

【案例16-7】  sizeof产生错误

【案例16-8】  一个还没进入main()函数就崩溃的程序

【案例16-9】  main()函数的参数传递

【案例16-10】 建立链表

【案例16-11】 编写一个堆内存管理类

16.2  异常机制

【案例16-12】 类型改名——使用typedef定义类型

【案例16-13】 错误检查——使用assert宏进行检测

【案例16-14】 使用exit()函数结束程序

【案例16-15】 使用abort()函数进行异常退出

【案例16-16】 自定义异常对象

【案例16-17】 使用set_terminate()函数设置terminate()函数指针

【案例16-18】 异常处理时的析构

【案例16-19】 内存整理算法

16.3  异常发生时的内存管理

【案例16-20】 错误地释放指针导致程序崩溃

16.4  auto_ptr

【案例16-21】 使用类自动管理指针

【案例16-22】 使用auto_ptr类智能指针管理堆内存

16.5  RTTI机制

【案例16-23 dynamic_cast使用

16.6  类型转换操作符

【案例16-24】 

16.7 本章练习

 

 

你可能感兴趣的:(C++程序设计案例实训教程 目录)