信息学奥赛入门培训教程_第1页
信息学奥赛入门培训教程_第2页
信息学奥赛入门培训教程_第3页
信息学奥赛入门培训教程_第4页
信息学奥赛入门培训教程_第5页
已阅读5页,还剩224页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

--PAGE100-目 录青少年信息学奥林匹克竞赛情况简介 5第一章 计算机基础知识 7计机基常识 7计机产与展 7计机统工理 7计机有数码的识 8原、码补码 10逻运算 10作统 DOS(DiskOperatingSystem)的组成 DOS的件目录 DOS命令 12Windows12算网常识 13网基知识 13Internet简介 14算信安基知识 16计机网安全 16计机毒 17病的类 17第2章C++编程简介 19机语、编和高语言 19C言与C++的史 202.3 C++标库 20结化程 21简程序 22简程:个相加 25算运算 27判:等关算符 29新头件名间 31第3章C++输入/输出流 333.1 简介 333.2 流 33iostream类的件 34输入输流和象 34输流 35流入算符 35连使流入/读取算符 37出char*类型的量 37用员数put出字和put函的调 383.4 输流 39流取算符 39成数get和getline 41成函数read、gcount和write的无式入/44流纵子 45整流基:操纵子dec、oct、hex和setbase 45设浮数度(precision、setprecision) 46设域宽(setw、width) 47用自定义流纵算子 48流式态 49格状标志 50尾零十制数点(ios::showpoint) 50对齐(ios::left、ios::right、ios::internal) 51设填字符(fillsetfill) 53整流基:(ios::dec、ios::oct、ios::hex、ios::showbase) 54浮数科记法(ios::scientific、ios::fixed) 55大/写制(ios::upercase) 56设及除式志(flags、setiosflags、resetosflags) 57流误态 58第4章文件处理 614.1 简介 61文和流 61建并入件 61读文中数据 65更访文件 67第5章C++的字符串流 68流继关系 68字流输操作 68字流输操作 69字流数类换中应用 70输入/出状标志 71第6章 控制结构 746.1 简介 746.2 算法 74控结构 74if择构 75if/else选结构 76while复构 78构算:例究1(计器制复) 78构算与上逐步善实究2(记控重复) 80构算与上逐步善实究3(套控结构) 85赋运符 88增自运符 88计器制环要点 91for重结构 92for结使举例 94switch多项择构 97do/while重结构 101break和continue102逻运符 1046.19 混相等(==)与(=)运符 1056.20 结化程结 106第7章函数 1087.1 简介 1087.2 数函库 1087.3 函数 1097.4 函定义 1097.5 头件 7.6 作域则 7.7 递归 使递举,Fibonacci数列 递与代 120带参表函数 121联数 122函重载 123第8章数组 1258.1 简介 1258.2 数组 125声数组 126使数的例 126将组递函数 137排数组 141查数:性与折查找 142多数组 147第9章指针与字符串 1539.1 简介 153指变的明始化 153指运符 154按用用数 156指与量定符 158按用用冒序 163指表式指法 167指与组关系 169指数组 173函指针 173符字串简介 177符字串础 177符处库符串作数 179第10章 信息学奥赛中的常用算法 185算简介 185枚算法 187回算法 191递算法 193递算法 196分算法 200贪算法 202搜算一深优先) 205搜算二广优先) 209态划法 212精计算 215附 录 228ASCII表 228青少年信息学奥林匹克竞赛情况简介信息学奥林匹克竞赛是一项旨在推动计算机普及的学科竞赛活动,重在培养学生能力,使得(全国青少年信息学(计算机)奥林匹克分区联赛:1995年NOI从1995年起,至2001年共举办了七届全国青少年信息学奥林匹克分区联赛,每年举办一次((()简称A(19841-8全国青少年信息学)奥林匹克竞赛简称N由中国算机学会主办的、并与国际信息学奥林匹克接轨的一项全国性青少年学科竞赛活动。1984年举办首届全国计算机竞赛。由各省市组织参赛,每年举办一次。奖项有个人一、二、三等奖,女选手第一、二、三名,各省队团体总分名次排队。国际青少年信息学)奥林匹克竞赛简称每年举办一次,由各参赛国家组队参赛。的识诞生与展 的识诞生与展 特点在现代会中应用#计算机息全础识 计算机网络计基算本机操的作MSDOSWindows常用输入汉字输入程序设计基本知程序的表示BASIC数据结构的类型()程序设计识*—>信息世界(表达解法)—>计算机世界(将解法用计算机能实现的数据结构和算法描述出来)基本算法处理简单搜索 *字串理排序 *查找统计 *分类 *合并二、复赛内容与要求:计算机软件*操作系统的使用知识*编程语言的使用数据结构*结构类型中的记录类型*指针类型*文件(提高组必须会使用文本文件输入)*链表*树*图#程序设计*程序设计能力*设计测试数据的能力*运行时间和占用空间的估算能力#算法处理*排列组合的应用*进一步加深回溯算法、递归算法*分治法*搜索算法:宽度、深度优先算法*表达式处理:计算、展开、化简等#*动态规划#在初赛的内容上增加以下内容(2008年修改稿):三、初赛试题类型:注:试题语言两者选一(程序设计语言:FREEPASCAL、C、C++)*判断*填空*完善程序*读程序写运行结果*问答四、推荐读物:*分区联赛辅导丛书*学生计算机世界报及少年电世界杂志第一章 计算机基础知识计算机的产生与发展计算机的产生是20世纪最重要的科学技术大事件之一。世界上的第一台计算机(ENIAC)于1946年诞生在美国宾夕法尼亚大学,到目前为止,计算机的发展大致经历了四代:1946CPU19581964197119561亿/199210亿/1997130计算机系统及工作原理(1)计算机的主要硬件输入设备:键盘、鼠标、扫描仪等。输出设备:显示器、打印机、绘图仪等。中央处理器P存储器:具有记忆功能的物理器件,用于存储信息。存储器分为内存和外存:它分为只读存储器(ROM)和随机存储器(RAM)和高速缓冲存储器(Cache);ROM:((EPROM)(EEPROM_));RAM:可读可写,断电后内容全部丢失;Cache:因为CPU读写RAM的时间需要等待,为了减少等待时间,在RAM和CPU间需要设置高速缓存Cache,断电后其内容丢失。②外存:磁性存储器——软盘和硬盘;光电存储器——光盘,它们可以作为永久存器;③存储器的两个重要技术指标:存取速度和存储容量。内存的存取速度最快(与CPU速度相匹配),软盘存取速度最慢。存储容量是指存储的信息量,它用字节(Byte)作为基本单位,1字节用8位二进制数表示,1KB=1024B,1MB=1024KB,lGB=1024MB(2)计算机的软件计算机的软件主要分为系统软件和应用软件两类:①系统软件:为了使用和管理计算机的软件,主要有操作系统软件如,WINDOWS95/98/2000/NT4.0、DOS6.0、UNIX等;WINDOWS95/98/2000/NT4.0是多任务可视化图形界面,而DOS是字符命令形式的单任务的操作系统。②应用软件:为了某个应用目的而编写的软件,主要有辅助教学软件(CAI)、辅助设计软件(CAD)、文字处理软件、工具软件以及其他的应用软件。到目前为止,电子计算机的工作原理均采用冯.若依曼的存储程序方式,即把程序存储在计算机内,由计算机自动存取指令(计算机可执行的命令=操作码+操作数)并执行它。工作原理图如下:计算机中有关数及编码的知识0,1二进制数运算非常简单,计算机很容易实现,其主要法则是:0+0=00+1=11+0=11+1=0 0*0=00*1=01*0=01*1=1由于运算简单,电器元件容易实现,所以计算机内部都用二进制编码进行数据的传送和计算。(1)计数的进制不同,则它们的基数也不相同,如表1-1所示。进制基数特点二进制0,1逢二进一八进制0,1,2,3,4,5,6,7逢八进一十六进制0,1,2,...,9,A,B,C,D,E,F逢十六进一(2)数的权(权191=2102+1101+9100(11010)2=1*24+1*23+0*22+1*21+1*20(273)8=2*82+7*81+3*80(27AF)16=2*163+7*162+10*161+15*160,(39)10=(100111)2 (245)10=(365)8将十进制小数的小数部分乘以进制数取整,作为转换后的小数部分,如.351=00112 0.151=0.012:如:(219)10=2*102+1*101+9*100(11010)2=1*24+1*23+0*22+1*21+1*20=26(273)8=2*82+7*81+3*80=187(7AF)16=7*162+10*161+15*160=1867浮点数的形式可写成:N=M*2E(其中M代表尾数,E代表阶码)其形式如下:阶码尾数(包括符号位)ASCII编码,(ASCII)70ASCII128个如:0-9:48-57:00110000-...A-Z:65-90:01000001-...a-z:97-122:01100000-...ASCII码不能表示汉字,因此要有汉字信息交换码,我国国家标准是gb2312,它也被称作国际码。gb23126763(常用字)37553008)流水码:如区位码、电报码、通信密码,优点重码律少,缺点难于记忆;音码:以汉语拼音为基准输入汉字,优点是容易掌握,但重码律高;形码:根据汉字的字型进行编码,优点重码少,但不容易掌握;音形码:将音码和形码结合起来,能减少重码律同时提高汉字输入速度。16*16,24*24,32*32,48*48,64*64((bit)存16*1632原码、反码与补码在计算机中,数据是以补码的形式存储的:n1n-101。当真值为正时:原码、反码、补码数值位完全相同;当真值为负时:原码的数值位保持原样,反码的数值位是原码数值位的各位取反,补码则是反码的最低位加一。16位十进制数17的原码、反码与补码均为:0000000000010001十进制数-17的原码、反码与补码分别为:1000000000010001、1111111111101110、1111111111101111逻辑运算:::1110010101∩10110111=1001010111(1)交换律:A+B=B+A,A·B=B·A2A+B+C=A+(B+C,·BC=A(·)(3)幂等律:A·A=A,A+A=A4AA+B=A,A+AB=A5AB+C=·B+AC,A(·=A+A+)(6)互补律:A+A=1,A·A=0(7)非深入:A+B=A·B,A·B=A+B(8)0-1律:A+0=A,A+1=1,A·1=A,A·0=0例:化简函数Q=AD+AD+AB+ACEF。这个函数有5个自变量,化简过程如下:Q=AD+AD+AB+ACEF=A+AB+ACEF=A+ACEF=A练习:求证:(A+B)(A+C)=AB+ACDOS(DiskOperatingSystem)的组成MS—DOS采用模块结构,它由五部分组成:ROM中的BIOS模块、IO.SYS模块、MSDOS.SYS模块、COMMAND.COM模块和引导程序。BIOS模块:在PCROMCMOS(BIOS)。BIOSBIOSIO.SYSIO.SYSMS—DOSROMBIOSRONBIOSMSDOS.SYSMS—DOS(4)COMMAND.COMMS—DOS5统文件则把DOS系统从磁盘装人内存。一张系统盘上应该包含有:引导记录、IO.SYS、MSDOS.SYS和COMMAND.COMDOS的文件和目录():+路径+(18)+(13)4)树形目录:DOS采用树形目录结构。由一个根目录和若干层子目录组成。这种目例如要查找UCDOS子目录下的二级子目录下的README.TXTDOS:CODAADOS命令DOS(1)DIR(显示文件目录)MD、CD、RD(子目录的建立、进入、删除命令)(2)文件操作命令:COPY(复制命令)、DEL(删除命令)、REN(更改文件名)TYPE(显示文本文件内容)(3)其他内部命令、TIMEVER、等 ·DOS磁盘格式化命令:盘符[/S)I/V]软盘复制命令:DISKCOPY[1:][2:]其作用,能够进行软盘之间的全盘复制(以磁道方式),不仅可以复制系统文件而且可以复制隐含文件。Windows简介WindowsMS-DOSWindowsWindowsWindows具有以下主要特点。Windows提供了一种不同于DOS系统下命令行的工作方式,它通过对窗口、图标、选单、对话框、命令按钮、滚动框等图形符号与画面的操作来实现对计算机的各种操作。在Windows中,所有的操作都是通过窗口中的图形界面进行的。在Windows中,平稳的多任务机制可以同时运行多道程序以及执行多项任务,各程序与各任务之间不仅转换容易,而且还可以方便地交换数据。Winddws640在Windows中,可以简单直观地实现网络的安装、配置、浏览,从而可以更加方便地实现网络管理和资源共享。Windows还支持其他厂商基于技术真实字体)例在ndos5“务”作 。示统所功能 B)只示前动窗C)只示在台作窗口名 D)现口的切换解答在务中显了所打的序图。本题正确答案为D。网络基础知识计算机网络是将地理位置不同的计算机,用通信链路连接起来,共同遵守一定的协议,以实现计算机软硬件资源共享为目标的通信系统。计算机网络由网络硬件和网络软件组成。(。网络硬件包括网络的拓扑结构、网络服务器、网络工作站、传输介质和设备。:(LAN):(10)。Internet如nene(。。星形网:以一台计算机为中心,以放射状连接若干台计算机。环形网:传输线路构成一个封闭的环,入网的计算机连到这个环形线路上。总线网:用一条通信线路作主干,入网的计算机通过相应接口连到线路上。(OSI模型OSI7层:各层功能如下:1.物理层物理层与移动二进制数和维护物理连接有关。2.数据链路层(3.网络层4.传输层5-7.会话层、表示层和应用层提供了如下功能:处理计算机间数据表示的差别。确保数据在网络传输中不被窃取和泄露,并且确保网络不允许未经授权就访问数据。最高效地使用网络资源通过应用程序及活动同步来管理对话和活动。在网络节点间共享数据。Internet简介nenet2080InternetIPIPInternetInternetIPIP4,0-255,8,IP32位二4IP:IPDDDD,IDIP地址ID5ABCD类地址和EA类IP地址一个A类P地址由1字节的网络地址和3地址范围从A1261B类IP地址BIP220到5B16326C类IP地址CIP31192.000到5C29254D(MucaDIPE类IP地址以“llll0”开始,为将来使用保留。00..0)”的P25.25.25.2在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下:A类地址:~55B类地址:~55C类地址:~55InternetIPIPP"。IP地址如同电脑的身份证号码,而域名相当电脑的姓名。Internet(1)信息浏览(WWW)Netscape浏览器和MicrosoftInternetExplorer(IP如http://;ftp://(2)文件传输(FTP)FTP(FileTransferProtocol)是Internet的一种标准协议,这一协议使用户能在联网的计算机之间传送文件如上载(UPLOAD把本地计算机上地文件复制到远程计算机上)和下载(DOWNLOAD把远程计算机上的文件复制到本地计算机上)。(3)传送电子邮件(E-mail)电子邮件地址=用户名+@+主机域名;如:zhangming@(BBS)(telnet)TCP/IPTCP/IP协议的开发研制人员将Internet分为五个层次,以便于理解,它也称为互联网分层模型或互联网分层参考模型,如下表:()()网络接口层(第二层)物理层(第一层)各层简要说明如下:Internet如PC信息包传输层:为两个用户进程之间建立、管理和拆除可靠而又有效的端到端连接。应用层:它定义了应用程序使用互联网的规程。计算机的网络安全1、不同环境和应用中的网络安全2、网络安全应具有以下四个方面的特征:保密性:信息不泄露给非授权用户、实体或过程,或供其利用的特性。可控性:对信息的传播及内容具有控制能力。3、主要的网络安全威胁自然灾害、意外事故;计算机犯罪;人为行为,比如使用不当,安全意识差等;“黑客”行为:由于黑客的入侵或侵扰,比如非法访问、拒绝服务计算机病毒、非法连接等;电子谍报,比如信息流量分析、信息窃取等;信息战;网络协议中的缺陷,例如TCP/IP协议的安全问题等等。4、黑客常用的信息收集工具信息收集是突破网络系统的第一步。黑客可以使用下面几种工具来收集所需信息:SNMP协议,用来查阅非安全路由器的路由表,从而了解目标机构网络拓扑的内部细节。TraceRoute程序,得出到达目标主机所经过的网络数和路由器数。Whois协议,它是一种信息服务,能够提供有关所有DNS域和负责各个域的系统管理员数据。(。DNS服务器,可以访问主机的IP地址表和它们对应的主机名。Finger。Ping实用程序,可以用来确定一个指定的主机的位置并确定其是否可达。把这个简单的工具用在扫描程序中,可以Ping网络上每个可能的主机地址,从而可以构造出实际驻留在网络上的主机清单。计算机病毒计算机病毒是一种程序,是人为设计的具有破坏性的程序。计算机病毒具有破坏性、传播性、可激发性、潜伏性、隐蔽性等特点。病毒的分类①良性病毒:这种病毒的目的不是为了破坏计算机系统,而只是为了编制者表现自己。此类病毒破坏性较小,只是造成系统运行速度降低,干扰用户正常工作。②恶性病毒:这类病毒的目的是人为的破坏计算机系统的数据。具有明显破坏目标,其破坏和危害性都很大,可能删除文件或对硬盘进行非法的格式化。①源码病毒:在源程序被编译之前,就插入到用高级语言编写的源程序当中。编写这种病毒程序较困难。但是,一旦插入,其破坏性和危害性都很大。②入侵病毒:是把病毒程序的一部分插入到主程序中。这种病毒程序也难编写,一旦入侵,难以清除。②操作系统病毒:是把病毒程序加入或替代部分操作系统进行工作的病毒。这种病毒攻击力强、常见、破坏性和危害性最大。④外壳病毒:是把病毒程序置放在主程序周围,一般不修改源程序的一种病毒。它大多是感染DOS下的可执行程序。这种病毒占一半以上,易编制,也易于检测和消除。在日常维护中应隔离计算机病毒的来源,经常要用杀毒软件检查计算机系统和存储器。[例设张盘染病毒能除毒措是 A)除软上所文件本题正确答案为B。第2章C++编程简介(tranlation)(machinelanguage)01)+1300042774+1400593419+1200274027(assemblylanguage)(assembler)LOAD ADD STORE 尽管这种代码对于人们一目了然,但计算机却无法理解,必须先翻译为相应的机器语言。(high-levellanguage)(compiler)grossPay =basePay+overTimePayCC++(interpreter)程序可新编译程序。一旦程序开发完成,编译版本的运行最有效。C的历史C++CC语言又是从两个编程语言BCPL和BBCPLMartinRichards1967KenThompsonB语言(1970)DCPLBC语言是从DDennisRitchie1972年在DECPDP—11CBCPLBC语言最初作为UNIXCCC到20世纪70CCPPengha/RitchieC"1978年PrenticeHallKernighanRitchieTheCProgrmmmingLanguageCKe78)。C()个标准的C1983(x3)x3JII技术分1989AN5I(IS0)CANSIANSI1988KernighanRitchie称为ANSIC)C++C2080BjarnestroustrupC++的许多特性是从c语言中派生的,但更重要的是,它提供了面向对象编程(object-orientedprogramming)(object)实际上是模拟实际项目的可复用软件组件(component)。软件开tXerox的PaloAltosmalltalk。SmalltalkC++C2.9基于C/C++Java。标准库C++(class)(function)C++C++C++C++C++本。PlaugerC++中ANSIC(indepandentsofterwarevender)也提常用数据类型与PascalPascal数据类型C/C++ShorInt8位有符号整数charByte8位无符号整数BYTE,unsignedshortSmallInt16位有符号整数shortWord16位无符号整数unsignedshortInteger,LongInt32位有符号整数int,longCardinal,LongWord/DWORD32位无符号整数unsignedlongInt6464位有符号整数_int64Single4字节浮点数float*Real486字节浮点数Double8字节浮点数double*Extended10字节浮点数longdoubleCurrency64位货币类型TDate/TDateTime8字节日期/时间Variant,OleVariant16字节可变类型VARIANT,^Variant,^OleVariantChar,AnsiChar1字节字符charWideChar2字节字符WCHAR*ShortString短字符串stringAnsiString/String长字符串^AnsiStringWideString宽字符串^WideStringPChar,PAnsiCharNULL结束的字符串char*PWideCharNULLLPCWSTRBoolean,ByteBool1字节布尔类型任何1字节WordBool2字节布尔类型任何2字节BOOL,LongBool4字节布尔类型BOOL注:有*前缀的是向前兼容类型;有^前缀的是C++Builder特有类型。20602060(structuredprogramming)的出现,用235结构化编程研究的一个更具体结果是1971年NiklausWirth教授推出了Pascal语言。Pascal17(BlaisePascal)Ada207080Ada以PascalPascalLordByron的女儿(AdaLovelace)AdaLovelace19用于charlesBabbage设计的分析机引擎的计算设备。Ada的一个最重要功能是多任务(multiasking).程序员可以使多个活动任务并行发生。我们要介绍的其他常用高级语言(包括C/C++)简单程序C++2.2。这段程序演示了C++语言的几个重要特性。我们详细介绍程序的每一行。//Fig.2.2:fig1_02.cpp//AfirstprograminC++以//(comment)C++"firstprograminC++"//(singned-linecomment),(C++C/*结束)。1//Fig.2.2:fig01_02.cpp2//AfirstprograminC++3#include<iostream>usingnamespaceintmain()6{7 cout<<"WelcomtoC++!\n";89 rerturn0; //indicatethatprogramendedsucessfully10}输出结果:WelcomtoC++!下列语句:#include<iostream>(preprocessordirective),是发给C++#iostream.hC++ANSIISOC++杂标准实际上指定iostream.h和其它.h,如iostream译器还不支持最新的ANSI/ISOC++下列语句:intmain()是每个C++程序都包的语句。main后面的括号表示main是个程序基本组件,称为函数(function)C++mainmainmainmainintmain(body)(})cout<<"WelcomtoC++!\n";(string)cout<<toC++!\n"((stream)toC++!"sndadouutseamobeccout3Ccout。<<(streminsertionoperator)\n(escapcharacter)(escapesequence)\n(newline)即当2.3下列语句:return0; //indicatethatprogramendedsucessfullymainC++returnmain函数末return03右花括号(})表示main函数结束。义列 \n \t \r \a \\ \" 2.3(\n)确定一个喜欢的缩排长度,然后一直坚持这个缩排长度。可以用制表符生成缩排,但制表位可能改变。建议用1/4英寸制表位或三个空格的缩排长度。toC++!"2.42.2C++2.5\n\n2.5。1//Fig.2.4:fig01_04.cpp2//printingalinewithmultplestatements3#include<iostream>usingnamespaceintmain()6{7 cout<<"Welcom";8 cout<<"toC++!\n";910 return}输出结果:WelcomtoC++!2.41//Fig.2.5:fig01_05.cpp2//printingmultiplelineswithasinglestatement3#include<iostream>usingnamespaceintmain()6{7 89 return0; //indicatethatprogramendedsucessfully10}输出结果:WelcometoC++!2.5下一个程序用输入流对象cin和流读取运算符>>取得用户从键盘中输入的两个整,计算这两个值的和,并将结果用cout输出。程序及其输出如图2.6。1//Fig.2.6:fig01_06.cpp2//Additionprogram3#include<iostream>4usingnamespacestd;5intmain()6{7 intinteger1,integer2,sum; //8cout<<"Enterfirstinteger\n"; //cin>>integer1; //cout<<"Entersecondinteger\n"; //cin>>integer2; //sum=integer1+integer2; //sumcout<<"Sumissum<<endl; //1516 return0; //017}45Entersecond72Sumis1172.6注释语句://Fig.2.6:fig01_06.cpp//Additionprogram指定文件名和用途。C++预处理指令:#include<iostream>将iostream.h头文件的内容放进程序中。mainmainmainintinteger1,integer2,sum;(declaration)integer1,integer2sum(variable)integer1,integer2sum的数据类型为7、、319143.40.0char(定义charx、$、7、*等等)。intinteger1;可以放在下列语句之前:cin>>integerl;下列声明:int integer2;可以放在下列语句之前:cin>>integer2;下列声明:intsum;可以放在下列语句之前:sum=integer1+integer2;下列句:cout<<"Enterfirstinteger\n";在屏幕上打印字符串Enterfirstinteger(b(stringliteral)(literal)),coutEnterfirstinteger\n".下列语句:cin>>integer1;cin>>cin(。上述语句表示cininteger1integer1Enter键(或Return键)(值integer1cout和cin流对象实现用户与计算机之间的交互。由于这个交互像对话一样,因此通常称为对话式计算(conversationalcomputing)或交互式计算(interactivecomputing)。下列语句:cout<<"Entersecondinteger\n";secondinteger"cin>>integer2;从用户取得变量integer2的值。赋值语句:sum=integer1+integer2;计算变量integer1和integer2的和,然后用赋值运算符(assignmentoperator)"="将结果赋给变sumsuminteger1integer2+integer1integer2suminteger1+integer2下列语句:cout<<"Sumis"<<sum<<endl;"Sumis"sumendl(endline)。endl,endl(concatenating)、链接(chaining)或连续使用流插入操作。这样,计算可以在输出语句中进行。可以将上述语句合二为一:cout<<"Sumis"<<integer1+integer2<<endl;从而不需要变量sum。右花括号告诉计算机到达了函数main的结尾。C++6章)C++用>><<8章)。算术运算算术运算符见图2.10(*)表示乘法、百分号(%)(modulus)2.10"integer1+integer2"+”和两个操作数integer1integer2。C++操作算术运算符代数表达式C++表达式加+f+7f+7减-p-cp-c乘*bmb*m除/x/y或x÷yx/y模 % rmods r%s图2.10算术运算符()7/4117/53。C++(modulus)x%yxy7%43,17%52()。C++中的算术运算表达式应以直线形式在计算机中输入。这样,a除以b应输入为"a/b",使所有常量、变量和运算符放在一行中。编译器通常不接受下列代数符号:a-b但有些特殊专业软件包支持复杂数学表达式更自然的表示方法。C++表达式中括号的使用和代数表达式中相同。例如,要将a乘以b+c的和,可以用:a*(b+c)C++中算术运算符的运算顺序是由运算符的优先级规则确定的,与代数中的相同:运算符优先级保证C++按正确顺序采用运算符。从左向右求值指的是运算符的结合律(associativity),也有一些运算符结合律是从右向左。图2.11总结了运算符优先级规则,引入其它C++运算符时,这个表可以扩充,详细的运算符优先级请参见附录。运算符运算求值顺序()括号最先求值,如果有嵌套括号,则先求最内层表达式的值,如果同一层有几对括号,则从左向右求值。*、/、或%乘、除、求模其次求值。如果有多个,则从左向右求值。+或-加、减最后求值。如要有多个,则从左向右求值。图2.11算术运算符优先级C+代数:

mabcde5C++: m=(a+b+c+d+e)/5;(a+b+c+d+e)a+b+c+d+(e/5)下例直的程代数:y=mx+bC++: y=m*x+b;不需要括号,乘法优先于加法,因此先乘后加。下列包含模(%)、乘、除、加、减运算:代数:z=pr%q+w/x-yC++:z=p*r%q+w/x-y;⑥①②④③⑤语句下面的圆圈数字表示C++采用运算符的顺序。乘法、求模和除法首先从左向右求值(结合律为从左向右)因为它们的优先级高于加法和减法。然后进行加法和减法运算,也是从左向右求值。并不是有多对括号的表达式都包含嵌套括号。例如下列表达式不包含嵌套括号:a*(b+c)+c*(d+e)这些括号在同一层。要更好地了解运算符优先级规则,考虑二次多项式的求值:y=a*x*x+b*x+c;⑥①②④③⑤C++C++x2表示x*x,pow(数)powabcxa=2,b=3,c=7x=52.12上述赋值语句可以加上多余的括号,使代码更清晰:y=(a*x*x)+(b*x)+c;C++ififif结构中的条件可以用相等运算符(equalityoperator)和关系运算符(relationaloperator)表示,如图2.13关系运算符具有相同的优先级,结合律为从左向右。相等运算符的优先级也相同,但低于关系运算符的优先级,结合律也为从左向右。标准代数相等与关系运算符C++相等与关系运算符C++条件举例C++条件含义===x==yx等于y≠关系运算符!=x!=yx不等于y>>x>yx大于y<<x<yx小于y≥>=x>=yx大于或等于y≤<=x<=yx小于或等于y图2.13相等与关系运算符ififif2.142.14num1一个值读到num2if2.14if语句2if()。1//Fig.2.14:fig01_14.cpp//Usingifstatements,relationnal//operators,andequalityoperators4#include<iosream>usingnamespaceintmain()7{8 int9cout<<"Enterintegers,andIwilltellyou\n"<<"therelationshipstheysatisfy:";cin>>num1>>num2; //13if(num1==num2)cout<<num1<<"isequalto"<<num2<<endl;16if(num1!=num2)cout<<num1<<"isnotequalto"num2<<endl;19if(num1<num2)cout<<num1<<"islessthan"<<num2<<endl;22if(num1>num2)cout<<num1<<"isgreaterthan"<<num2<<endl;25if(num1<=num2)cout<<num1<<"islessthanorequalto"29if(num1>=num2)cout<<num1<<"isgreaterthanorequalto"3334 return0; //35}输出结果:Entertwointegers,andIwilltllyouTherelationshipstheysatisfy:373isnotequal73islessthan73islessthanorequalto7Entertwointegers,andIwilltellyoutherelationshipstheysatisfy:221222isnotequal1222isgretaerthan1222isgreaterthanorequalto12Entertwointegers,andIwilltellyoutherelationshipstheysatisfy:777isequalto77islessthanorequalto77isgreaterthanorequalto72.142.14C++图2.15x+y+z求值为(x+y)+z。x=y=0x=(y=0)00。运算符结合律类型()从左向右括号* /%从左向右乘+ -从左向右加<< >>从左向右流插入/读取< <=> >=从左向右关系== !=从左向右等于=从右向左赋值图2.15运算符优先级和结合律本节是为使用支持ANSI/ISOC++头文件的新名,包括.h2.16第3行:#include<iostream>演示新型头文件名语法。第5行:usingnamespacestd;stdC++字空间能为每个新软件组件保持惟一的名称。1//Fig.2.16:fig01_16.cpp2//Usingnew-styleheaderfiles3#include<iostream.h>45usingnamespacestd;67intmain()8{cout<<"WelcomtoC++!\n";std::cout<<"WelwcomtoC++!\n";12 return13}输出结果:WelcomtoC++!WelcomtoC++!图2.16使用新型头文件C++草案标准中的每个头文件用名字空间std保证今后C++标准库操作的每个特性是惟一句只是表示我们使用C++数放在名字空间deitelC++"usingnamespacestd"9cout10std::cout:std::cout<<"WelcomtoC++!\n";cout的完全限定名为5行的"usingnamespacestd"using语句可以在C++()C++第3章C++输入/输出流简介C++/(I/O)操作,并对其余的输入/入/C++C++中还大量利用了C++C++(typesafe)I/O(CC)。I/OI/OC++流C++(()。应用程序把字节的含义与字节关联起来。字节可以是ASCII字符、内部格式的原始数据、图形图像、数字音频、数字视频或其他任何应用程序所需要的信息。输人/输出系统的任务实际上就是以一种稳定、可靠的方式在设备与内存之间传输数据。传操(C++功能(I/O)(I/O)iostream类库的头文件C++iostreamiostream.hC++cincoutcerrclog4功能。在执行格式化I/O时,如果流中带有含参数的流操纵算子,头文件iomanip.h所包含的信息是有用的。fstream.h13C++输入/输出流类和对象iostream类库包含了许多用于处理大量I/O操作的类。其中,类istream支持流输入操作.类ostream支持流输出操作,类iostream同时支持流输入和输出操作。istreamostreamiosiostreamistreamostream运算符重载为完成输入/输出提供了一种方便的途径。重载的左移位运算符(<<)表示流的输(>>)cin、cout、cerr、clogcinistream)算符把整数变量grade(gradeint)cincin>>grade;gradecout是类ostream的对象,它与标准输出设备(通常指显示设备)连在一起。下面的语句用流插入运算符cout把整型变量grade的值从内存输出到标准输出设备上。cout<<grade;gradecerr是类osteam的对象,它与标准错误输出设备连在一起。到对象cerr的输出是非缓冲输出,也就是说插入到cerr中的输出会被立即显示出来,非缓冲输出可迅速把出错信息告诉用户。clogostreamclog即每次插入clogC++ifstreamofstreamfstream/ifstream继承了类istream,类ofstream继承了类ostreamfstreamiostreamC++输出流C++ostreamputwrite(3.5节);输出(3.6.1节(3.6.2节)(3.7.2节)(3.7.6节)(3.7.3节)(3.7.4节)(3.7.7节)。流插入运算符流插入运算符(即重载的运算符<<)可实现流的输出。重载运算符<<是为了输出内部类型的数据项、字符中和指针值。3.9节要详细介绍如何用重载运算符<<输出用户自定义类型的数据项。图3.3中的范例程序用一条流插入语句显示了输出的字符串。图3.4中的范例程序用多条流插入语句显示输出的字符串,该程序的运行结果与图3.3中程序的运行结果相同。//Fig.3.3:figll03.cpp//Outputtingastringusingstreaminsertion.3#include<iostream>4usingnamespaceintmain()cout<<toC++!\n";89 return10}输出结果:WelcometoC++!图3.3//Fig.3.4:figllO4.cpp//Outputtingastringusingtwostreaminsertions.3#include<iostream>usingnamespaceintmain()6{7 cout<<to";8 cout<<"C++!\n";910 return0;11}输出结果:WelcometoC++!图3.4也可以用流操纵算子endl()\n()(3.5)endl发送一个换行符并刷新输出缓冲区(不管输出缓冲区是否已满都把输出缓冲区中的内容立即输出)cout<<flush;3.6节要详细讨论流操纵算子。1//Fig.3.5:fig11_05.cpp2//Usingtheendlstreammanipulator.3#include<iostream.h>usingnamespaceintmain{)6{7 cout<<to";8 cout<<"c++!';9 cout<<endl; //endlinestreammanipulator10return12}输出结果:WelcometoC++!图3.5endl流插入运算符还可以输出表达式的值(见图3.6)1//Fig.3.6:fig11_O6.cpp2//Outputtingexpressionvalues.3#include<iostream.h>usingnamespaceintmain()6{7 cout<<"47plus53is";8//parenthesesnotneeded;usedforclaritycout<<(47+53); //expressioncout<<endt;1213 return14}输出结果:47plus53is100图3.6连续使用流插入/流读取运算符载运<<和>>都可在条句连使用(图3.7)。1 file:// Fig.3.7:fig11_07.cppfile:// CascadlngtheoverlOadGd<<OPeratOr.45 int 6 {7 cout<<"47plus53is"<<(47+53)<<endl;89 return 10 }输出结果:47plus53is100图3.7连续使用重载运算符<<图中多次使用流插入运算符的语句等同于下面的语句:(((cout<<"47plus53is")<<47+53)<<endl);<<cout)(cout<<"47plus53is")它输出一个指定的字符串,并返回对cout的引用,因而使中间括号内的表达式解释为:(cout<<(47+53))它输出整数值100,并返回对cout的引用。于是最右边括号内的表达式解释为:cout<<endl;它输出一个换行符,刷新cout并返回对cout的引用。最后的返回结果未被使用。char*类型的变量C语言式的I/O必须要提供数据类型信息。C++对此作了改进,能够自动判别数据类型。但是,C++char*<<(null)char*类型的字符串,因此使用void*类型来完成上述需求(需要输出指针变量的地址时都可以使用void*类型)3.8char*C++0x0X打头,3.6.1节、.53.7.7节1//Fig.3.8:fig11_08.cpp2//Printingtheaddressstoredinachar*variable3#include<iostream.h>usingnamespaceintmain()6{7 char*string="test";8cout<<ofstringis:"<<string<<ofstaticcast<void*>(string)is:"<<static_cast<void*>(string)<<endl;return13}输出结果:Valueofstringis:testValueofstaticcast<void*>(string)is:Ox00416D50图3.8char*putput函数的连续调用put成员函数用于输出一个字符,例如语句:cout.put('A');将字符A显示在屏幕上。也可以像下面那样在一条语句中连续调用put函数:cout.put('A').put('\n');该语句在输出字符A后输出一个换行符。和<<一样,上述语句中圆点运算符(.)从左向右结合,put成员函数返回调用put的对象的引用。还可以用ASCII码值表达式调用put函数,语句cout.put(65)也输出字符A。4 输入流(>>)tab0(false);)failbit3.73.8流读取运算符3.9cin>>//Fig.3.9:figll_09.cpp//Calculatingthesumoftwointegersinputfromthekeyboard3//withthecinoctandthestream-extractionoperator.4#include<iostream>5usingnamespacestd;6intmain()7{8 intx,9cout<<"Entertwointegers:";cin>>x>>12 cout<<"Sumof"<<x<<"and"<<y<<"is:"13 <<(x+y)<<endl;1415 return16}输出结果:Entertwointegers:3092Sumof30and92is:122图3.9计算用cin和流读取运算符从键盘输入的两个整数值的和>><<3.10()。//Fig.3.10:figlll0.cpp//aprecedenceproblembetweenthestream-insertion3//operatorandtheconditionaloperator.4//Needparenthesesaroundtheconditionalexpression.5#include<iostream.h>usingnamespaceintmain()89 intx,10cout<<"Entertwointegers:";cin>>x>>cout<<x<<(x==y?"is":"isnot")<<"equalto"<<y<<endl;1516 return17}输出结果:Entertwointegers:7 5isnotequalto5Entertwointegers:88isequalto8图3.10避免在流插入运算符和条件运算符之间出现优先级错误我们通常在while0false)3.11(cin>>grade)0(false)。3.ios(istream的类)void*0void*//Fig.3.11:figll_ll.cpp//Stream-extractionoperatorreturningfalseonend-of-file.3#include<iostream.h>usingnamespaceintmain()6{7 intgrade,highestGrade=-1;8cout<<"Entergrade(enterend-of-filetoend):";while(cin>>grade){if(grade>highestGrade)highestGrade=1314 cout<<"Entergrade(enterend-of-filetoend):";15 }16cout<<"\n\nHighestgradeis:"<<highestGrade<<endl;return19}输出结果:Entergrade(enterend-of-filetoend):67Entergrade(enterend-of-filetoend):87Entergrade(enterendoffiletoend):73Entergrade(enterend-of-filetoend):95Entergrade(enterend-of-filetoend):34Entergrade(enterend-of-filetoend):99Entergrade(enterend-of-filetoend):^zHeighestgradeis:99图3.11流读取运算符在遇到文件结束符时返回falsegetgetline不带参数的getget。3.12eofgetputcout序首先输出了cin.eof()0(false)cin(在IBMPC<ctrl>-z表示;在UNIXMacintosh<ctrl>-d)putcoutwhilecin.eof()1(true)cin中不带参数的get成员函数,其返回值是所输入的字符。1//Fig.3.12:figll_12.cpp2//Usingmemberfunctionsget,putandeof.3#include<iostream>usingnamespaceintmain()6{7 char8cout<<"Beforeinput,cin.eof()is"<<cin.eof()<<"\nEnterasentencefollowedbyend-of-file:\n";11while((c=cin.get())!=EOF)cout.put(c14cout<<"\nEOFinthissystemis:"<<c;cout<<"\nAfterinput,cin.eof()is"<<cin.eof()<<endl;return18}输出结果:Beforeinput,cin.eof()is0Enterasentencefollowedbyend-of-file:thegetandputmemberfunctions^zthegetandputmemberfunctionsEOFinthissystemis:-1Afterinputcin.eof()is1图3.12使用成员函数get.put和eofget(istreamget函数。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论