收藏 分享(赏)

C++初学者入门全篇.doc

上传人:tangtianxu1 文档编号:2953348 上传时间:2018-09-30 格式:DOC 页数:384 大小:2.77MB
下载 相关 举报
C++初学者入门全篇.doc_第1页
第1页 / 共384页
C++初学者入门全篇.doc_第2页
第2页 / 共384页
C++初学者入门全篇.doc_第3页
第3页 / 共384页
C++初学者入门全篇.doc_第4页
第4页 / 共384页
C++初学者入门全篇.doc_第5页
第5页 / 共384页
点击查看更多>>
资源描述

1、C+初学者指南第一篇 C+基础如果说有一种语言定义了当今编程的实质,那么它就是 C+。它是高性能软件开发的杰出语言。它的语法已经成为专业编程语言的标准,并且它的设计思想在计算界引起深刻的反响。Java 和 C#语言都是从 C+继承而来的。简而言之,要成为专业的编程人员就意味着要深刻理解 C+。它是现代编程的基础。本篇旨在介绍 C+,包括它的历史,它的设计思想,以及几个最重要的特性。学习一门编程语言最困难的事情就是所有的元素都不是单独孤立存在的。相反,构成语言的各个部分是相互协作,一起工作的。这种相关性使得我们很难讨论 C+的一个方面而不去考虑其它方面。为了克服这个困难,本篇对几个 C+特性进行

2、了简单的介绍,包括 C+程序的通用形式,一些基本的控制语句,以及运算符。本篇不会涉及过多的细节,更注重C+程序中通用的概念。必备技能 1.1 C+历史简介C+是从 C 语言发展而来的。这一点不难理解,因为 C+是构筑的 C 语言的基础之上的。然而,C+是 C 语言的超集。C+扩展并增强了 C 语言,支持面向对象的编程(这点在本篇的后面会进行描述)。C+同时对 C 语言做了改进,包括扩展了例行程序库集。然而大部分的 C+特性是直接从 C 继承而来的。因此,为了充分理解和欣赏 C+,我们必须深入了解 C 语言是如何运作的。C: 现代编程时代的开始C 语言的发明定义了现代编程时代的开始。它的影响不应

3、该被低估,因为它从根本上改变了人们考虑和实现程序的方法。它的设计思想和语法已经影响到了每一个主流的编程语言。C 语言是计算发展的主要的,革命性的推动力之一。C 语言由 Dennis Ritchie 在 DEC PDP-11 电脑上,在 UNIX 操作系统下发明并实现的。C 语言是从一种古老的叫做 BCPL 的语言发展而来。BCPL 是由 Martin Richards 开发的。BCPL 语言对由 Ken Thompson 发明的 B 语言产生着深刻的影响,而 B 语言最终在 20世纪 70 年代发展成 C 语言。 在 C 语言发明之前,计算机语言被设计出来或者是为了进行学术计算,或者是为官方的

4、委员们所使用。而 C 却不同。它是一群真实的程序员设计、实现并开发出来的。它反映了这些人完成编程工作的方法。它的特性是这群实际使用这个语言的人们反复推敲,打磨,测试的结果。因此,C 语言吸引了众多的拥护者,并迅速成为全世界编程人员的选择。C 语言的发展经历了 20 世纪 60 年代的结构化编程的革命。在此之前,大型程序是难以书写的,因为程序的逻辑趋向于退化成“意大利面条式的代码”,充斥着难以理解的,混乱的转跳,函数调用和返回。结构化编程通过增加很好的控制语句,带有局部变量的子程序段和其它的一些改进解决了这个问题。结构化编程使得编写巨大的程序成为了可能。尽管还有别的结构化的编程语言,例如 Pas

5、cal,C 却是第一个功能强大,富于表达,能书写出优美代码的结构化语言。它语法简单易用,并且它的设计思想是程序员掌控一切,而不是语言本身掌控一切,这就使得 C 语言很快拥有了众多的拥护者。我们现在来看这点可能有点难以理解,但是 C 当时确实为编程者带来了他们渴望已久的新鲜空气。因此,C 语言很快就在 20 世纪 80 年代变成了使用最广泛的结构化编程语言。我们需要 C+经过前文的描述,你可能会问,那为什么还要发明 C+呢?既然 C 是很优秀的编程语言,我们为什么还需要别的编程语言呢?这个问题的答案非常复杂。纵观编程技术的发展历史,程序复杂度的增加驱使我们需要更好的方式来管理我们的程序。C+就应

6、运而生了。为了更好地理解增长的程序复杂度与计算机编程语言发展之间的关系,我们需要简单回顾一下计算机编程技术发展的历史。当计算机刚被发明出来的时候,人们使用计算机前面的面板,通过拨动开关来发送二进制的机器指令。这种方式在计算机程序只有几百行的时候还可以工作。随着计算机程序的增大,人们发明了汇编语言,通过使用符号代替机器指令,以便程序员可以处理更大的,更复杂的程序。第一个被广泛使用的计算机语言是FORTRAN。FORTRAN 语言在起初给人的印象是非常深刻的,当时几乎没有语言能实现编写整洁,易于理解的程序。20 世纪 60 年代,结构化编程诞生了,这正是诸如 C 语言一样的语言所鼓励的编程方法。通

7、过结构化的编程方法,很轻松的编写大型程序第一次成为了可能。然而,即使是使用结构化的编程方法,一旦一个项目到达了一定的规模,其复杂度也就超过了程序员所能管理的范围。在 20 世纪 70 年代,很多项目几乎都处于这种境地。为了解决这种问题,出现了一种新的编程方法:面向对象编程。通过使用面向对象编程,程序员可以处理更大的,更复杂的程序。而 C 语言是不支持这种面向对象编程方法的。于是,人们对面向对象的 C 的渴望就直接导致了 C+的诞生。可见,自从计算机发明以来,编程的方式已经发生了巨大的变化。最后一点,尽管 C 是世界上最受欢迎的专业编程语言之一,也有复杂的程序是 C 不能完成的。一旦一个程序的规

8、模达到了一定的大小,其复杂度就会增加,以至于很难从整体上对其进行把握。C+的目的就是突破这种障碍,帮助编程人员理解并管理更大,更复杂的程序。C+的诞生C+由 Bjarne Stroustrup 于 1979 年在位于新泽西州 Murray Hill 的贝尔实验室成功发明。起初它的名字叫“带有类的 C”,后来在 1983 年更名为 C+。Stroustrup 在C 的基础上构建了 C+,因此 C+包括 C 的所有特性和优点。它还继承了 C 的理念:程序员而不是程序掌控一切。有一点必须明确,Stroustrup 并没有创建一个全新的编程语言。相反,它增强了已经高度成功的语言。大多数 Stroust

9、rup 为 C 增加的特性都是为了支持面向对象的编程。从本质上来讲,C+就是支持面向对象的 C。通过在 C 的基础上构建 C+,就实现了到面向对象编程的平滑过渡。C 程序员不必重新学习一门新的语言,只需要学习那些新增的特性,就能收获面向对象编程带来的好处。在设计 C+语言的时候,Stroustrup 清楚地知道在增加支持面向对象编程的特性时,保持原有 C 的特性,包括 C的高效,灵活和 C 的设计理念是非常重要的。幸运的是,他的目标实现了。C+在提供了面向对象的编程优点同时,还保留了 C 的灵活。尽管发明 C+的初衷是为了辅助管理那些大型的程序,但它绝不仅限于此。实际上,C+的面向对象特性可以

10、被有效地引用到实际上任何程序中。C+可以广泛地被用来开发诸如编辑器,数据库,个人文件系统,网络工具,通信程序等,这些都非常常见。由于 C+保留了 C 的高效性,大量的高性能系统软件都是用 C+开发的。同样,C+也经常被用来开发 windows 程序。C+的发展C+被发明后,经过了三次大的修订,每次修订都对语言自身做了增加和改动。第一次和第二修订分别是在 1985 年和 1990 年。第三次修订发生在 C+标准化的过程中。几年前(现在来看,应该是十几年前了),人们开始进行 C+的标准化工作。那时,建立了由美国国家标准研究所(ANSI)和国际标准组织(ISO)合作的标准化组织组。建议标准的第一次草

11、案是在 1994 年 1 月 25 日完成的。在这份草案中,ANSI/ISO 联合委员会保留了 Stroustrup 当初定义的特性,并增加了一些新的特性。总的来说,这份最初的草案反映了当时 C+的情况。在此之后不久,发生了一件事情,促使了联合委员会大大地扩展了该标准:由 Alexander Stepanov 提出的标准模板库的创建。标准模板库是一套我们可以用之处理数据的通用程序的集合。通用模板库很强大,也很简洁优雅。但是它很巨大。在第一次草案之后,委员会曾经投票来决议是否在标准 C+中增加标准模板库。标准模板库的增加使得 C+大大超出了起初定义的范围。对标准模板库和其它一些特性的增加使得 C

12、+标准化的步伐减慢了许多。完全可以说 C+的标准化工作比人们期望的时间要长许多。在整个过程中,C+中加入了许多新的特性,并做了许多小的改动。实际上,由该联合委员会制定的 C+比 Stroustrup 当初设计的 C+要复杂很多。最终的草案在 1997 年 12 月 14 日通过,ANSI/ISO 标准 C+在 1998 年成为现实。这就是人们通常说的标准 C+。本书描述的都是标准的 C+。本书描述的 C+是所有主流 C+编译器,包括微软的 visual C+都支持的 C+。因此本书中的代码和信息是完全可移植的。必备技能 1.2:C+与 Java 和 C#的关系除了 C+之外,还有两个重要的现代

13、编程语言:Java 和 C#。Java 是有 Sun Microsystems 公司开发的,而 C#则是由微软公司开发的。由于人们有时会对 C+与Java 和 C#的关系产生一些混淆,这里有必要对此介绍一下。C+是 Java 和 C#之父。尽管 Java 和 C#都是在 C+的基础上对语言的特性进行了一些增加,删除和改动,但是总体上来说它们三者的语法是几乎相同的。进一步来说,C+所采用的对象模型和Java,C#的都是相似的。最后,三者给人的总体感觉也是非常相近的。这就意味着,一旦学会了 C+,就能很轻易地学习 Java 和 C#。 反之亦然,如果你懂 Java 或者 C#学习 C+也是很简单的

14、。这就是为什么 Java,C#和 C+都是用相同的语法和对象模型了,这也是大量有经验的 C+程序员能顺地过渡到是 Java 或者 C#的原因。它们之间的区别在于各自设计针对的计算环境不同。C+是针对指定类型的 CPU 和操作系统而设计的高性能的语言。例如:如果你想写在 windows 操作系统下,因特尔奔腾系列的 CPU 上运行的程序,那么 C+是最好的选择。专家答疑问:Java 和 C#都实现了跨平台和可移植的编程,C+为什么不能了?答:Java 和 C#之所以能实现跨平台,可移植的编程,而 C+不能是因为它们的编译器生成的目标代码不同。就 C+而言,编译器的输出是机器代码,这是 CPU 可

15、以直接执行的。因此它是紧密和指定的 CPU 以及操作系统相关的。如果想让 C+程序在不同的系统上运行,则需要针对该目标系统进行代码的重新编译。为了让 C+程序可以在不同的环境上运行,就需要生成不同的可执行版本。Java 和 C#是通过把代码编译成伪码,一种中间语言。就 Java 而言,这种伪码是在运行时系统上运行的,这就是 Java 虚拟机。对 C#而言,这就是 CLR(公共语言运行时)。因此,Java 语言的程序可以在任何有 java 虚拟机的环境下运行,C# 的程序可以在任何实现了 CLR 的环境下运行。因为 Java 和 C#的运行时系统处于程序和 CPU 之间,和 C+相比,这就引起了

16、多余的开销。这就是为什么,对等情况下,C+程序比 Java 和 C#程序运行快的原因了。Java 和 C#的开发是为了满足互联网上在线程序的统一编程需求。(C#的设计也是用来简化软件构件的开发)。互联网上连接的是许多不同的 CPU 和操作系统。因此跨平台和可移植性就成了最重要的着眼点。第一个着眼于这个问题的语言就是 Java。Java 语言编写的程序可以在很多不同的环境下运行。因此,Java 程序可以在互联网上自由运行。然而这样做的代价就是牺牲了效率,Java 程序的执行要比 C+程序慢许多。同样的事情也发生在 C#身上。最终分析,如果你想开发高性能软件,就是用 C+。如果你想开发高度可移植的

17、软件,就是用 Java 或者 C#。最后一点:请记住,C+,java 和 C#是用来解决不同问题的。这里并没有那个语言好,那个语言不好的问题,而是那个语言更适合用来完成我们手头工作的问题。练习:1. C+语言是从什么语言发展而来的?2. C+语言产生的主要原因是什么?3. C+语言是 Java 和 C#语言之父,对吗?答案:1. C+是从 C 语言发展而来的。2. 程序复杂性的不断增加是产生 C+语言的主要原因。3. 正确。必备技能 1.3:面向对象的编程 C+的中心是围绕着面向对象的编程。正如前面介绍的那样,面向对象的编程是促进C+产生的主要因素。正是因为这一点,在学习编写简单的 C+程序之

18、前,理解面向对象编程的基本思想是非常重要的。面向对象的编程很好地利用了结构化编程的思想,并增加了一些新的概念,能够更好地组织程序。通常情况下,有两种方式来组织程序:以代码为中心或者以数据为中心。通过结构化的编程技术,程序通常是以代码为中心来组织的。这种方法可以被认为是“代码作用于数据”。面向对象的编程则是以数据为中心。程序以数据为中心进行组织,主要的原则就是“数据控制代码”。在面向对象的语言中,我们定义数据和允许作用于这些数据的例行程序段。因此,数据的类型明确定义了可以作用在这些数据上的操作。为了支持面向对象编程的原则,所有的面向对象语言,包括 C+,都有三个显著的特点:封装,多态和继承。让我

19、们一个一个来学习。封装封装是一种编程机制,它把数据和处理数据的代码捆绑在一起,这可以防止外部程序错误地访问数据和代码。在面向对象的语言中,数据和代码可以通过黑盒子的方式绑定起来,盒子内部是全部必要的数据和代码。当数据和代码以这种方式绑定的时候,此时我们就创建了一个对象。换句话说,一个对象就是支持封装的设备。专家答疑问:我听说过子程序段的学名为方法,那么方法和函数是同一回事情吗?答:通常来说,是的。方法在 Java 里面使用很广泛。C+则中叫做函数,Java 中则被称作方法。C#程序员同样使用方法这个术语。因为它已经广泛地被采用了,所以有时候在C+里面,函数有时候也被称作方法。对于一个对象来说,

20、代码或者数据或者两者都有可能是私有的或者公有的。私有的代码或者数据只能是该对象的其它部分可以访问和感知的。也就是说,私有的代码和或者数据是不能被对象之外的程序段访问的。当代码或者数据是公有的,虽然它是被定义在对象中的,但是程序的其它部分都是可以访问它的。通常情况下,对象的公有部分是用来提供对对象私有元素的可控的访问接口的。C+中最基本的封装单元就是类。一个类定义了对象的通用形式。它同时定义了数据和作用于这些数据的代码。C+使用类来构建对象。对象是类的实例。因此,一个类实际上是构建对象的工厂。类中的数据和代码称为类的成员。更详细一点来说,成员变量,也叫做实例变量,是类定义的数据。成员函数是作用于

21、这些数据的操作。函数在 C+中是针对子程序的术语。多态多态,字面意思就是多种形态的意思。它是一种机制,可以允许一个接口来访问类的通用动作。一个简单的多态性的例子就是汽车的方向盘。方向盘(接口)都是一样的,不管实际中使用了怎样的转向机制。也就是说,不管你的汽车使用的是手工的转向盘,还是动力的转向盘,或者是齿轮转向盘,方向盘的工作效果都是一样的:就是把方向盘往左转,车就会左转,不管使用的是什么样子的转向盘。这种统一接口的好处就是一旦我们知道了如何掌控方向盘,我们就可以开什么类型的车。同样的原理也可以应用在编程上。比如,考虑一个栈,程序可能需要针对三种不同数据类型的栈。一个是针对整型数的,一个是针对

22、浮点型数据的,一个是针对字符的。在这种情况下,栈的实现算法是一致的,只是存储的数据类型是不一样的。在非面向对象的语言中,我们必须创建三个不同的栈的程序,每一个都是用不同的名字。然而,在 C+,通过多态,我们就可以创建一个通用的栈,三种不同的数据类型都可以存储。这样,一旦知道了栈是如何使用的,我们就等于知道了三种不同数据类型的栈的用法。通常,多态的概念经常被表述如下:一个接口,多种方法。意思是说可以通过对一组相关的活动定义一个通用的接口。多态性通过一个接口来阐明动作的通用性,可以帮助我们减少程序的复杂性。编译器针对应用的情况来选择具体应该是那个动作(方法)。程序员不必手工来做这种选择。我们只需要

23、记住并使用这个通用的接口就可以了。继承继承是一个对象可以获取到另外一个对象的属性的过程。继承非常重要,因为它支持了层次化的分类。仔细想想,大多数的知识都是通过层次化的分类来管理的。例如:红色的甜苹果是属于苹果分类的,而苹果分类又是水果分类的一种,水果又是一个更大的类:食物的一种。也就是说,食物有一些特质,比如可以食用,有营养等等,逻辑上来说它的子类水果也是有的。除了这些特质,水果还有特殊的特质,比如多汁,香甜等等,正是这些特质使得水果和其它的食物有所区分。苹果类定义了苹果特有的特质,比如生长在树上,非热带的等等。一个红色香甜的苹果应该继承了它的父类的所有特质,同时也定义了一些使得它和别的苹果区

24、分开来的特质。如果没有层次化的分类,每一个对象都必须显示地定义自己的所有特性。通过使用继承,一个对象只需要定义那些使得它在整个类中显得独特的那些特质。它可以从父类那里继承所有通用的特质。因此正是继承机制使得一个对象成为一个通用类的实例成为可能。专家答疑问:文中说到面向对象的编程是一种有效的进行大程序管理的方法。但是面向对象的编程似乎会增加相对小程序的开销。就 C+而言,这点是真是假?答:假。理解 C+的关键一点是使用 C+可以编写面向对象的程序,但是并不是说必须写面向对象的程序。这一点是 C+和 Java、C#的一个很重要的不同点。 Java 和 C#采用严格的对象模型,所以每个程序,不管其多

25、小,都是面向对象的。C+也提供了该选项。更重要的是,在运行的时候,C+的面向对象特性是透明的,因此,如果存在的话,增加的开销也是很少的。练习:1. 说出面向对象编程的原则。2. C+中,封装的最基本的单元是什么?3. C+中,子程序通常被称作什么?答案:1. 封装,多态和继承是面向对象编程的原则。2. C+中类是封装的基本单元。3. C+中,子程序通常被成为函数。必备技能 1.4:第一个简单的程序现在我们开始编程了。我们通过编译和运行下面的一个简短的 C+程序开始: /* 这是一个简单的 C+程序. 文件名称为 Sample.cpp. */ #include using namespace s

26、td; / C+程序都是从 main()函数开始的 int main() cout cl -GX Sample.cpp 其中-GX 是增强编译选项。在使用 Visual C+命令行编译器之前,你必须先执行 visual C+提供的批处理文件 VCVARS32.BAT。Visual Studio 同时也提供了一个很方便使用命令行的方式:可以通过任务栏的 开始|程序|Microsoft Visual Studio 菜单中的工具列表中的 Visual Studio Command Prompt 菜单来激活命令行。C+编译器的输出是一个可以执行的目标代码。在 windows 环境下,可执行文件的名字和

27、源码文件的名字相同,但是扩展名为.exe。因此,Sample.cpp 的可执行文件为Sample.exe。运行该程序 C+程序编译好之后就可以运行了。既然 C+编译器的输出为可执行的目标代码,那么运行这个程序,只需要在命令行提示符下键入这个程序的名字即可。例如,运行Sample.exe 时,采用如下的命令行 C:.Sample 运行时,程序将显示下面的输出: C+ is power programming. 如果你使用的是集成开发环境,那么你可以从菜单中选择 Run 来运行这个程序。运行的方式也和编译器相关,这点请参考你使用的编译器的操作指南。针对本书中的程序,通常从命令行来编译和运行会简单一

28、些。最后一点:本书中的程序都是基于控制台模式的,而不是基于 windows 模式的。也就是说,这些程序是运行在命令行提示符下的。C+对 windows 编程也是很内行的。实际上,它是 windows 开发时最常用的语言。然而,本书中所有程序都没有使用 windows 的图形化用户界面。这一点的原因也很好理解:windows 编程本质上是很巨大和复杂的,即使是创建一个最小的 windows 框架程序也需要 50 至 70 行代码,而编写能够展示 C+特性的 windows 程序也需要几百行代码。相比之下,基于控制台的程序更短小,通常都是采用基于控制台的程序来学习的。一旦你掌握了 C+,你就能够很

29、轻松地把学习的知识应用到 windows 编程上了。逐行剖析第一个简单的程序 尽管 Sample.cpp 相当短小,但是它却涵盖了几个 C+中常用的关键特性。让我们近距离地研究一下这个程序的每个部分。程序以 /* 这是一个简单的 C+程序. 文件名称为 Sample.cpp. */ 开始,这点是很常见的。就像其它大多数编程语言一样,C+允许程序员对程序的源码进行注释。注释的内容会被编译器忽略掉。注释的目的是给所有读源码的人描述或者解释该程序。就本例子来讲,注释解释了改程序的功能。在更复杂的程序中,注释可以被用来解释程序的每个部分是为什么这样做,以及如何做才能以完成预期的功能。换句说,你可以对程

30、序的功能提供一种详细的描述。在 C+中,有两种注释的方式。刚才看到的叫做多行注释。这种类型的注释以/*开始, 以*/结束。任何处于这两个注释符号之间的内容都会被编译器忽略掉。多行注释可以是一行或者多行的。第二种注释会在后续的程序中看到。接下来的代码是:#include C+语言定义了几个头文件,这些头文件中定义了或者必要的或者有用的信息。该程序就需要头文件中的 iostream 来支持 C+的输入/ 输出系统。该头文件是由编译器提供的。程序中通过#include 来包含头文件。在本书后续章节中,我们会学习到更多的关于头文件和为什么要包含头文件的知识。接下来的代码是: using namespa

31、ce std;这行告诉编译器使用 std 命名空间。命名空间是相对较新的增加到 C+里面的特性。本书后续会对命名空间进行详细的讨论,这里给出一个简单的描述。一个命名空间创建了一个声明域,其中可以放置各种程序元素。在一个命名空间中声明的元素和另外一个命名空间中声明的元素是相互分开的。命名空间可以帮助我们组织大型程序。using 语句通知编译器我们要使用 std 这个命名空间。这是声明了整个标准 C+库的命名空间。通过使用std 这个命名空间,我们访问标准库。(因为命名空间相对比较新,旧的编译器可能不支持。如果你使用的是旧的编译器,请参见附录 B,其中描述了简单的应急措施)程序的下一行是:/ C+

32、程序都是从 main()函数开始的 这一行中使用到了 C+中的第二种注释方式:单行注释。单行注释以/开始,在一行的末尾结束。通常情况下,针对较多的,详细的注释使用多行注释,简单的注释一般使用单行注释。当然,这个也完全是个人编程风格的问题。接下来的一行代码,正如上面的注释一样,是程序执行的入口:int main() 所有的 C+程序都是由一个或者多个函数组成。正如前面解释的那样,一个函数就是一个子程序。每一个 C+函数都必须有个名字,任何 C+程序都必须有一个 main()函数,就像本例子中的一样。main()函数是程序执行的入口,通常也是程序结束的地方。(从技术上来讲,一个 C+程序通过调用

33、main()函数而开始,大多数情况下,当 main()函数返回的时候,程序也就结束了)。该行中的一对括号表示 main()函数代码的开始。main()函数前面的 int 表明了该函数的返回值为 int 类型。后面会介绍到, C+支持几种内建的数据类型,其中就有 int。它代表的是一个整型数。接下的一行是: cout是用来做什么的? 答案: 1.C+程序从 main 函数开始执行。 2.cout 是预先定义好的标识符,它连接到控制台输出。3.它用来包含头文件,可以支持输入/ 输出。必备技能 1.5:第二个简单的程序变量是程序最基本的构成元素。一个变量就是一个被命名的,可以被赋值的内存位置。进一步

34、来说,变量的取值在程序的执行过程中是可以改变的。也就是说变量的内容是可变的,而不是固定的。 下面的程序创建了一个变量叫做 length,赋值 7,并在显示器上输出信息“The length is 7”。/using a variable.#include using namespace std;int main()int length; / 这行是声明一个变量length = 7; / 给变量赋值为 7cout using namespace std;int main()int length ; / 这行定义了一个变量int width ; / 这行定义了另外的一个变量int area; /

35、这行也是定义变量length = 7; / 给变量 length 赋值为 7width = 5; / 给变量 width 赋值为 5area = length*width; /计算面积,把 length 和 width 的乘积赋值给 areacoutusing namespace std;int main ()int length; /声明一个变量int width; / 声明另外的一个变量length =7;/给 lenght 赋值为 7width=5; /给 width 赋值为 5acout 运算符来使用户从键盘输入数据到程序中。这就是 C+中的输入运算符。通常使用下面的形式从键盘获取数据

36、cin var;其中,cin 是另外一个预先定义好的标识符。它代表控制台输入,这是 C+自动支持的。缺省情况下,cin 是和键盘绑定的,它也可以被重定向到其它的设备上。var 代表接收输入的变量。下面重写计算面积的程序,允许用户输入矩形的尺寸:/*用来计算矩形面积的交互式程序*/#include using namespace std;int main()int lenght; / 声明一个变量int width; / 声明另外一个变量cout length; /从键盘输入长度cout width; /从键盘输入宽度cout length; /从键盘输入长度cout 语句提示用户输入数据。ci

37、n 语句读取用户输入的数据,并把值存储在变量 length中。于是,用户键入的数值(就本例中的程序,用户必须输入一个整型数)就被存放在了右侧的变量中(本例中就是 length)。在执行完毕 cin 语句后,变量 length 存放的就是矩形的长度(如果用户键入的是非数字,变量 lenght 的值将会是 0)。提示用户输入宽度和从键盘读取矩形长度的语句工作原理是一样的。一些输出选项 到目前为止,我们一直使用的都是 cout 的最简单的形式。然而,cout 可用来输出更复杂的语句。下面是两个有用的技巧。首先,我们可以使用一个 cout 语句输出多条信息。比如,在计算面积的程序中,我们使用下面的两行

38、来输出面积:cout using namespace std;int main()cout 2.c 缺省地是和键盘绑定。3.n 代表换行字符。其它的数据类型在前面的程序中,我们使用的都是 int 类型的变量。int 类型的变量只能用来存储整型数。当需要存储小数的时候,int 类型的变量就不能使用了。比如,一个 int 类型的变量可以用来存储值 18,但是不能用来存储值 18.3。幸运的是, int 类型只是 C+中定义的几种数据类型之一。C+定义了两种浮点类型来表示小数:float 和 double 类型,它们分别代表单精度和双精度的小数。其中,double 可能是最常用的了。可以采用类似下面

39、的方式来声明一个 double 类型的变量:double result;这里,result 是变量的名称,它的类型是 double 类型的。因为它的类型是浮点类型,因此可以被用来存放诸如 88.56 或者-107.03 之类的数据。为了更好地理理解 int 和 double 类型的区别,可以试一试下面的程序:/* 这个程序展示了 int 类型和 double 类型的区别*/#include using namespace std;int main()int ivar; /声明一个整形的变量double dvar; /声明一个浮点型的变量ivar = 100;/给 ivar 赋值 100dvar

40、 =100.0;/给 dvar 赋值 100.0coutusing namespace std;3.main()函数中声明变量 f 和 m:int main()double f; /存储英尺的长度double m; / 存储转换后的米的数据4.增加输入英尺数据的代码:cout f; /读取英尺数据5.增加进行转换和输出的代码:m= f / 3.28;/转换成米cout using namespace std;int main() double f; / holds the length in feet double m; / holds the conversion to meterscout

41、 f; / read the number of feetm = f / 3.28; / convert to meters cout 11 ) cout 大于= 大于或者等于= 等于!= 不等于注意,等于是两个等号。下面是一个示例程序,它展示了 if 语句的用法:/ Demonstrate the if#include using namespace std;int main()int a,b,c;a = 2;b = 3;if ( a = 0 ) cout = 0 ) cout using namespace std;int main()int cout;for ( count = 1; c

42、ount,=必备技能 1.9 : 使用代码块C+中一个基本的元素就是代码块。一个代码块由两个或者多个语句组成,由一对花括号括起来的。代码块可以作为一个逻辑单元出现在任何单条语句可以出现的地方。例如,代码块可以被使用在 if 语句或者 for 循环中:if ( w using namespace std;int main()double result,n,d;cout n;cout d;/the target of this if is a blockif ( d!= 0 )cout using namespace std;int main()double f; / 用来存储英尺长度double

43、 m; /用来存储转换后的米的值int counter;counter = 0; / 用于统计行数,变量初始化为 0for ( f =1.0; f using namespace std;int main()int result;resutl = abs(-10); /调用函数 abs(),将其返回值赋值给变量 resultcout 是什么?下面的代码是用来做什么的?#include 7. 什么是命名空间?8. 什么是变量?9. 面那个 /些变量的命名是不合法的?a. countb. _countc. count27d. 67counte. if10. 如何创建单行的注释?如何创建多行的注释?

44、11. if 语句的常用形式是怎样的?for 循环的常用形式是怎样的?12. 如何创建代码块?13. 在月球上,重力大约为地球的 17%。编写一个程序,显示一张地球的磅重量对应的在月球上的重量。表格从 1 开始到 100 结束,每 25 磅输出一个空行。14. 木星上的一年(就是木星围绕太阳旋转一周需要的时间)大约为地球上的 12 年。编写一个程序把木星年转换成地球年,由用户指定木星年,允许出现小数的年。15. 当调用函数的时候,程序控制会发生什么变化?16. 编写一个程序,用来计算用户输入的 5 个数据的绝对值的平均值,显示其结果。编程语言的核心就是它的数据类型和运算符。这些元素定义了语言的

45、极限和语言可以完成的功能。正如我们所期望的那样,C+支持大量的数据类型和运算符,这使得它在很多领域都是很合适的编程语言。数据类型和运算符的内容很丰富。这里,我们将以 C+中最基本的数据类型和最常用的运算符开始学习。我们还会进一步研究变量和表达式。为什么数据类型如此重要数据类型如此重要是因为它决定了可以使用的运算符和可以存储的数值的范围。C+中定义了几种数据类型,每种都有各自的特点。由于数据类型不一样,所有的变量在使用之前都必须进行声明。变量的声明包括指定变量的类型。编译器需要这个信息来生成正确的代码。在 C+中没有所谓的“没有类型”的变量。数据类型如此重要的第二个原因是因为这几种基本的类型是和

46、计算机操作的基本对象紧密相关的:字节和字。因此 C+允许我们操作的数据类型是和 CPU 直接操作的类型一样的。这也是为什么 C+能够编写出高效的、系统级的代码的原因之一。基本技能 2.1: C+中的数据类型C+提供的内置数据类型是对应于整型,字符,浮点和布尔类型的值。这也是程序中通常存储和处理数据的方式。在本书后面的章节中会看到,C+允许我们构建更复杂的类型,比如类,结构,枚举,但是它们完全是由内置的类型所构成。C+类型系统的核心就是下面的 7 种基本的数据类型类型 意义char Character 字符wchar_t Wide Character 宽位字符int Integer 整型数flo

47、at Floating Point 单精度浮点数double Double Floating Point 双精度浮点数bool Boolean 布尔类型void Valueless 空类型C+允许一些基本数据类型可以被修饰符修饰,修饰符放置在类型的前面。修饰符改变了基本类型的含义,使得它能满足不同的需要。数据类型的修饰符如下:signedunsigendlongshort修饰符 signed、unsigned、long 、short 都可以用于修饰 int。修饰符 signed 和unsigned 可以用来修饰 char 类型。类型 double 可以被修饰符 long 来修饰。表格 2-1显

48、示了所有有效的基本类型和修饰符的组合。这张表同时还给出了 ANSI/ISO C+中定义的每种类型的最小取值范围。类型 最小取值范围char -127 到 127unsigned char 0 到 255signed char -127 到 127int -32767 到 32767unsigned int 0 到 65535signed int 和 int 的一样short int -32767 到 32767unsigned short int 0 到 65535signed short int 和 short int 的一样long int -2147483647 到 2147483647

49、signed long int 和 long int 的一样unsigned long int 0 到 4294967295float 1E-37 到 1E+37 6 位精度double 1E-37 到 1E+37 10 位精度long double 1E-37 到 1E+37 10 位精度表格 2-1 ANSI/ISO C+标准中定义的所有数字的数据类型和它们的最小取值范围注意上表中的最小取值范围仅仅是最小的取值范围。C+编译器是允许对这些最小的取值范围进行扩展的,事实上大部分编译器都进行了扩展。因此 C+数据类型的取值范围是和实现相关的。比如,在使用二进制补码的计算机上(几乎所有的计算机都是使用二进制补码的),一个整型数的取值范围至少是 -32768 到 32767。但是无论在什么环境下,short int 的取值范围都是 int 类型的子域,而

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报