收藏 分销(赏)

论C++语言在信息学竞赛中的应用pdf.docx

上传人:仙人****88 文档编号:5635363 上传时间:2024-11-15 格式:DOCX 页数:6 大小:55.84KB 下载积分:10 金币
下载 相关 举报
论C++语言在信息学竞赛中的应用pdf.docx_第1页
第1页 / 共6页
论C++语言在信息学竞赛中的应用pdf.docx_第2页
第2页 / 共6页


点击查看更多>>
资源描述
IOI2004 国家集训队论文 韩文弢 论 C++ 论 语言在信息学竞赛中的应用 浙江省余姚中学 韩文弢 摘要 程序设计语言是信息学竞赛的一个重要组成部分,任何算法只有通过程序设计语言 实现之后才能真正解决问题。C++语言凭借其高度的灵活性和强大的功能在大学生竞赛中 被非常广泛地使用,在中学生竞赛中的使用也越来越广泛。本文分为三章,由浅入深地介 绍了 C++语言的基础知识、面向对象编程基础和常用标准库、标准模板库(STL) 。希望本 文能够对想在信息学竞赛中使用 C++语言的读者有所帮助。 关键字 信息学竞赛 C++程序设计语言 标准模板库 目录 前言..................................................................................................................................................2 1 从 Pascal 到 C++..........................................................................................................................3 1.1 世界,你好! ...................................................................................................................3 1.2 类型和定义 .......................................................................................................................4 1.3 指针、数组和结构 ...........................................................................................................7 1.4 表达式和语句 .................................................................................................................11 1.5 函数 .................................................................................................................................14 1.6 常用的库函数 .................................................................................................................16 1.7 本章小结 .........................................................................................................................17 2 深入 C++语言............................................................................................................................20 2.1 类 .....................................................................................................................................20 2.2 操作符重载 .....................................................................................................................24 2.3 字符串 .............................................................................................................................26 2.4 流 .....................................................................................................................................27 2.5 本章小结 .........................................................................................................................30 3 STL 简介.....................................................................................................................................33 3.1 STL 概述 ..........................................................................................................................33 3.2 迭代器 .............................................................................................................................34 3.3 算法 .................................................................................................................................35 3.4 容器 .................................................................................................................................42 3.5 本章小结 .........................................................................................................................45 总结................................................................................................................................................46 参考文献........................................................................................................................................48 第 1 页 共 48 页 IOI2004 国家集训队论文 韩文弢 前言 信息学竞赛一般要求在一定的时间内,理解并分析题意,设计符合给定时间和空间复 杂度要求的算法,并在计算机上使用一定的程序设计语言正确地实现算法。由于整个竞赛 存在时间限制(特别是 ACM/ICPC 类竞赛,在解决问题数目相等的情况下以做题累计时间 的多少来决定名次) ,因此所使用的程序设计语言能否正确、快速地实现算法对竞赛的成绩 影响颇大。所以,编程复杂度越来越受到重视。编程复杂度在很大程度上与所选用的程序 设计语言有关。一般信息学竞赛比较常用的程序设计语言有以下几种:BASIC、Pascal、 C/C++、Java,它们的特点如下表所示: BASIC Pascal C++ Java 学习难度 容易 一般 较难 较难 语言特点 简单 严谨 灵活 高度面向对象 程序运行速度 慢 较快 快 慢 库函数功能 弱 一般 很强 强 在目前的中学生信息学竞赛中,Pascal 语言使用较为广泛。但是 C++语言凭借其本身 所具有的高度的灵活性,以及它所带的库的强大功能,被越来越多的选手所使用。本文就 1 是在这样一个背景下撰写的。在本文中,Pascal 语言以 Free Pascal 为准;而 C++语言则以 标准的 ANSI/ISO C++ 2 为准。 另外,需要注意的一点是,本文并不是参考资料。因此,对于 C++语言,本文不可能 介绍得面面俱到,十分详细。如果想更加深入的学习 C++语言,可以阅读有关资料。 1 原因有二:1、标准 Pascal 所提供的东西实在是太少了;2、Free Pascal 在目前竞赛中使用较为广泛。推荐编译器:Free Pascal 1.0.10 (http://www.freepascal.org)。2 C++标准请参考《C++程序设计语言(特别版) 》 。推荐编译器:gcc 2.95.3(http://www.gnu.org/software/gcc/gcc.html, 第 2 页 共 48 页 IOI2004 国家集训队论文 韩文弢 1 从 从 Pascal 到 到 C++ 阅读本章的必要条件:会使用 Pascal 语言、了解一定的算法知识 由于目前中学生信息学竞赛中使用 Pascal 语言的选手较多,本章的目的就是使读者在 已经掌握 Pascal 语言的情况下,能够尽快地从 Pascal 语言转型到 C++语言。如果你已经对 C++语言有一定的了解,可以跳过本章,直接阅读下一章。 1.1 世界,你好! 首先,让我们通过一个非常简单的 C++程序,来初步地了解 C++语言。 //: C01:Hello.cpp // Hello, world! #include <iostream> using namespace std; int main() { cout << "Hello, world!" << endl; } ///:~ 这个程序的作用就是在屏幕上输出“Hello, world!”的字样。 第一行、第二行以及最后一行中,从“//”开始到行末的部分都是注释。在 C++中, 注释有两种写法。一种是从 C 中继承的块注释,以“/*”开始,到“*/”结束。另一种 就是新增的行注释,从“//”开始,到行末为止。 3第三行中以“#”开始的内容被称为预处理指令,这一行的作用是把一个叫做 iostream 的头文件包含到我们的程序中来,相当于 Pascal 中使用单元的 uses 语句。不过 Pascal 中默 认使用 System 单元,其中包含了我们常用的绝大多数过程和函数,而 C++默认是不包含任 何头文件的。另外,C 语言中的头文件都是以.h 结尾的,而标准的 C++提倡使用没有扩展 名的头文件。 第四行让我们可以在程序中直接使用 std 名字空间内的标识符。std 名字空间包含了所 有标准 C++提供的类和函数,为了简便起见,一般总在包含头文件的预处理命令后写上这 一行。有关名字空间的详细内容可以参考有关资料。 第五行到第七行就是程序的主体。 在这个程序中, 我们定义了一个名字为 main 的函数。 这个函数就相当于Pascal中的主程序。 任何一个能够独立执行的C++程序都需要有一个main 函数。我们还可以看出,在 C++中, “{”和“}”就相当于 Pascal 中的“begin”和“end” 。 第六行的作用就是向屏幕输出“Hello, world!” ,并换行。其中,cout 就代表标准输出 (一般就是屏幕) ,相当于 Pascal 中的 Output。 “<<”在 C++中本来是位左移运算符,但是 在这里被重新定义为插入符,作用是把一段内容插入到一个输出流中。endl 就是换行的意 思。另外, C++中的字符串是用双引号括起来的,每一个语句也用“;”表示结束。 3 头文件 iostream 中包含了 C++中流的类和相关函数的定义,可以用来进行输入输出。详细的使用方法将 在第二章中进行描述。 第 3 页 共 48 页 IOI2004 国家集训队论文 韩文弢 1.2 类型和定义 类型 与 Pascal 相似,C++也提供了基本类型以及程序员可以自定义的类型。下表展示了 C++ 中一些常用的基本类型以及与之对应的 Pascal 类型: 名称 C++类型 Pascal 类型 范围 大小 bool Boolean true / false 1布尔型 char Char1所有单字节字符字符型 char ShortInt -128 .. 127 18 位有符号整型unsigned char Byte 0 .. 255 18 位无符号整型short SmallInt -32768 .. 32767 216 位有符号整型 unsigned short Word 0 .. 65535 216 位无符号整型 int LongInt -2147483648 .. 2147483647 432 位有符号整型 unsigned int LongWord 0 .. 4294967295 432 位无符号整型63 63 -2 long long .. 2 Int64 -1 864 位有符号整型64 QWord 0 .. 2 unsigned long long -1 864 位无符号整型 float Single 1.17e-38 .. 3.40e38 4单精度浮点型 double Double 2.22e-308 .. 1.79e308 8双精度浮点型 long double Extended 3.36e-4932 .. 1.18e4932 10/12扩展浮点型 布尔型 与 Pascal 相似,布尔型用来表示逻辑运算的结果。一个布尔型量的值只可能是 true 或 者 false,true 的数值是 1,而 false 的数值是 0。与 Pascal 不同的是,在 C++中,很多其他 类型的量都可以隐式地转化为布尔型, 这时, 非零的值都被转化成 true, 而零被转化成 false。 字符型 单个字符的常数要用单引号括起来,一些不能显示的字符可以通过转义符来表示(参 见下表) 。另外,从上表中可以看出,在 C++中,字符型和单字节的整型实际上是等价的。 举例来说,'A'的数值就是 65。 名称 ASCII 名称 C++名称NL(LF)\n换行 HT\t水平制表符 VT \v竖直制表符 BS \b退格 CR\r回车 FF\f复位 BEL\a铃声 \ \\反斜杠 ? \?问号 第 4 页 共 48 页 IOI2004 国家集训队论文 韩文弢 ' \'单引号 " \"双引号 ooo 八进制 ASCII 码 \ooohhh 十六进制 ASCII 码 \xhhh 整型 C++中的整型和 Pascal 差不多,值得注意的是 C++中的各种整型的类型名实际上是由 三部分组成的。首先是 signed 或者 unsigned,表示有符号或者无符号,默认为有符号;其 次是长度的修饰词(char 除外) ,有 short、long、long long,默认为 long;最后就是 int, 在前面有修饰词的情况下可以省略。 在 C++中,整型的常数是由前缀、数字序列以及后缀构成的。前缀用来描述常数所使 用的进制,默认是十进制,以“0”开头的是八进制,以“0x”开头的是十六进制。后缀 描述该常数的长度和有无符号, “l”表示 32 位整数, “ll”表示 64 位整数, “u”表示无 符号整数,可以组合使用。另外,前缀和后缀中的字母大小写不限。 浮点型 C++中的浮点型和 Pascal 也差不多。浮点型的常数也有定点和浮点两种写法。定点数 的写法基本与 Pascal 一致,区别在于在 C++中如果整数部分或者小数部分为零就可以省略, 但是小数点必须保留。例如, “39.”和“.142857”在 C++中都是合法的。浮点数的写法 与 Pascal 相同,底数和阶码之间用“e”分隔。另外,C++中的浮点数还可以带后缀, “f” 表示单精度型, “l”表示扩展型,省略则表示双精度型。 枚举类型 与 Pascal 类似的,C++中也有枚举类型。例如: enum keyword {ASM, AUTO, BREAK} 其中,该枚举类型的名称是 keyword,值可以是 ASM、AUTO 或者 BREAK。 C++语言没有提供内置的子界和集合类型。另外也没有提供内置字符串类型,但是字 符串处理的方式却有两套。一套是从 C 语言中继承的字符指针的处理方式,比较麻烦,具 体请参考有关资料;另一套则是 C++标准库提供的 string 类,比较方便,将会在 2.3 中详 细描述。 为了了解各种类型实际所占的字节数,我们来看下面这个程序: //: C01:Types.cpp // Built-in types #include <iostream> using namespace std; int main() { cout << "Size of bool: " << sizeof(bool) << endl; cout << "Size of char: " 第 5 页 共 48 页尊敬的用户,免费版软件只能转换5页,如需转换更多页面请升级为VIP用户
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服