显示标签为“精品书籍”的博文。显示所有博文
显示标签为“精品书籍”的博文。显示所有博文

《Windows编程循序渐进》已经上市,敬请关注

Windows编程循序渐进 / 张静盛编著. —北京:机械工业出版社,2008.5
(原创精品系列)
ISBN 978-7-111-23862-1
机械工业出版社(北京市西城区百万庄大街22号 邮政编码 100037)
责任编辑:李东震
2008年5月第1版第1次印刷
186mm×240mm·24.75印张
标准书号:ISBN 978-7-111-23862-1
ISBN 978-7-89482-630-5(光盘)
凡购本书,如有倒页、脱页、缺页,由本社发行部调换
本社购书热线(010)68326294

[华章公司]《Windows编程循序渐进》宣传活动,暨第一届软件设计大赛

购买途径


中国互动出版网http://www.china-pub.com/39896
下面是互动网上的价格:
市场价 : ¥59.00
会员价 : ¥41.30(70折)
校园特惠价 : ¥41.30

机械工业出版社购书热线:(010)68326294


封面

名称:  zcover.jpg 查看次数: 4445 文件大小:  8.5 KBscreen.width*0.6) {this.width=screen.width*0.6;this.alt='此图已经缩小,点击察看原图。';}" onmouseover="this.style.cursor='pointer';" onclick="window.open('http://bbs.pediy.com/attachment.php?attachmentid=16310&d=1216733923');" border="0">


本书简介

本书用大量的实例演示使用Visual C++开发Windows应用程序的相关技术。 全书分为3篇19章,分别是软件设计基础篇、软 件设计综合应用篇、Windows系统程序设计篇。内容包括软件开发起步、对话框应用程序、基本控件、文档与视图、GDI绘图技术、键盘与鼠标消息、网络 通信基础、密码学算法、多媒体技术、数据库技术、综合实例开发、进程与线程、内存管理、进程间通信、线程同步、动态链接库、结构化异常处理、可执行文件格 式(PE)、模块注入与函数挂接技术。 本书适用于Windows程序设计的初学者,也可作为大中专院校相关专业教材。另外,本书还适合稍有基础的 Visual C++开发者阅读参考。
本书设计了大量的实例演示Windows应用程序开发过程中相关技术,分为3个部分:
(1)软件设计基础篇。
 第1章,软件开发起步:编写第一个软件,熟悉MFC应用程序框架。
 第2章,对话框应用程序:熟悉模态、非模态对话框,以及通常对话框的原理与使用方法。
 第3章,基本控件:介绍按钮、编辑框、列表框等基本控件的使用方法。
 第4章,文档与视图:介绍文档与视图的基本原理。
 第5章,GDI绘图技术:介绍GDI绘图技术的基本的GDI对象。
 第6章,键盘与鼠标消息:介绍键盘、鼠标消息的处理与模拟。
(2)软件设计综合应用篇。
 第 7章,网络通信基础:介绍网络模型、协议、以及套接字编程和LSP的实现。
 第 8章,密码学算法:介绍常见的密码学算法及其实现。
 第 9章,多媒体技术:介绍几种多媒体控件的使用方式和屏幕截图、录象的实现。
 第10章,数据库技术:介绍MFC ODBC和DAO基本使用方法。
 第11章,综合实例开发:实现多个具有趣味性的实例。
(3)Windows系统程序设计篇。
 第12章,进程与线程:介绍进程与线程的原理及其基本应用。
 第13章,内存管理:介绍虚拟内存与内存映射两种内存管理机制。
 第14章,进程间通信:介绍共享内存、管道等进程间通信方式的原理与实现方法。
 第15章,线程同步:介绍多种线程同步技术,包括使用内核对象实现线程同步。
 第16章,动态链接库:介绍DLL的基本原理,包括TLS机制。
 第17章,结构化异常处理:介绍结构化异常处理机制,及其在VC++环境下的特性。
 第18章,可执行文件格式(PE):介绍PE文件格式及其基本应用。
 第19章,模块注入与函数挂接技术:介绍模块注入及函数挂接技术及其防御。


本书特色

本书通过80多个程序实例,介绍了使用Visual C++ 2005开发Windows应用程序的方方面面的技术。全书分为基础篇、综合应用 篇和Windows系统程序设计篇,既包括对话框、控件、文档与视图等基本开发技能,也涉及到网络通信、密码学算法、多媒体技术等综合应用开发技术,还深 入到了进程与线程、内存管理、动态链接库等较高级的系统程序设计话题。
本书具有以下特色:
以作者的技术成长路线为基础,循序渐进地学习Windows系统程序设计和应用软件开发;
涵盖基本开发技能、综合应用开发技术和系统程序设计技术,全面而细致;
实例导向,目标驱动;使读者的阅读过程既轻松而愉快,又学有所获;
循序渐进,从理论到实践,从技术学习转换为产品开发;
专业论坛支持,看雪软件安全论坛(http://bbs.pediy.com)编程版块能够帮助你解决阅读中的疑问,更好地掌握本书中的内容。


关于写作本书

编写本书的主要目的是知识总结与经验分享。
对于我来说,知识总结在学习的过程中是必不可少的,就像操作系统需要“磁盘整理”一样。当很长一段时间不对系统进行“磁盘整理”操作,系统性能就 会下降。经常总结所学知识,从总体把握体系结构,让自己能够长期保持良好地学习状态。本书实例的一部分来自于学习过程,这里只是按照知识体系把这些实例串 联起来。
学习过程重要,知识的交流与分享也同样重要。我曾经在看雪软件安全论坛编程版块建立《Windows系统程序设计》专题,与大家分享学习心得,也有一部分朋友参与到这个专题。感觉收获比较大,但意犹未尽,于是就产生编写本书的想法。
现在计算机专业的绝大部分学生就业压力越来越大,归根到底就是不被社会所承认。有些人认为学校所传授的知识与实际应用不接轨,有些人认为许多非计 算机专业人员进入这个领域导致竞争激烈。而在我看来,作为计算机专业学生应该尽量寻找主观原因。对于计算机专业学生,在大学4年的自由时代,如何有效利用 计算机资源是问题的关键所在。摆在眼前的是两个选择:游戏与技术。每个人都能从不同游戏中获取乐趣,但对于技术呢?谁来展现技术的魅力?谁来引导学生对技 术的兴趣?这也是编写本书的一个重要原因,希望能够引导学生朋友对计算机技术的兴趣,能够在学习技术的过程中获得乐趣,能够从学校走出更多的计算机专业人 才。


信息反馈与交流

由 于水平有限与时间紧迫,书中难免出现差错和遗漏。如果有关于本书的任何问题,欢迎发送电子邮件到 zhangjingsheng_nbu@hotmail.com。如果希望交流本书内容,可以发送电子邮件,也可以到看雪软件安全论坛 (http://bbs.pediy.com)的编程版块进行交流。


致谢

感谢李纲老师,让我明白“学习贵在精而不在多”,在程序设计与算法领域打下坚实基础。
感谢徐海峡、郭忠翔,让我明白什么是“能够解决问题的人”,坚定地朝自己的方向前进。
感谢段钢(kanxue),感谢看雪软件安全论坛,论坛是我兴趣的源泉,成长的起点。
感谢213实验室的良师益友,一起学习一起娱乐一起成长,让我的大学生活丰富多彩。
感谢我的家人和朋友,你们的支持是对我最大的鼓励


目录

第一篇 软件设计基础篇
第1章 软件开发起步 2
1.1 建立MFC应用程序 2
1.2 分析框架结构 4
1.2.1 框架代码文件的结构 4
1.2.2 应用程序类 5
1.2.3 对话框类 6
1.2.4 添加消息响应 7
第2章 对话框应用程序 9
2.1 模态对话框 9
2.1.1 实例:使用MFC实现模态对话框 9
2.1.2 实例:使用Win32 API实现模态对话框 10
2.2 非模态对话框 12
2.2.1 实例:使用MFC实现非模态对话框 12
2.2.2 实例:使用Win32 API实现非模态对话框 13
2.3 属性对话框 14
2.3.1 实例:多页面切换程序 14
2.3.2 实例:向导对话框 16
2.4 对话框设计技巧 17
2.4.1 控件对齐与排列 17
2.4.2 设置控件逻辑顺序 18
2.5 通用对话框 19
2.5.1 实例:通用“打开”和“另存为”对话框 19
2.5.2 实例:通用“字体”对话框 22
2.5.3 实例:通用“颜色”对话框 23
第3章 基本控件 26
3.1 按钮控件 26
3.1.1 按钮CButton类 26
3.1.2 实例:按钮控件的使用方法 28
3.2 编辑框 30
3.2.1 编辑框CEdit类 30
3.2.2 实例:编辑框的使用方法 32
3.3 列表框 33
3.3.1 列表框CListBox类 33
3.3.2 实例:列表框的使用方法 35
3.4 组合框 36
3.4.1 组合框CComboxBox类 37
3.4.2 实例:组合框的使用方法 39
3.5 进度条 41
3.5.1 进度条CProgressCtrl类 41
3.5.2 实例:进度条的使用方法 42
3.6 列表控件 44
3.6.1 列表控件CListCtrl类 44
3.6.2 实例:列表控件的使用方法 45
第4章 文档与视图 47
4.1 文档—视图结构 47
4.1.1 单文档与多文档 47
4.1.2 文档与视图体系 48
4.2 实例:单文档应用程序与文档串行化 52
第5章 GDI绘图技术 57
5.1 图形设备接口GDI 57
5.1.1 设备上下文 57
5.1.2 GDI对象 58
5.1.3 GDI绘图 58
5.2 画笔 58
5.2.1 画笔CPen类 58
5.2.2 实例:使用GDI对象CPen绘图示例 59
5.3 画刷 60
5.3.1 画刷CBrush类 60
5.3.2 实例:使用GDI对象CBrush绘图示例 61
5.4 位图 63
5.4.1 位图CBitmap 63
5.4.2 实例:使用GDI对象CBitmap示例 64
第6章 键盘与鼠标消息 67
6.1 键盘消息 67
6.1.1 键盘消息的类型 67
6.1.2 实例:响应键盘消息示例 68
6.1.3 模拟键盘消息 70
6.1.4 实例:模拟键盘消息示例 71
6.2 鼠标消息 72
6.2.1 鼠标消息的类型 72
6.2.2 实例:处理鼠标消息 73
6.2.3 实例:模拟鼠标消息 74
第二篇 软件设计综合应用篇
第7章 网络通信基础 80
7.1 网络模型 80
7.1.1 OSI参考模型 80
7.1.2 TCP/IP参考模型 81
7.2 基础协议 82
7.2.1 IP协议 82
7.2.2 TCP协议 83
7.2.3 UDP协议 84
7.2.4 ICMP协议 85
7.3 套接字编程 85
7.3.1 函数介绍 85
7.3.2 实例:Ping程序 88
7.3.3 实例:网络嗅探器 92
7.4 服务器与客户端模型 96
7.4.1 实例:TCP服务端和客户端程序 96
7.4.2 实例:UDP服务器和客户端程序 100
7.5 实例:使用分层服务提供者LSP截取网络数据包 103
7.5.1 服务提供者接口(SPI) 103
7.5.2 设计实例 103
7.5.3 枚举协议目录 106
7.5.4 LSP的安装与卸载 108
7.5.5 分层服务提供者(LSP) 113
第8章 密码学算法 118
8.1 数据加密标准(DES) 118
8.1.1 算法描述 118
8.1.2 初始置换与逆初始置换 119
8.1.3 生成子密钥 120
8.1.4 f函数的执行流程 121
8.1.5 解密过程 122
8.1.6 实例:DES算法加密解密演示 123
8.2 国际数据加密算法(IDEA) 131
8.2.1 算法描述 131
8.2.2 生成子密钥 133
8.2.3 实例:IDEA算法加密解密演示 134
8.3 Blowfish算法 139
8.3.1 算法描述 139
8.3.2 生成子密钥和S盒 141
8.3.3 实例:Blowfish算法加密解密演示 141
8.4 公钥加密算法(RSA) 146
8.4.1 算法描述 146
8.4.2 实例:RSA加密解密演示软件 147
第9章 多媒体技术 151
9.1 多媒体控件 151
9.1.1 实例:使用Animation控件播放AVI文件 151
9.1.2 实例:使用Windows Media Player控件播放多媒体文件 152
9.1.3 实例:使用Real Player控件播放多媒体文件 153
9.2 屏幕截图 154
9.2.1 位图 154
9.2.2 实例:屏幕截图 155
9.3 屏幕录像 157
9.3.1 实现原理 157
9.3.2 实例:屏幕录像 158
第10章 数据库技术 161
10.1 设置ODBC数据源 161
10.1.1 ODBC数据源 161
10.1.2 使用ODBC管理器设置Access数据源 162
10.2 MFC ODBC数据库编程 163

10.2.1 MFC ODBC概述 163

10.2.2 实例:使用MFC ODBC访问数据库 164

10.3 MFC DAO数据库编程 169

10.3.1 MFC DAO概述 169

10.3.2 实例:使用MFC DAO访问

数据库 169

第11章 综合实例开发 174

11.1 实例:Huffman编码软件 174

11.1.1 Huffman算法原理 174

11.1.2 具体实现 175

11.2 实例:八数码游戏 178

11.2.1 八数码游戏算法介绍 178

11.2.2 具体实现 179

11.3 实例:游戏寻路算法A* 183

11.3.1 A*算法原理 183

11.3.2 二叉堆在A*中的应用 184

11.3.3 具体实现 186

11.4 实例:“连连看”游戏辅助工具 190

11.4.1 “连连看”算法原理 190

11.4.2 具体实现 191

11.5 实例:“对对碰”游戏辅助工具 196

11.5.1 “对对碰”算法原理 196

11.5.2 具体实现 197

11.6 实例:拼音输入法 199

11.6.1 设计实例 200

11.6.2 拼音字典存储结构—Trie树 200

11.6.3 单字联想 205

11.7 实例:Windows二级文件系统 209

11.7.1 设计实例 209

11.7.2 具体实现 211

11.8 实例:手柄测试器 214

11.8.1 DirectInput手柄输入 214

11.8.2 设计实例 216

第三篇 Windows系统程序设计篇

第12章 进程与线程 222

12.1 进程 222

12.1.1 原理介绍 223

12.1.2 创建进程 223

12.1.3 实例:创建进程 226

12.2 线程 227

12.2.1 原理介绍 227

12.2.2 创建线程 229

12.2.3 实例:创建线程 229

12.3 枚举进程/线程信息 231

12.3.1 实例:使用PSAPI示例 231

12.3.2 实例:使用ToolHelpAPI示例 233

12.3.3 实例:使用Native API示例 235

第13章 内存管理 239

13.1 虚拟内存 239

13.1.1 进程虚拟地址空间 239

13.1.2 实例:查看虚拟内存状态 240

13.1.3 实例:演示虚拟内存的“保留—提交”特性 243

13.1.4 实例:游戏内存修改器 245

13.2 内存映射文件 249

13.2.1 内存映射文件的原理 249

13.2.2 实例:文件分割器 250

第14章 进程间通信 254

14.1 消息传递机制 254

14.1.1 消息传递 254

14.1.2 实例:使用WM_COPYDATA消息传递数据 254

14.2 共享内存 256

14.2.1 共享内存的原理 256

14.2.2 实例:使用共享内存示例 257

14.3 管道和邮槽 259

14.3.1 管道和邮槽通信原理 259

14.3.2 实例:使用匿名管道重定向程序输出 261

14.3.3 实例:命名管道示例 263

14.3.4 实例:邮槽通信示例 266

14.4 剪贴板 267

14.4.1 剪贴板通信机制 267

14.4.2 实例:使用剪贴板实现进程间通信示例 269

第15章 线程同步 275

15.1 原子访问 275

15.1.1 多线程访问共享数据问题 275

15.1.2 互锁系列函数 276

15.2 关键代码段 277

15.2.1 基本原理 277

15.2.2 实例:多线程环境下的数据共享 278

15.3 内核对象与等待函数 280

15.3.1 内核对象 280

15.3.2 等待函数 281

15.4 事件内核对象 283

15.4.1 基本原理 283

15.4.2 实例:使用事件内核对象示例 284

15.5 等待定时器内核对象 285

15.5.1 基本原理 285

15.5.2 实例:使用等待定时器的APC机制 287

15.6 信标内核对象 288

15.6.1 基本原理 288

15.6.2 实例:使用信标内核对象示例 289

15.7 互斥内核对象 291

15.7.1 基本原理 292

15.7.2 实例:使用互斥内核对象示例 292

第16章 动态链接库 295

16.1 DLL基础 295

16.1.1 DLL的隐式链接 295

16.1.2 DLL的显示加载 296

16.2 编写动态链接库 297

16.2.1 入口函数DllMain 297

16.2.2 实例:编写DLL实现导出变量、函数、类 298

16.3 线程本地存储器(TLS) 301

16.3.1 静态TLS和动态TLS 301

16.3.2 实例:使用静态TLS示例 303

16.3.3 实例:使用动态TLS示例 304

第17章 结构化异常处理 306

17.1 SEH的概念、特性 306

17.2 SEH的基本使用方法 307

17.2.1 结束异常程序 307

17.2.2 异常处理程序 310

17.2.3 顶层异常处理 313

17.3 VC++编译器级SEH的具体实现 313

17.3.1 SEH相关数据结构的介绍 314

17.3.2 异常处理链结构图 315

17.3.3 实例:单嵌套异常块演示程序 316

17.3.4 实例:多嵌套异常块演示程序 318

17.3.5 VC++编译器级异常帧结构 320

17.3.6 VC中的顶层异常处理 320

17.3.7 VC搜索异常处理程序流程 322

第18章 可执行文件格式 324

18.1 PE文件格式 324

18.1.1 PE文件头 324

18.1.2 可选文件头 325

18.1.3 区块表 327

18.1.4 输入表 328

18.1.5 输出表 329

18.1.6 资源表 330

18.1.7 重定位表 332

18.1.8 绑定输入表 332

18.2 综合应用 333

18.2.1 实例: PE文件资源查看器 333

18.2.2 实例: 为应用程序添加Nag窗口 337

第19章 模块注入与函数挂接技术 341

19.1 模块注入 341

19.1.1 添加导入表项 342

19.1.2 远程线程技术 344

19.1.3 实例:使用远程线程实现模块注入 345

19.1.4 异步过程调用(APC) 346

19.1.5 实例:使用APC实现模块注入 347

19.2 挂接API 349

19.2.1 重定向API 350

19.2.2 实例:重定向API MessageBoxA示例 350

19.2.3 古老的API HOOK 353

19.2.4 实例:HOOK API示例 354

19.2.5 Detours Hook 356

19.2.6 实例:使用detour库实现挂接API示例 357

19.3 钩子 359

19.3.1 钩子的基本原理 359

19.3.2 钩子类型 360

19.3.3 实例:全局鼠标钩子示例 366

19.3.4 实例:全局键盘钩子示例 369

19.3.5 实例:使用局部CBT钩子示例 370

19.3.6 实例:使用低级键盘钩子示例 371

19.4 反注入技术 372

19.4.1 实例:使用调试钩子屏蔽全局钩子 372

19.4.2 实例:检测注入模块 374

19.4.3 实例:使用DLL_THREAD_ATTACH阻止远程线程 377

19.4.4 实例:使用挂钩LoadLibraryExW屏蔽全局钩子 379

附录 光盘源码实例 381

介绍一些经典的网站和书籍

因为要经典,不敢写得太多,欢迎大家继续补充。这里只是涉及编程的东东,如果想要关于破解方面的资料请到“工具下载”栏目的置顶帖。

ps.网上这些书的电子版大都是未经作者同意而发布的,我并不能保证给出的链接长期有效。我的看法是您可以先下载试看;),如果觉得物有所值,还是推荐去买一本纸质书,也是支持一下作者的辛勤劳动。

有用的网站:

MSDN Library

http://msdn.microsoft.com/library/

CSDN

http://www.csdn.net/

经典书籍:

=======================
WINDOWS编程类
=======================

Windows程序设计中文版(Programming Windows,Charles Petzold著)

http://www.a5d.com/SoftView/SoftView_673.asp

这个不用我多废话了,地球人都知道的经典,用C语言+WinSDK写成。

Windows核心编程(Programming Applications for Microsoft Windows, Fourth Edition, Jeffrey Richter著)

http://www.infoxa.com/asp/book/xxnr.asp?id=494

内容较深的一本书,同样经典,如果能通读一遍,可以说基本上就掌握了Windows的精髓。

Win32 ASM Tutorial Resource Kit

http://www.pediy.com/document/Win32ASMTRK.rar(解压密码:dREAMtHEATER)

dREAMtHEATER收集的WIN32ASM教程,内容很全,包括32位汇编的基础知识,Iczelion的经典教程中英文版,罗云彬的32位汇编教程,还有PE格式和VxD的一些内容。

Windows环境下32位汇编语言程序设计(罗云彬著)
http://www.infoxa.com/asp/book/xxnr.asp?id=2243

汇编语言版的Programmin Windows ,可以与上面Iczelion的教程相互参照着学习。

=======================
程序设计语言类
=======================


C语言程序设计(The C Programming Language (2nd Edition), Brian W.Kernighan & Dennis M.Ritchie著)

作者是C语言和UNIX系统的发明人,这一本书是如此经典,以至于两位作者名字的缩写 K&R 成了一个专有名词,以至于书里的"Hello,World"这个简单的句子被无数人用无数种程序语言写出来。很薄的一本书,却成了一个不朽的传奇。个人看法,学好C语言,这一本小书足矣。

C++语言程序设计(The C++ Programming Language (Special Editon),Bjarne Stroustrup著)

作者是C++语言的发明人,这本书之于C++就好比上本书之于C,不同的是这本书巨厚无比,毕竟C++复杂了太多太多。这本书介绍到了C++的方方面面,巨细无遗,毕竟是作者发明的么,不过我只看了几章就晕得受不了了。
btw:关于C++的好书还有很多,如<<>>, <<>>, <<>>、<<>>等等,因为我对C++不很感冒,这里不敢妄加评论,请大家多补充。
再btw:对Java, .Net, Python这些新东东(Java好像也不新了吧,看来是我老了)了解不是很多,也不敢乱写,同样请各位补充。

=======================
面用对象WINDOWS编程类
=======================

也不知道这么说合适不合适,总之就是像MFC,VCL之类的东东啦。这类图书大概是最多最杂的了,像什么XX从入门到精通啦,XX编程宝典啦, XX编程100例啦……鱼龙混杂,泥沙俱下,也说不出哪个是经典。这里只选出几本有一定深度的,大家基本公认的好书。

深入浅出MFC(第二版)(侯捷著)

侯捷网站:http://jjhou.csdn.net/
关 于侯先生写的和译的书,赞的人很多,骂的人也有,我是很推荐这本书的,虽然我不喜欢MFC,只硬着头皮看了前几章。感觉如果能通读下来,可以试着自己架 一个类库了,呵呵。需要注意的是,读这本书先要有一定的SDK编程的基础,这本书不是教你如何用VC写程序的,好像有许多人不明白这一点,所以来骂侯先 生,如果你只想快点用VC写个程序出来,建议去看看《21天VC++无师自通》之类的书。
btw:侯先生的网站上有很多有趣的东东,顺便推荐一下。

Delphi源代码分析(周爱民著)

我只在很早之前玩过Delphi,水平就是只知道Form上放几个Button,Edit,双击两下就开始写代码,因为以前学过Pascal,看着语法很熟悉,玩得不亦乐乎,什么也不管,N久以后才知道有Object Pascal这回事,汗……因为N多大牛推荐这本书,所以我也推荐一下,虽然里面东西基本都不懂。同样,这本书也不是教你如何画个窗口摆个控件的,那样的书遍地都是……

=======================
数据结构与算法类
=======================

算法、数据结构,这是计算机程序的灵魂所在。下面介绍的书可以在http://lib.verycd.com/2004/12/16/0000031024.html找到,而且那里有更详细的评论,强烈推荐!

Introduction to Algorightms (算法导论,Thomas.H.Cormen等著)

此书简称CLRS(四位作者名字的缩写),被人们称做“计算机算法的圣经”绝不为过,是ACM竞赛的必读书,影印版由高等教育出版社出版,共1180页,厚度约五公分虽然书很厚而且是英文,但是由于大师深入浅出的讲解,反而很好读懂,有时候我学一个算法,看相关中文书看得一头雾水,翻翻这本书却能豁然开朗。

The Art of Computer Programming vol1,2,3(计算机程序设计艺术I-III卷,Donald.E.Knuth著)

简 称TAOCP,经典中的经典,名气可能比上一本书还大,此系列书原计划出七卷,目前为止只出版了三卷,已经被评为20世纪最重要的20部著作之一。因为 里面用一种奇怪的程序语言写成,而且只出了三卷,内容没有CLRS全面,这套我没有买,只在图书馆里翻翻(有中译本),但绝对是值得一看的好书。

Concrete Mathematics A Foundation for Computer Science (具体数学,Donald.E.Knuth & Ronald L.Graham著)

同样是ACM竞赛必读书之一,几乎包含了所有计算机科学里涉及到的数学问题,里面有众多的经典问题与经典解法,对开拓人的数学思路有极大的帮助。看这书给我的感觉是,如果你能把每章后面所有的习题都解出来,估计离图灵奖也不远了

=======================
关于编程竞赛
=======================

下 面是几个比较大的在线提交系统(Online Judge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有Pascal/C /C++/Java)写好源代码提交即可,会实时返回信息告诉你是否正确。采用黑箱测试,系统里有一套标准的输入输出数据(对外保密,而且通常数据很多很 怪),你的程序的输出和标准输出完全符合即可。常见的返回信息有AC(Accepted,通过)WA(Wrong Answer,输出有错 误)TLE(Time Limit Exceeded,超时)MLE(Memory Limit Exceeded,内存溢 出)RE(Runtime Error,发生实时错误)等,只有AC了才算做对一题。这里只是一个简要介绍,请大家在做题时先看看各网站上的 FAQ,Enjoy it~~~

浙江大学 Online Judge(ZOJ)http://acm.zju.edu.cn

国内最早也是最有名气的OJ,有很多高手在上面做题。特点是数据比较刁钻,经常会有你想不到的边界数据,很能考验思维的全面性,现在我主要在这个OJ上做题

北京大学 Online Judge(POJ)http://acm.pku.edu.cn/JudgeOnline/


建立较晚,但题目加得很快,现在题数和ZOJ不相上下,特点是举行在线比赛比较多,数据比ZOJ上的要弱,有时候同样的题同样的程序,在ZOJ上WA,在POJ上就能AC

同济大学 Online Judge http://acm.tongji.edu.cn/index.php

这个OJ题数上不能与上两个相比,推荐这个OJ的原因是它是中文的,这对很多对英文不太感冒的兄弟是个好消息吧。它也因此吸引了众多高中的OIer,毕竟他们的英文还差一些呵呵,上面的题目也更偏向高中的信息学竞赛一些。

西班牙Valladolid大学 Online Judge(UVA)http://online-judge.uva.es/problemset/

世界上最大最有名的OJ,题目巨多而且巨杂,数据也很刁钻,全世界的顶尖高手都在上面。据说如果你能在UVA上AC一千道题以上,就尽管向IBM、微软什么的发简历吧,绝对不会让你失望的。

俄罗斯Ural立大学 Online Judge(URAL)http://acm.timus.ru/

也是一个老牌的OJ,题目不多,但题题经典,我在高中的时候就在这上面做题的。

UsacoGate Online Judge(USACO)http://ace.delos.com/usacogate

全 美计算机奥林匹克竞赛(USACO)的训练网站,特点是做完一关才能继续往下做,与前面的OJ不同的是测试数据可以看到,并且做对后可以看标准解答,所 以如果大家刚开始的时候在上面那些OJ上总WA却找不到原因的话,可以试着来这里做做,看看测试数据一般是从什么地方阴你的。