NOIP复习计划资料(C++版.).doc

上传人:一*** 文档编号:809344 上传时间:2019-07-16 格式:DOC 页数:221 大小:1.53MB
返回 下载 相关 举报
NOIP复习计划资料(C++版.).doc_第1页
第1页 / 共221页
NOIP复习计划资料(C++版.).doc_第2页
第2页 / 共221页
点击查看更多>>
资源描述

《NOIP复习计划资料(C++版.).doc》由会员分享,可在线阅读,更多相关《NOIP复习计划资料(C++版.).doc(221页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、(C+版)NOIP 复习资料主 编葫芦岛市一高中 李思洋完成日期2012 年 8 月 27 日前 言有一天,我整理了 NOIP 的笔记,并收集了一些经典算法。不过我感觉到笔记比较凌乱,并且有很多需要 修改和补充的内容,于是我又搜集一些资料,包括一些经典习题,在几个月的时间内编写出了NOIP 复习资 料。 由于急于在假期之前打印出来并分发给同校同学(我们学校既没有竞赛班,又没有懂竞赛的老师。我们大 家都是自学党),NOIP 复习资料有很多的错误,还有一些想收录而未收录的内容。 在“减负”的背景下,暑期放了四十多天的假。于是我又有机会认真地修订NOIP 复习资料。 我编写资料的目的有两个:总结我学

2、过(包括没学会)的算法、数据结构等知识;与同学共享 NOIP 知识, 同时使我和大家的 RP+。 大家要清醒地认识到,NOIP 复习资料页数多,是因为程序代码占了很大篇幅。这里的内容只是信息 学的皮毛。对于我们来说,未来学习的路还很漫长。基本假设基本假设 作为自学党,大家应该具有以下知识和能力: 能够熟练地运用 C+语言编写程序(或熟练地把 C+语言“翻译”成 Pascal 语言); 能够阅读代码,理解代码含义,并尝试运用; 对各种算法和数据结构有一定了解,熟悉相关的概念; 学习了高中数学的算法、数列、计数原理,对初等数论有一些了解; 有较强的自学能力。代码约定代码约定 N、M、MAX、INF

3、 是事先定义好的常数(不会在代码中再次定义,除非代码是完整的程序)。N、M、MAX 针对数据规模而言,比实际最大数据规模大;INF 针对取值而言,是一个非常大,但又与 int 的最大值有一定 差距的数,如 100000000。 对于不同程序,数组下标的下限也是不同的,有的程序是 0,有的程序是 1。阅读程序时要注意。阅读顺序和方法阅读顺序和方法 没听说过 NOIP,或对 NOIP 不甚了解的同学,应该先阅读附录 E,以加强对竞赛的了解。 如果不能顺利通过初赛,你就应该先补习初赛知识。这本NOIP 复习资料总结的是复赛知识。如果没有学过 C+语言,应该先选择一本 C+语言教材。一般情况下,看到“

4、面向对象编程”一章的前一 页就足够了(NOIP 不用“面向对象编程”,更不用摆弄窗口对话框)。 附录 G 介绍了一些书籍和网站。你应该选择一本书,认真地学习。再选择一个网站,作为练习的题库。第一单元对竞赛中常用的操作和简单的算法分析进行了总结,算作对 C+语言的巩固。同时,阅读这一单 元之后,你应该选择一个合适的 C+代码编辑器。第二到第六单元介绍了竞赛常用的算法。阅读每一章时,应该先阅读“小结”名曰“小结”,实际上 是“导读”。 这五个单元除了经典习题,还有某些思想和算法的具体实现方法。这些信息可能在明处,也可能在暗处, 阅读时要注意挖掘和体会。如果有时间,应该在不看解析和代码的前提下独立完

5、成这些题。 第七单元是第六单元的一个部分,由于它的内容来自背包九讲,所以单独放在一个单元。从第八单元开始,到第十三单元,基本上就没有习题了。换句话说,该“背课文”了。 第八单元介绍了常用的排序算法。你可以有选择地学习,但一定要掌握“STL 算法”和“快速排序”。 第九单元介绍了基本数据结构,你一定要掌握第九单元前五小节的内容(本单元也有应该优先阅读的“小 结”)。有余力的话,第六小节的并查集也应该掌握。第十单元介绍了与查找、检索有关的数据结构和算法。你也可以有选择地学习。 第十一单元与数学有关。数学对于信息学来说具有举足轻重的地位。标有“!”的应该背下来,至于其他 内容,如果出题,你应该能把它

6、解决。 第十二单元仍与数学有关。 第十三单元是图论。学习时要先阅读“小结”,把概念弄清楚。之后要掌握图的实现方法。接下来要掌握 一些经典图论算法:Kruskal 算法、Dijkstra 算法、SPFA、Floyd 算法、拓扑排序。 附录 F 总结了 2004 年以来 NOIP 考察的知识点,可以作为选择性学习的参考。在学习算法和数据结构的同时,应该阅读和学习附录 A。 如果你还有余力,你应该学习第十四单元。第十四单元的内容不是必须要掌握的,但是一旦学会,可以发 挥 C+语言的优势,降低编程复杂度。 临近竞赛时,应该阅读附录 B 和附录 C,以增加经验,减少失误。面临的问题面临的问题 1.这是复

7、赛复习资料需要有人能用心总结、整理初赛的知识,就像这份资料一样。 2.潜在的问题还是相当多的,只是时间不够长,问题尚未暴露。 3.部分代码缺少解说,或解说混乱。 4.个人语文水平较差,资料也是如此。 5.没有对应的 Pascal 语言版本。 如果有人能为 P 党写一个 Pascal 版的 STL,他的 RP 一定会爆增!6.希望有人能用整理资料,并以自由文档形式发布。LAT EX最后,欢迎大家以交流、分享和提高为目的修改、复制、分发本最后,欢迎大家以交流、分享和提高为目的修改、复制、分发本资料资料,同时欢迎大家将,同时欢迎大家将资料资料翻译翻译 成成 Pascal 语言版供更多语言版供更多 O

8、Ier 阅读!阅读! 谢谢大家的支持!谢谢大家的支持! 葫芦岛市一高中 李思洋 2012 年 8 月 27 日目 录标题上的符号标题上的符号: 1.!:表示读者应该熟练掌握这些内容,并且在竞赛时能很快地写出来。换句话说就是应该背下来。 2.*:表示内容在 NOIP 中很少涉及,或者不完全适合 NOIP 的难度。 3.#:表示代码存在未更正的错误,或算法本身存在缺陷。前 言 .1目 录 .I第一单元 C+语言基础 .11.1 程序结构.1 1.2 数据类型.4 1.3 运算符 .6 1.4 函数 .8 1.5 输入和输出! .9 1.6 其他常用操作! .10 1.7 字符串操作! .13 1.

9、8 文件操作!.13 1.9 简单的算法分析和优化.14 1.10 代码编辑器 .16第二单元 基础算法 .172.1 经典枚举问题 .17 2.2 火柴棒等式 .18 2.3 梵塔问题.19 2.4 斐波那契数列 .19 2.5 常见的递推关系!.20 2.6 选择客栈.22 2.7 2k进制数 .23 2.8 Healthy Holsteins .24 2.9 小结 .25第三单元 搜索.273.1 N 皇后问题 .27 3.2 走迷宫 .29 3.3 8 数码问题 .31 3.4 埃及分数.34 3.5 Mayan 游戏 .36 3.6 预处理和优化 .40 3.7 代码模板.41 3.

10、8 搜索题的一些调试技巧.43 3.9 小结 .44第四单元 贪心算法 .464.1 装载问题.46 4.2 区间问题.46 4.3 删数问题.47 4.4 工序问题.47 4.5 种树问题.47 4.6 马的哈密尔顿链.47 4.7 三值的排序 .49 4.8 田忌赛马.50 4.9 小结 .50第五单元 分治算法 .515.1 一元三次方程求解 .51 5.2 快速幂 .51 5.3 排序 .51 5.4 最长非降子序列.53 5.5 循环赛日程表问题 .53 5.6 棋盘覆盖.54 5.7 删除多余括号 .55 5.8 聪明的质监员 .56 5.9 模板 .58 5.10 小结 .59第

11、六单元 动态规划 .606.1 导例:数字三角形 .60 6.2 区间问题:石子合并 .63 6.3 坐标问题.65 6.4 背包问题.67 6.5 编号问题.67 6.6 递归结构问题 .68 6.7 DAG 上的最短路径.71 6.8 树形动态规划* .72 6.9 状态压缩类问题:过河.74 6.10 Bitonic 旅行 .76 6.11 小结 .77第七单元 背包专题 .787.1 部分背包问题 .78 7.2 0/1 背包问题! .78 7.3 完全背包问题 .79 7.4 多重背包问题 .79 7.5 二维费用的背包问题 .80 7.6 分组的背包问题.81 7.7 有依赖的背包

12、问题 .81 7.8 泛化物品.81 7.9 混合背包问题 .82 7.10 特殊要求.82 7.11 背包问题的搜索解法 .83 7.12 子集和问题 .84第八单元 排序算法 .858.1 常用排序算法 .85 8.2 简单排序算法 .87 8.3 线性时间排序 .88 8.4 使用二叉树的排序算法*.89 8.5 小结 .90第九单元 基本数据结构 .919.1 线性表(顺序结构) .91 9.2 线性表(链式结构) .91 9.3 栈.93 9.4 队列 .94 9.5 二叉树 .95 9.6 并查集! .99 9.7 小结 .102第十单元 查找与检索.10410.1 顺序查找.10

13、4 10.2 二分查找!.104 10.3 查找第 k 小元素! .105 10.4 二叉排序树 .106 10.5 堆和优先队列* .108 10.6 哈夫曼(Huffman)树 .110 10.7 哈希(Hash)表 .111第十一单元 数学基础.11611.1 组合数学.116 11.2 组合数的计算! .117 11.3 排列和组合的产生(无重集元素)! 117 11.4 排列和组合的产生(有重集元素) .120 11.5 秦九韶算法 .122 11.6 进制转换(正整数) .123 11.7 高精度算法(压位存储)! .123 11.8 快速幂! .128 11.9 表达式求值 .1

14、29 11.10 解线性方程组* .133第十二单元 数论算法.13512.1 同余的性质! .135 12.2 最大公约数、最小公倍数! .135 12.3 解不定方程 axbyc!* .135 12.4 同余问题*.136 12.5 素数和素数表 .136 12.6 分解质因数 .137第十三单元 图与图论算法 .13913.1 图的实现.139 13.2 图的遍历.141 13.3 连通性问题 .142 13.4 欧拉回路 邻接矩阵 .146 13.5 最小生成树(MST).147 13.6 单源最短路问题(SSSP 问题) .148 13.7 每两点间最短路问题(APSP 问题)! .

15、152 13.8 拓扑排序.152 13.9 关键路径.155 13.10 二分图初步 .157 13.11 小结 .160第十四单元 STL 简介.16414.1 STL 概述 .164 14.2 常用容器.164 14.3 容器适配器 .170 14.4 常用算法.171 14.5 迭代器 .17514.6 示例:合并果子.175附录 A 思想和技巧.177A.1 时间/空间权衡 .177 A.2 试验、猜想及归纳 .177 A.3 模型化 .177 A.4 随机化* .178 A.5 动态化静态 .178 A.6 前序和! .179 A.7 状态压缩*.180 A.8 抽样测试法* .1

16、82 A.9 离散化* .183 A.10 Flood Fill* .184附录 B 调试.185B.1 常见错误类型 .185 B.2 调试过程.185 B.3 调试功能.185 B.4 符号 DEBUG 的应用 .186 B.5 代码审查表 .186 B.6 故障检查表 .187 B.7 命令行和批处理*.188附录 C 竞赛经验和教训 .192C.1 赛前两星期 .192 C.2 赛前 30 分钟.192 C.3 解题表 .193 C.4 测试数据.195 C.5 交卷前 5 分钟 .196 C.6 避免偶然错误 .196 C.7 骗分 .197附录 D 学习建议 .198D.1 学习方

17、法.198 D.2 学习能力.198 D.3 关于清北学堂 .198附录 E 竞赛简介 .199E.1 从 NOIP 到 IOI.199 E.2 NOIP 简介 .199 E.3 常用语 .201 E.4 第一次参加复赛 .202附录 F NOIP 复赛知识点分布 .204附录 G 资料推荐 .205G.1 书籍 .205 G.2 网站 .205参考文献.206计算机专业是朝阳还是夕阳?.207杜子德在 CCF NOI2012 开幕式上的讲话 209多数奥赛金牌得主为何难成大器 .210第单元 C+语言基础1.1 程序结构(1) 程序框架 注释:注释有两种,一种是“/”,另一种是“/* */”

18、。“/”必须单独放置一行,或代码所在行 的后面;而“/*”、“*/”成对存在,可以插入到代码的任意位置。 引用头文件:在代码开头写“#include ”。如果想引用自己的头文件,需要把尖括号(表 示只从系统目录搜索头文件)换成双引号(表示先从 cpp 所在文件夹搜索,然后再到系统文件夹搜索)。 命名空间:很多 C+的东西都要引用 std 命名空间,所以代码中会有“using namespace std;”。 main():所有程序都要从 main()开始。 在所有的算法竞赛中,在所有的算法竞赛中,main()的返回值必须是的返回值必须是 0,否则视为程序异常结束,得分为 0 分。 语句和语句块

19、: 1.语句:一般情况下,一条语句要用一个分号“;”结束。为了美观和可读性,可以把一条语句扩展成 几行,也可以把多个语句写到同一行上。 2.语句块:用“”和“”包围的代码是语句块。无论里面有多少代码,在原则上,语句块所在的整体 都视为一条语句。(2) 选择结构 1.if 语句:if 表示判断。如果条件为真,就执行接在 if 后的语句(语句块),否则执行 else 后的语句 (语句块)。如果没有 else,就直接跳过。if 有以下几种格式: if (条件)/ 如果条件成立,就执行if后面的语句或语句块。 语句或语句块if (条件)/ 如果条件成立,就执行if后面的A,否则执行B。 语句或语句块A

20、 else语句或语句块Bif (条件1)/ 实际上,这是if语句内的if语句,即if的嵌套。所以else和if中间要有空格。 语句或语句块A else if (条件2) 语句或语句块B else语句或语句块N 2.switch 语句:switch 表示选择。它根据条件的不同取值来执行不同的语句。格式如下: switch (表达式) case 值1: 代码段A break;case 值2: 代码段B break; default:代码段N break; ;如果表达式的值是值 1,就执行代码段 A;如果表达式的值是值 2,就执行代码段 B否则执行代码段 N。 注意: default 一部分可以省略

21、。 如果不使用 break,那么紧随其后的 case 部分代码也会被执行,直到遇到 break 或 switch 语句 结束为止! switch 结尾要有一个分号。 3.if、switch 都可以嵌套使用。【问题描述】输入一个日期,判断它所在年份是否为闰年,并输出所在月份的天数。闰年的判断方法:四年一 闰,百年不闰,四百年又闰。 int year,month,day; bool b=false; cinyearmonthday;/ 判断是否为闰年 if (n%400=0) b=true; else if (n%100!=0 if (b)cout”,还是“=”。 逆序循环时,不要把自减“-”写成

22、自增“+”!【问题描述】输入 n,输出 n!(n!1234n)。结果保证小于 long long 的范围。当输入值 为负数时结束程序。 int n; long long r=1; cinn; while (n-1) r=1; for (int i=1; in; (4) goto 语句 goto 语句用于无条件跳转。要想跳转,首先要定义标签(在代码开头的一段标识符,后面紧跟冒号), 然后才能 goto 那个标签。 很多教程不提倡使用无条件跳转,因为它破坏了程序结构,还容易给代码阅读者带来麻烦。不过,这不代 表 goto 没有使用价值。goto 的一个用途是跳出多层循环: for (int i=0

23、; i应该改成。 C 程序运行速度稍优于 C+。不过也没快多少。 总之,C 能做的一切事情,C+也能做;C+能做的一切事情,C 不一定能做。1.2 数据类型(1) 基本数据类型名称占用空间别名数据范围 int4signed, signed int, long, long int2,147,483,6482,147,483,647unsigned int14unsigned, unsigned long,unsigned long int04,294,967,295char1char128127 unsigned char1unsigned char0255 short22short int,

24、signed short int32,76832,767unsigned short2unsigned short int065,535 long long38signed long long9,223,372,036,854,775,808 9,223,372,036,854,775,8074unsigned long long8018,446,744,073,709,551,615bool1true 或 false char1128127 signed char1128127 unsigned char10255 float43.4E +/- 38 (7 位有效数字) double8lon

25、g double1.7E +/- 308 (15 位有效数字)1 一般都使用有符号整数,除非范围不够大,或者你确定你的减法运算不会出现“小数减大数”。2 一般来说,使用 int、long long 更保险一些,除非内存不够用。3 不要使用不要使用“_int64”!它是 Visual C+特有的关键字。 4 假如 a 是 long long 类型,把超过 231的值赋给它时要使用字面值 LL(ULL):a=123456789012345LL。(2) 变量与常量 1.定义变量:“变量类型 标识符”,如“int i;”定义了一个名字为 i 的整型变量。 注意,此时注意,此时 i 并未初始化,所以并未

26、初始化,所以 i 的值是不确定的的值是不确定的。 2.定义常量:“const 变量类型 标识符=初始值”,如:const int N=90; 3.合法的标识符: 标识符不能和关键字(在 IDE 中会变色的词语)相同。 标识符只能包括字母、数字和下划线“_”,并且开头只能是字母或下划线。 标识符必须先定义后使用。 在同一作用域内,标识符不能重复定义(即使在不同作用域内也不应重复,否则容易产生歧义)。 C+区分大小写。所以 A 和 a 是两个不同的标识符。(3) 数组 1.定义一个一维数组:int a10; 这个数组一共 10 个元素,下标分别为 09。访问某个元素时,直接用 a 加方括号,如 a

27、5。 2.定义一个二维数组:int b53; 这个数组一共 5315 个元素,分别是 b00、b01、b02、b10b42。 访问某个元素时要用两个方括号,如 b21。 多维数组的定义和使用方法与此类似。 3.数组名和元素的寻址:以上面的 a、b 为例 数组名是一个指针,指向整个数组第一个元素所在的地址。如 a 就是 定义多个指针时,每个字母的前面都要有“*”。 注意,如果注意,如果 p 没有被初始化,它就会指向一个未知的内存空间,而错误地操作内存会导致程序崩溃!没有被初始化,它就会指向一个未知的内存空间,而错误地操作内存会导致程序崩溃! 4.指针使用实例: int a = 0, b = 1;

28、 int c = 1,2,3,4,5,6,7,8,9,10;int *p;/ 定义一个指针 p=/ 让p指向a (*p)=3;/ 相当于a=3(*p)=b;/ 相当于a=b,此时a等于1 / p=b;/ 非法操作,左边是int *,右边是int,类型不匹配。 p=/ 让p指向b,从此p和a没关系了 p=c+6;/ 让p指向c6,p和b又没关系了 cout”):p.value、(j = j + (+i);/ i 先自增,变成 1,然后再和 j 相加。执行之后 i=1,j=9。 k = k + (i+);/ i 先和 k 相加,使 k=6。然后 i 再自增。执行之后 i=2,k=6。 前缀运算符返

29、回引用类型,后缀运算符返回数值类型。 为了避免错误,不要让+、-和其他能够改变变量的操作在同一行出现! 7.赋值运算符: 在 C+中赋值是一种运算符。所以你会看到 i=j=0、dx=y、return c=i+j 之类的代码。 +=、-=、*=、可以简化书写。例如 a*=2+3 相当于 a=a*(2+3)。1 例如计算“a float c=6.4/(float)i;/ 把i的值变成float类型。 两个操作数进行四则运算,如果想保留小数位,那么两个操作数应该都是浮点数。上面的代码就是这样。1.4 函数(1) 定义和使用函数 1.定义和调用函数:下面定义了一个函数,返回值是 double 类型的,

30、其中有两个参数 i、j,分别是 int 和 float 类型的。 double foo(int j, float j) 如果函数不需要返回任何值,可定义为 void 类型。 函数的定义必须在函数调用的前面。只有在前面添加了函数定义,才能把具体实现放到调用的后面: double foo(int, float);/ 放到调用之前 2.返回值:return 值; 函数是 void 类型的,那么 return 后面除了分号,什么都不跟。 调用之后,函数立刻结束。 不可以直接对函数名赋值(学过 Pascal 或 Basic 语言的同学要特别注意)。 3.如果你的函数需要返回指针或引用,你必须注意:不要引

31、用函数内部的变量!因为函数一结束,函数内部 的变量就烟消云散,不复存在了。正确做法是引用静态变量(static)或全局变量。 4.内联函数(inline):当一个函数内部只有寥寥几句时,如“华氏度变摄氏度”,可以考虑将其定义成 内联函数,通知编译器省略函数入栈等操作,直接展开函数内容,以加快运行速度。 inline int FtoC(int f) return (f-32)/9*5; (2) 传递实参 1.按值传递:例如 int foo(int n),在调用 foo 时,程序会把参数复制一份给 n。这样,对 n 的任何修 改都不会反映到调用 foo 的参数上面。 对于按值传递数组,一定要慎重。

32、因为复制数组的元素要浪费很多时间。 2.传递指针:例如 int foo(int *n)。对 n 的修改会反映到调用 foo 的参数上面。 修改 n 的值时要注意,必须用取值运算符,否则改变的是 n 指向的内存空间1。此外,这种方法可以用于传递数组调用时只需把数组名作为参数。这时不需要取值运算符。 3.传递引用:例如 int foo(int fin、fout 分别代表输入文件和输出文件。把它们换成 stdin 和 stdout,就是从屏幕输入和从屏幕输出。“1.5 字符串操作”也使用了同样的变量。 1.输出字符串或变量的值输出字符串或变量的值:printf(“格式字符串“, ); 或 fprin

33、tf(fout, “格式字符串“, ); 格式字符格式字符:“%”后连接一个字母。字符含义字符含义 d整数1e, E用科学记数法表示的浮点数 u无符号整数f浮点数 o八进制整数c字符 x, X十六进制整数(小写、大写)s字符串(字符数组)常见的修饰符常见的修饰符: %5d:5 位数,右对齐。不足 5 位用空格补齐,超过 5 位按实际位数输出。 %-5d:5 位数,左对齐。不足 5 位用空格补齐,超过 5 位按实际位数输出。 %05d:5 位数,右对齐。不足 5 位用0补齐,超过 5 位按实际位数输出。 %+d:无论是正数还是负数,都要把符号输出。 %.2f:保留 2 位小数。如果小数部分超过

34、2 位就四舍五入,否则用 0 补全。 1.输入到变量输入到变量 读取不含空白的内容读取不含空白的内容:scanf(“格式字符串“, 或 fscanf(fin, “格式字符串“, 格式字符和 printf 基本一致。 不要忘记不要忘记“ 首先要判断它是否为首先要判断它是否为 EOF(文件结束)。如果不是,就可以用强制类型转换变成 char。 读取到行末时,要注意对换行符的处理。 Windows、Linux、Mac 的回车字符是不同的。Linux 是n,Mac 是r,Windows 下是两个 字符r和n。(2) 使用流输入/输出 头文件: 1.输入到变量输入到变量:cinn; 2.输出到屏幕上输出

35、到屏幕上:coutnm; cout 右对齐,长度为右对齐,长度为 n,不足的部分用空格补齐,不足的部分用空格补齐: cout.width(n);cout.fill( );/ 如果想用“0”补齐,就可以把空格换成“0” cout、以及 、等。 C+的流、容器、算法等都需要引用 std 命名空间。所以需要在#include 后面、你的代码前面加上一句:using namespace std; (1) 库函数 1.数组的整体操作:数组的整体操作: 头文件: 将 a初始化:memset(a, 0, sizeof(a); 第二个参数应该传入第二个参数应该传入 0、-1 或或 0x7F。传入 0 或-1

36、时,a中每个元素的值都是 0 或-1;如果传入 0x7F 时,那么 a中每个元素的值都是 0x7F7F7F7F(不是 0x7F!),可认为是“无穷大”。 将 a整体复制到 b中:memcpy(b, a, sizeof(a); 判断 a和 b是否等价:memcmp(a, b, sizeof(a);/ 返回 0 表示等价 2.字符操作字符操作: 头文件: tolower(c)、toupper(c):将 c 转化为小写或大写。 isdight(c)、isalpha(c)、isupper(c)、islower(c)、isgraph(c)、isalnum(c):分别 判断 c 是否为十进制数字、英文字母

37、、大写英文字母、小写英文字母、非空格、字母或数字。 3.最大值最大值/最小值最小值: 头文件: max(a,b)返回 a 和 b 中的最小值,min(a,b)返回 a 和 b 中的最大值。 其实我们可以自己写: 4.交换变量的值交换变量的值:swap(a,b) 头文件: 其实我们可以自己写:inline void swap(int a=b; b=t; 5.执行执行 DOS 命令或其他程序命令或其他程序:system(“命令行“); 头文件: 暂停屏幕:system(“pause“); 竞赛交卷或 OJ 提交代码之前必须删除 system,否则会被视为作弊(如果是 tyvj 甚至都无法提交)。如

38、果使用输入重定向,那么命令提示符不会接受任何键盘输入直接用文件内容代替键盘了。 6.立刻退出程序立刻退出程序:exit(0); 这种方法常用于深度优先搜索。执行后,程序立刻停止并返回 0,所以在调用前应该输出计算结果。 头文件: 7.计时计时:double a = (double)clock() / (double)CLOCKS_PER_SEC; 上面的 a 对应一个时刻。而将两个时刻相减,就是时间间隔。可用这种方法卡时。 头文件: 8.断言断言:assert(条件)条件为假时,程序立刻崩溃。 头文件: 如果定义了 NDEBUG 符号,那么它将不会起任何作用。 断言和错误处理不同:例如出现“人数为负数”的情况,如果责任在于用户,那么应该提示错误并重 新输入,而不是用断言;如果发生在计算过程,应该用断言来使程序崩溃,以帮助改正代码中的错误。换句话说,错误处理防的是用户的错误,断言防的是代码的错误。 9.快速排序快速排序:qsort(首项的指针, 待排序元素个数, 每个元素所占字节, 比较函数) 头文件: 这是留给 C 党的快速排序,它比 STL

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com