胡凡
本书在第2章对C语言的语法进行了详细的入门讲解,并在其中融入了部分C+的特性。
第3-5章是 入门部分。
第3章 初步训练读者最基本的编写代码能力;
第4章对 常用介绍,内容重要;
第5章是 数学问题,5.7节和5.8节的后半部分内容相对没有那么容易,读者可以选择性阅读。
第6章 C+标准模板库(STL)中的常用容器和algorithm头文件下的常用函数,通过学习本章,读者可以节省许多写代码的时间,把注意力更多地放在解决问题上。
第7~12章是进阶部分。
第7章介绍了 栈、队列和链表,
第8章介绍了 深度优先搜索和广度优先搜索,它们是树和图算法学习的基础
第9章和第10章分别讲解了 树和图的相关算法,它们是数据结构中非常重要的内容,在很多考试中也经常会出现,需要读者特别关注;
第11章介绍了动态规划算法的几个经典模型,并进行了相应的总结;
第12章对字符串hash和KMP算法进行了探讨。
第13章是在前面章节的基础上额外增加的内容,需要读者花一些时间来掌握。
对于PAT乙级考试,前7章内容已经基本够用:对于PAT甲级考试,本书的太部分内容都要堂握(冷门考点会在“本章二维码”中给出);对于CCF的CSP认证,本书能覆盖竞赛内容以外的考点(最后一题偶尔会涉及ACM-ICPC的内容,超出了本书范围);对于考研初试数据结构科目,本书能帮助读者更好地理解各种数据结构与算法。另外,本书还有一本配套习题集——《算法笔记上机训练实战指南》,书中给出了PAT乙级前50题、甲级前107题的详细题解。若读者想要对知识点的熟练度有进一步的提升,推荐同时使用本书的配套习题集(最新的考题会在本书的二维码中添加更新)。习题集的题目顺序是按本书的章节顺序编排的,并配有十分详细的题解,以便读者更有效地进行针对性训练。推荐使用“阅读一节本书的内容,然后做一节习题集对应小节的题目”的训练方式。
1.3 在线评测系统 OJ:Online Judge(在线评测系统)
软件推荐:Dev-C++ https://sourceforge.net/projects/orwelldevcpp/
本书的例题与练习题来自PAT,codeup。
(1)PAT PAT的全称为Programming Ability Test,是考察计算机程序设计能力的一个考试,目前分为乙级(Basic)、甲级(Advanced)和顶级(Top)三个难度层次,其中顶级将涉及大量ACM-ICPC竞赛的考点,报考的人数也相对较少。本书能够覆盖乙级和甲级的考试知识点,并且书中有很多例题都来自PAT甲、乙级的真题。
本书中来自乙级的题目将以B开头,例如B1003表示乙级的题号为1003的题目。PAT乙级真题题库:http://www.patest.cn/contests/pat-b-practise PAT甲级真题地址:http://www.patest.cn/contests/pat-a-practise 对于来自PAT甲、乙级的题目,只需要在网站上面注册一个账号即可提交,例如对B1001来说,在阅读完题目并写出相应的代码后,只需要单击最下方的“提交代码”,接着选择代码对应的语言(例如C或者C++代码的提交都可以选择“C++(g++4.7.2)”这一项),然后把代码粘贴在编辑框内,单击“提交代码”即可,稍等片刻刷新页面即可得到程序评测的结果。
注意:PAT的评测方式为“单点测试”,即代码只需要能够处理一组数据的输入即可,后台会多次运行代码来测试不同的数据,然后对每组数据都返回相应的结果。“单点测试”的具体写法见
(2)codeup codeup是一个有着很多题目的题库,当然它也是一个在线评测系统
对codeup的题目而言,评测方式为“多点测试”(除了第2章的C语言练习题外),也就是说,后台只会运行代码一次来测试不同的数据,只有当所有数据都输出正确的结果时才会让程序通过,只要有一组数据错误,就会返回对应的错误类型。“多点测试”的具体写法见2.10.2。
除了PAT和codeup之外,还有很多优秀的在线评测系统,但是大多数都是侧重于竞赛的,因此如果不是算法竞赛的话,一般不需要去它们上面做题。下面是几个较知名OJ的地址:
POJ : http://poj.org/
HDOJ: http://acm.hdu.edu.cn/
ZOJ: http://acm.zju.edu.cn/
CodeForces:http://codeforces.com/
ACdream: http://acdream.info/
第2章
2.1.1
1.速度:cin和cout可以不指定输入输出格式比较方便,但是cin和cout 消耗的时间比scanf和printf多得多。
2.保存:.cpp文件(C语言的文件扩展名为c,C++的文件扩展名.cpp)。
3. 程序:头文件和主函数。
1.头文件。#include
2.主函数。 主函数就是一个程序的入口位置。
4. 读入和写出。 scanf("%d%d",&a,&b); printf("%d",a+b)
scanf("%d%d",&a,&b); scanf读入效据,语句以%d的格式输入a和b,%d是int 型的输入输出示识。
printf("%d",a+b) printf用来输出数据,这条语句计算a+b并以%d格式输出。
2.1.2 变量类型
(1)int 整型 %d
(2)double型 %f
(3)字符型 %c
(4)字符串常量:%s
2.1.3 强制类型转换
2.1.4 符号常量和const常量(两种方式) #define pi =3.14
--------------------------------第二种方式---求周长---------------------
2.1.5 运算符
(1) 算术运算符 (+ - * / (取整) %(取余) ++ --(自增,自减))
自增运算符:i++或++i。区别在于i++是先使用i再将i加1,而++i则是先将i加1再使用i。
(2)关系运算符
(3)逻辑运算符
(4)条件运算符 三目运算符: A ? B:C 如 a > b ? 7 :11
(5)位运算
2.2 顺序结构
2.2.1 赋值表达式
2.2.2 scanf、printf ===>(1.除了字符串或char数组整个输入的情况不加& 2.scanf的%c格式可以读取空格跟换行)
%md 右对齐输出,不足的位置用空格代替 如printf("%5d\n",a); ( 123)
%0md 右对齐输出,不足的位置用0代替 如printf("%05d\n",a);(00123)
%.mf 保留多少位小数 printf('%.4f\n',d1) (12.3456)
2.2.3 getchar() putchar() 输入输出单个字符
2.2.4 注释 /**/ 多行; // 单行
2.2.5 typedef 能够给复杂的数据类型起一个别名
2.2.6 常用math函数
(1)fabs(double x)取绝对值
(2)floor(double x)和ceil(double x)向上下取整
(3)pow(double x,double p) 指数函数
(4) sqrt(double x) 算术平凡根
(5)log(double x) 以自然为底的对数
(7)asin(double x)、acos(double x)atan(double x) 反正弦值,反余弦值,反正切值
(8)round(double x) 四舍五入