书签 分享 收藏 举报 版权申诉 / 149
上传文档赚钱

类型C++课件:第1章 C++简单程序设计.ppt

  • 上传人(卖家):罗嗣辉
  • 文档编号:2039996
  • 上传时间:2022-01-19
  • 格式:PPT
  • 页数:149
  • 大小:754KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《C++课件:第1章 C++简单程序设计.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    C+课件:第1章 C+简单程序设计 C+ 课件 简单 程序设计
    资源描述:

    1、1.1 C+语言概述语言概述1.2 基本数据类型和表达式基本数据类型和表达式1.3 数据的输入与输出数据的输入与输出1.4 程序的基本控制结构程序的基本控制结构 1.1.1 从从C到到C+ C+语言是从C语言发展演变而来的,因此在介绍C+语言之前,我们首先介绍一下C语言。C语言最初是美国贝尔实验室的戴尼斯M利奇(Dennis. M. Ritchie)在B语言基础上开发出来的,并于1972年在一台PDP11计算机上实现了最初的C语言。目前,比较流行的 C语言版本基本上都是以ANSI C为基础的。 C语言具有以下优点: 语言简洁灵活。 运算符和数据结构丰富,具有结构化控制语句,程序执行效率高。 与

    2、高级语言相比,具有可以直接访问物理地址,能进行位运算的优点。 与汇编语言相比,又具有良好的可读性和可移植性。 尽管如此,C语言毕竟是一个面向过程的编程语言,因此与其它面向过程的编程语言一样,已经不能满足运用面向对象方法开发软件的需要。C+语言便是在C语言基础上为支持面向对象的程序设计而研制的一个通用的程序设计语言,它是在1980年由贝尔实验室的Bjarne Stroustrup博士创建的。C+包含了整个C,C是建立C+的基础。C+包括C的全部特征、属性和优点,同时,C+添加了对面向对象编程的完全支持。 1.1.2 一个简单的C+程序 现在,我们来看一个简单的程序实例。例1-1是一个面向过程的程

    3、序,我们只是通过这个程序看一看,计算机程序是个什么样子,人们如何通过程序来控制计算机的操作。 【例1-1】 一个简单的C+程序例题。 #include void main(void) couthello!n; coutI am a student.n; 这里main是主函数名,函数体用一对大括号括住。C+程序由函数构成。在C+程序中,必须有且只能有一个名为main( )的函数,因为程序总是从main( )开始执行的。main( )函数之前的void表示main( )函数没有返回值(关于函数的返回值将在第2章介绍)。程序由语句组成,每条语句由分号“;”作为结束符。cout是一个输出流对象,它是C

    4、+系统预定义的对象,其中包含了许多有用的输出功能。输出操作由操作符“”来表达,其功能是将紧随其后的双引号中的字符串输出到标准输出设备(显示器)上。在第9章中将对输出流做详细介绍,在这里,读者只要知道这段程序可以实现在显示器上输出 hello! I am a student. 就可以了。 程序中的 include iostream.h 的作用是在编译之前,将文件iostream.h中的代码嵌入到程序中该指令所在的地方。作为程序的一部分, iostream.h文件中声明了程序所需要的输入和输出操作的有关信息。cout和“”操作的有关信息就是在该文件中声明的。由于这类文件常被嵌入在程序的开始处,所以

    5、称之为头文件。在C+程序中如果使用了系统中提供的一些功能,就必须嵌入相关的头文件。 当我们编写完程序文本后,要将它存储为后缀为 .cpp的文件,此文件称为C+源文件,再经过编译系统的编译、连接后,最后产生出后缀为 .exe的可执行文件。通过以上程序可以看出,C+的程序结构由编译预处理、程序主体和注释组成,其特点如下: 每个以符号“”开头的行,称为编译预处理语句。编译预处理是C+组织程序的工具。有关include语句的作用及其使用方法,将在第5章进行详细介绍。 一个C+程序可以由一个或多个函数组成。任何一个完整的C+程序,都必须包含一个且只能包含一个名为main( )的函数,程序总是从main(

    6、 )函数开始执行,而不管main( )函数处于程序的什么位置。 函数体应由“”括起来。函数体一般包括变量的定义部分和执行部分。所有的变量要先定义后使用。 注释是程序员为读者写的说明,是提高程序可读性的一种手段。一般可将注释分为两种:序言注释和注解注释。前者用于程序开头,说明程序或文件的名称、用途、编写时间、编写人以及输入、输出等,后者用于程序难懂的地方。 C+的注释为“/”之后的内容,直到换行。注释仅供阅读程序使用,是程序的可选部分。在生成可执行程序之前,C+忽略注释,并把每个注释都视为一个空格。另外,C+还兼容了C语言的注释。 每个语句和数据定义的后面都要有一个分号。这一点初学者尤其要注意。

    7、 main函数名和关键字(如void、int、float等)都是小写字母构成。C+程序中的标识符是大小写“敏感”的,所以,在书写标识符的时候要注意其大小写。 1.1.3 字符集 C+语言的字符集由下述字符构成: 英文字母:AZ,az 数字字符:09 特殊字符:空格!#%&*_(下划线)+=:- / ? ;. ( ) 1.1.4 词法记号 词法(语句)记号是构成语句的最小单元,这里我们介绍C+的标识符、关键字、文字、运算符、分隔符和空白符。 1标识符 标识符是程序员声明的字符序列,它命名程序正文中的一些实体,如函数名、变量名、类名、对象名等。C+标识符的构成规则如下: 以大写字母、小写字母或下划

    8、线(_)开始。 可以由大写字母、小写字母、下划线(_)或数字09组成。 大写字母和小写字母代表不同的标识符。 不能是C+关键字。 例如,Richad、red_line、_Nol都是合法的标识符,而No.1、1st则是不合法的标识符。 在标识符的命名中要特别注意:C+是大小写敏感的,即大写和小写字母被认为是不同的字母。例如,标识符something、Something、SOMETHING、SomeThing都被视为不同的名字。 2. 关键字 关键字是C+预定义好的标识符,这些标识符对C+编译系统有着特殊的含义。如例1-1中的void,后面将逐步介绍到的数据定义语句int、float、long及d

    9、ouble等等,它们都是C+的关键字。 3. 文字 文字是在程序中直接使用符号表示的数据,包括数字、字符、字符串和布尔文字。在本章1.2节中将详细介绍各种文字。 4. 操作符(运算符) 操作符是用于实现各种运算的符号,例如、*、等。在本章1.2节及后续章节中将详细介绍各种操作符。 5. 分隔符 分隔符用于分隔各个词法记号或程序正文。C+的分隔符如下: ( ) ,:; 这些分隔符不表示任何实际的操作,仅用于构造程序。例如,“ ”用于分隔函数体,“;”作为语句的分隔符,其它分隔符的具体用法会在以后相应的章节中介绍。 6. 空白符 在程序编译时的词法分析阶段将程序正文分解为词法记号和空白。空白是空格

    10、、制表符(TAB键产生的字符)、换行符(Enter键所产生的字符)和注释的总称。 空白符用于指示词法记号的开始和结束位置,但除了这一功能之外,其余的空白将被忽略。因此,C+程序可以不必严格地按行书写,凡是可以出现空格的地方,都可以出现换行。例如: int j; 与 int j; 或与 int j ; 是等价的。但是尽管如此,我们在书写程序时,仍要力求清晰、易读。因为一个程序不仅要让机器执行,还要让人阅读的同时便于修改、维护。 程序处理的对象是数据。数据有许多种类,例如数值数据、文字数据、图像数据以及声音数据等,但其中最基本也是最常用的是数值数据和文字数据。 无论什么数据,在对其进行处理时都要先

    11、存放在内存中。显然,不同类型的数据在内存中的存放格式也不相同,甚至同一类数据,为了处理方便,也可以使用不同的存储格式。例如,数值数据其存储格式又可以分为整型、长整型、浮点型和双精度型等几种类型;文字数据也可以分为单个字符和字符串。 我们编写计算机程序的目的,就是为了解决客观世界中的现实问题。所以,高级语言中提供了丰富的数据类型和运算符。C+中的数据类型分为基本类型和非基本类型,见图1-1。基本类型是C+编译系统内置的,非基本类型也称为用户定义数据类型,即用户自己定义的数据类型,本节我们首先介绍基本数据类型。图1-1 C+ 的数据类型 1.2.1 基本数据类型 一个程序要运行,就要先描述算法。描

    12、述一个算法应先说明算法要用的数据,数据以变量或常量的形式来描述。每个变量或常量都有数据类型。 变量是存储信息的单元,它对应于某个内存空间。为了便于描述,计算机高级语言中都用变量名来表示其内存空间,所以,程序能在变量中存储值和取出值。 在定义变量时,说明变量名和数据类型(如int、float)就是告诉编译器要为变量分配多少空间,以及变量中要存储什么类型的值。数据类型的定义确定了其内存所占空间大小,也确定了其表示范围。表1-1列出了基本数据类型的取值范围。 在不同的系统中,每个变量类型所占的字节数目可能有所不同,表1-1里列出的是在VC+6.0编译环境中的情况(也是目前大多数编译环境中的情况)。表

    13、1-1 常用基本数据类型描述 类 型说 明长度表 示 范 围备 注bool逻辑型1false,true char字符型1-128127-27(27-1)unsigned char无符号字符型10255 0(28-1)short短整形2-3276832767-215(215-1)unsigned short无符号短整型20655350(216-1)int整型4- 2 1 4 7 4 8 3 6 4 8 2147483647-231(231-1)unsigned int无符号整型4042949672950(232-1)long长整型4- 2 1 4 7 4 8 3 6 4 8 2147483647

    14、-231(231-1)unsigned long无符号长整型4042949672950(232-1)float浮点型4-3.410383.410387位有效位double双精度8-1.7103081.71030815位有效位long double长双精度8-1.7103081.71030815位有效位 1.2.2 常量 所谓常量,是指在程序运行的整个过程中其值始终不可改变的量。例如,68、3.5、A、hello! 都是常量。常量有以下几种。 1整型常量 整型常量即以数码形式出现的整数,包括正整数、负整数和零。整型常量的表示形式有十进制、八进制和十六进制。十进制整型常量的一般形式与数学中我们所熟

    15、悉的表示形式是一样的: 若干个09的数字即符号加若干个09的数字,但数字部分不能以0开头,正数前边的正号可以省略。 八进制整型常量的数字部分要以数字0开头,一般形式为 0若干个07的数字 十六进制整型常量的数字部分要以ox开头,一般形式为 0 x若干个09的数字及AF的字母(大小写均可) 整型常量可以用后缀字母L(或l)表示长整型,用后缀字母U(或u)表示无符号型,也可同时使用后缀L和U(大小写无关)。 例如,123、0123、- 0 x5af都是合法的常量形式 2实型常量 实型常量又称浮点小数。在C+语言中,实型常量只使用十进制表示,有两种表示形式:一般形式和指数形式。一般形式:例如,16.

    16、5、-13.5等。 指数形式:例如,0.565E2表示0.565102,-34.4E-3表示-34.410-3,其中,字母E可以大写或小写。当以指数形式表示一个实数时,整数部分和小数部分可以省略其一,但不能都省略。例如,.234E-1和12.E2都是正确的,但不能写成E-3这种形式。 实型常量默认为double型,如果后缀为F(或f)则为float型。 3. 字符常量 字符常量是单引号括起来的一个字符,如 a、G、? 、$ 等。 另外,还有一些字符是不可显示字符,也无法通过键盘输入,例如响铃、换行、制表符、回车等等。这样的字符常量该如何写到程序中呢?C+提供了一种称为转义序列的表示方法来表示这

    17、些字符,表1-2列出了C+预定义的转义序列。表1-2 C+预定义的转义序列字符形式ASCII码(十六进制)功 能n0A换行t09横向跳格(即跳到下一个输出区)v0B竖向跳格b08退格r0D回车a07响铃5C反斜杠字符“”27单引号22双引号dddddd(八进制)1到3位八进制数所代表的字符xhhHh1到2位十六进制数所代表的字符 4. 字符串常量 字符串常量简称字符串,是用一对双引号括起来的字符序列。例如,China、1234 都是字符串常量。字符串与字符是不同的,字符串在内存中的存放形式是:按串中字符的排列次序顺序存放对应字符的ASCII码,每个字符占一个字节,并在字符串末尾添加 0作为结束

    18、标记。图1-2是字符数据及其存储形式(十六进制)的举例。从图1-2中可以看出,字符串 a 与字符 a 是不同的。 5. 布尔型常量 布尔型常量只有两个:false(假)和true(真)。 图1-2 字符数据的存储形式 1.2.3 变量 在程序的执行过程中其值可以变化的量称为变量,变量需要用标识符来命名。就像常量具有各种类型一样,变量也具有相应的类型。变量在使用之前需要首先声明其类型和名称。在同一语句中可以声明同一类型的多个变量。变量声明的形式如下: 变量名1,变量名2,变量名n; 在程序运行时系统会给每一个声明过的变量分配内存空间,用于存放对应类型的数据,因而变量名也就是对相应内存单元的命名。

    19、在声明一个变量的同时,也可以给它赋以初值,而这实质上就是给对应的内存单元赋值。例如: int a=3; float f=3.45; char c=b; 有一点值得注意,虽然C+ 中有字符串常量,却没有字符串变量。那么,用什么类型的变量来存放字符串呢?在后面的章节,我们会介绍用字符数组来存储字符串常量。 1.2.4 引用 程序设计语言的进化使用户从被迫解决细节问题中解脱出来,而转向允许用户花更多的时间来考虑“大的蓝图”。根据这种精神,C+包含了一个称为引用的特性。本小节仅仅介绍了引用的基本概念,有关更详细的内容在后面章节会陆续介绍,到时读者就会掌握引用的使用方法。 引用是个别名,当建立引用时,程

    20、序用另一个变量或对象(目标)的名字来对其进行初始化。自此,引用作为目标的别名而使用,对引用的改动实际是对目标的改动。 引用的声明形式为 &引用名=目标名 或 & 引用名=目标名 其中: 引用名是为引用型变量所起的名字,它必须遵循变量的命名规则。 前面的数据类型就是它所引用目标的数据类型。 在此要特别说明的是,引用在声明时必须进行初始化,即指出该引用是哪一个对象的别名。这里的目标名可以是变量名,也可以是以后将要介绍的对象名。而且引用一旦声明,就以对应目标的内存单元地址作为自己的地址,并且不再改变,从一而终。 例如,引用一个整型变量: int someInt; int& rInt=someInt;

    21、 声明rInt是对整数的引用,初始化为引用someInt。在这里,要求someInt已经声明或定义。 引用不是值,不占存储空间。声明引用时,目标的存储状态不会改变。 【例1-2】 建立和使用引用例题。#includevoid main( )int someInt;int& rInt=someInt;someInt=6;coutsomeInt:someIntendl;coutrInt:rIntendl;rInt=7;coutsomeInt:someIntendl;coutrInt:rIntendl;程序运行结果为someInt:6rInt:6someInt:7rInt:7 在上述程序中,引用rI

    22、nt用someInt来初始化。以后,无论改变someInt或rInt,实际上都是指someInt,两个的值都一样。对引用的理解可以见图1-3。图1-3 引用与变量的关系 6 someInt rInt 1.2.5 运算符与表达式 在任何高级程序设计语言中,表达式都是最基本的组成部分,也就是说,程序中的大部分语句是由表达式构成的。通常,当我们要进行某种计算时,都要首先列出算式,然后求解其值。利用C+语言编写程序求解问题时也是这样。 可以简单地将表达式理解为用于计算的公式,它由运算符(例如+、-、*、)、运算对象(也称操作数,可以是常量、变量等等)和括号组成。执行表达式所规定的运算,所得到的结果值便

    23、是表达式的值。例如,ab、x/y都是表达式。 表达式在使用时要注意以下几点: 一个常量或标识对象的标识符是一个最简单的表达式,其值是常量或对象的值。 一个表达式的值可以用来参与其它操作,即用作其它运算符的操作数,这就形成了更复杂的表达式。 包含在括号中的表达式仍是一个表达式,其类型和值与未加括号时的表达式相同。 C+语言中定义了丰富的运算符,如算术运算符、关系运算符、逻辑运算符等等,有些运算符需要两个操作数,使用形式为 运算符 运算符具有优先级与结合性。当一个表达式包含多个运算符时,先进行优先级高的运算,再进行优先级低的运算。如果表达式中出现了多个相同优先级的运算,运算顺序就要看运算符的结合性

    24、了。所谓结合性,是指当一个操作数左右两边的运算符优先级相同时,按什么样的顺序进行运算,是自左向右,还是自右向左。例如,我们熟悉的算术表达式6+5-2中,“+”、“-”是同级运算符,那么是先算5-2,还是先算6+5?这就取决于算术运算符的结合性。由于算术运算符的结合性为自左向右,所以应先算6+5,然后再算11-2。 1算术运算符与算术表达式 C+中的算术运算符包括基本的算术运算符和自增、自减运算符。由算术运算符、操作数和括号构成的表达式称为算术表达式。 基本算术运算符有:+(加)、-(减或负号)、*(乘)、/(除)、%(取余)。其中“-”作为负号时为一元运算符,其余都为二元运算符。这些基本算术运

    25、算符的意义与数学中相应符号的意义是一致的。它们之间的相对优先级关系与数学中的也是一致的,即先乘除、后加减,同级运算自左向右进行。使用算术运算符要注意以下几点: “%”是取余运算,只能用于整型操作数。表达式a%b的结果为a/b的余数。“%”的优先级与“/”相同。 当“/”用于两整型操作数相除时,其结果取商的整数部分,小数部分被自动舍弃。因此,表达式1/2的结果为0,这一点需要特别注意。 C+中的“+”(自增)、“-”(自减)运算符是使用方便且效率很高的两个运算符,它们都是一元运算符。这两个运算符都有前置和后置两种使用形式 (例如+i与i-)。 无论写成前置或后置的形式,它们的作用都是将操作数的值

    26、增1(减1)后,重新写回该操作数在内存中的原有位置。所以,如果变量i原来的值是1,计算表达式i+后,表达式的结果为2,并且i的值也被改变为2。但是,当自增、自减运算的结果要被用于继续参与其它操作时,前置与后置时的情况就完全不同了。例如,如果i的值为1,则下列两条语句的执行结果是不一样的: couti+; cout+i; 2赋值运算符与赋值表达式 C+提供了几个赋值运算符,最简单的赋值运算符就是“=”。带有赋值运算符的表达式被称为赋值表达式。例如,m=m+6就是一个赋值表达式。赋值表达式的作用就是将等号右边表达式的值赋给等号左边的对象。赋值表达式的类型为等号左边对象的类型,表达式的结果为等号左边

    27、对象被赋值后的值,运算的结合性为自右向左。请看下列赋值表达式的例子。 n=1 表达式值为1。 a=b=c=2 这个表达式从右向左运算,在c被更新为2后,表达式c=2的值为2,接着b的值被更新为2,最后a被赋值为2。 a=3+(c=4) 表达式值为7,a的值为7,c为4。 a=(b=5)+(c=6) 表达式值为 11,a为 11,b为5,c为6。 除了“=”以外,C+还提供了10种复合的赋值运算符:+=,- =,*=,/=,%=,=,&=,=,|=。其中,前五个运算符是赋值运算符与算术运算符复合而成的,后五个是赋值运算符与位运算符复合而成的。关于位运算,稍后再做介绍。这里10种运算符的优先级与“

    28、=”相同,结合性也是自右向左。现在举例说明复合赋值运算符的功能。b+=2/等价于 b=b+2 x*=y+3/等价于 x=x*(y+3)x+=x-=x*x /等价于x=x+(x=x-x*x) 如果在赋值表达式后面加上分号,便成为了赋值语句。例如: b=b+2; 便是一个赋值语句,它实现的功能与赋值表达式相同。赋值表达式与赋值语句的不同点在于:赋值表达式可以作为一个更复杂表达式的一部分,继续参与运算;而赋值语句不能。 3. 逗号运算符与逗号表达式 在C+中,逗号也是一个运算符,它的使用形式为 , 求解顺序为,先求解表达式1,再求解表达式2,最后求解表达式n的值。逗号表达式的最终结果为表达式n的值。

    29、例如: x=2*5,x*4 表达式的结果为40。 4关系运算符和关系表达式 关系运算符即比较符。关系运算符及其优先次序为 (小于)、(大于)、 =(大于等于)、= =(等于)、! =(不等于) 优先级相同(较高) 优先级相同(较低) 用关系运算符将两个表达式连接起来就是关系表达式。关系表达式是一种最简单的逻辑表达式。例如: x5 x+y=20 c=a+b 都是关系表达式。注意,“= =”(等于)是连续的两个等号,不要误写为赋值运算符“=”。 5逻辑运算与逻辑表达式 只有简单的关系比较是远不能满足编程需要的,我们还需要用逻辑运算符将简单的关系表达式连接起来构成较复杂的逻辑表达式。逻辑表达式的结果

    30、类型也为bool,值只能为true或false。C+中的逻辑运算符及其优先次序为 “!”是一元运算符,使用形式是:!操作数。非运算的作用是对操作数取反。如果操作数a的值为true,则表达式!a的值为false;如果操作数a的值为false,则表达式!a的值为true。 “&”是二元运算符。“&”运算的作用是求两个操作数的逻辑与。只有当两个操作数的值都为true时,与运算的结果才为true,其它情况下与运算的结果均为false。 “|”也是二元运算符。“|”运算的作用是求两个操作数的逻辑或。只有当两个操作数的值都为false时,或运算的结果才为false,其它情况下或运算的结果均为true。逻辑

    31、运算符的运算规则可以用真值表来说明。表1-3给出了操作数a和b值的各种组合以及逻辑运算的结果。 例如,假设a=7,b=5,x=20,y=30,则逻辑表达式(ab)&(xy)的值为false。表1-3 逻辑运算符的真值表ab!aa&ba|btruetruefalsetruetruetruefalsefalsefalsetruefalsetruetruefalsetruefalsefalsetruefalsefalse 6. 条件运算符与条件表达式 条件运算符“?”是C+中唯一的三元运算符,它能够实现简单的选择功能。条件表达式的形式为 ?: 其中,表达式1的值必须是bool类型,表达式2和表达式3

    32、的值可以是任何类型。 条件表达式的执行顺序是:先求解表达式1。若表达式1的值为true,则求解表达式2,表达式2的值为条件表达式的结果;若表达式1的值为false,则求解表达式3,表达式3的值为条件表达式的结果。 注意:条件运算符的优先级高于赋值运算符,低于逻辑运算符;结合方向为自右向左。 例如,设x、a和b是整型变量,则语句 x=(ab)?a:b; 的功能是先求出整数a和b中较小数的值后,赋给变量x。 7. sizeof操作符 sizeof运算符是用来计算某种数据类型在内存中所占的字节数。该操作符使用的语法形式为 sizeof(类型名) 或 sizeof(表达式) 注意:sizeof(表达式

    33、)仅仅计算“表达式”的结果类型所占的字节数,并不对括号中的表达式本身求值。 8. 位运算 一般的高级语言处理数据的最小单位只能是字节,C+语言却能对数据按二进制位进行操作。在C+中提供了六个位运算符,可以对整数进行位操作。 1) 按位与(&) 按位与操作的作用是将两个操作数对应的每一位分别进行逻辑与操作。例如,计算3&5: 3: 00000011 5:(&) 00000101 3&5: 00000001 8. 位运算 一般的高级语言处理数据的最小单位只能是字节,C+语言却能对数据按二进制位进行操作。在C+中提供了六个位运算符,可以对整数进行位操作。 1) 按位与(&) 按位与操作的作用是将两个

    34、操作数对应的每一位分别进行逻辑与操作。例如,计算3&5: 3: 00000011 5:(&) 00000101 3&5: 00000001 3) 按位异或() 按位异或操作的作用是将两个操作数对应的每一位进行异或。具体运算规则是:若对应位相同,则该位的运算结果为0;若对应位不同,则该位的运算结果为1。 例如,计算071052: 071: 00111001 052:()00101010 071052: 00010011 可以看出:与“1”相异或,具有取反的作用;与“0”相异或,维持不变。使用按位异或操作可以将操作数中的若干指定位取反。如果使某位与0异或,结果是该位的原值;如果使某位与1异或,则结

    35、果与该位原来的值相反。 例如,要使01111010低四位翻转,可以与00001111进行异或: 01111010 () 00001111 01110101 4) 按位取反() 按位取反是一个单目运算符,其作用是对一个二进制数的每一位取反。例如: 025:00010101 025:11101010 5) 移位 C+中有两个移位运算符左移运算(),都是二元运算符。移位运算符左边的操作数是需要移位的数值,右边的操作数是左移或右移的位数。左移是按照指定的位数将一个数的二进制值向左移位。 左移后,低位补0,移出的高位舍弃。右移是按照指定的位数将一个数的二进制值向右移位。右移后移出的低位舍弃。如果是无符号

    36、数则高位补0;如果是有符号数,则高位补符号位。 下面我们看两个例子。 如果有char型变量a的值为-8,则a在内存中的二进制补码值为11111000,于是表达式a2的值为-2。图1-4说明了移位操作的过程。 表达式22的移位操作过程 11111000 1111100011111110 值得注意的是:移位运算的结果是位运算表达式(a2和21)的值,移位运算符左边表达式的变量值本身并不会被改变。图1-5 2*运算符外,其余的都在本章介绍。表1-4 C+中运算符的优先级与结合性优先级运 算 符结合性1 () . - 后置+ 后置-左右2前置+ 前置- sizeof * +(正号) -(负号) !右左

    37、3(强制转换类型)右左4* -*左右5* / %左右6+ -左右7左右8 = 左右9= !=左右10&左右11左右12|左右13&左右14|左右15?:右左16= *= /= %= += -= = &= = |=右左17,左右 1.2.6 数据类型转换 当表达式中出现了多种类型数据的混合运算时,首先需要进行类型转换,其次再计算表达式的值。表达式中的类型转换分为两种:隐含转换和强制转换。 1隐含转换 在混合运算时,对于二元运算符要求两个操作数的类型一致。若参加运算的操作数类型不一致,系统自动对数据进行转换(即隐含转换)。具体的规则如下。 算术运算和关系运算转换的基本原则是将低类型数据转换为高类型

    38、数据。类型越高数据的表示范围越大,精度也越高,所以这种转换是安全的。各种类型的高低顺序如下: char short int unsigned long unsigned-long float double 低 高 逻辑运算符要求参与运算的操作数必须是bool型,如果操作数是其它类型,则系统自动将其转换为bool型。转换方法是:非0数据转换为true,0转换为false。 位运算的操作数必须是整数。当二元位运算的操作数是不同类型的整数时,编译系统会自动进行类型转换。 赋值运算要求左值(赋值运算符左边的值)与右值(赋值运算符右边的值)的类型相同。若类型不同,系统会自动进行类型转换。但这时的转换不适

    39、用上述的转换规则,而是一律将右值类型转换为左值类型。下面的程序段说明了类型转换的规则:float fVal;double dVal;int iVa1unsigned long ulVal;dVal=iVal * ulVal; /iVal被转换为unsigned long /乘法运算的结果被转换为doubledVal=ulValfVal;/ulVal被转换为float /加法运算的结果被转换为double 2强制类型转换 强制类型转换又称为显式转换,是通过类型标识符和括号来实现的,其语法形式有两种: (表达式) 或 (类型标识符) 强制类型转换的作用是将表达式的结果类型转换为类型标识符所指定的类

    40、型。 例如:float z9.74,fraction_part;int whole_part;whole_part=int(z); /将float型转换为int型时,取整数部分,舍弃小数部分fraction_part=z-int(z)/用z减去其整数部分,得到小数部分使用强制类型转换时,应该注意: 从上面的例子中可以看到,将高类型数据转换为低类型数据时,数据精度会受到损失。 这种转换是暂时的、一次性的。例如,int(z)只是将float型变量z的值取出来,临时转换为int型,然后赋给whole_part。 而变量z仍是原来的浮点类型值。 1.3.1 I/O的书写格式 C+数据的输入与输出是通过

    41、I/O流来实现的,I/O流输入或输出的是一系列字节。当程序需要在屏幕上显示输出时,可以使用插入符“”向cout输出流中插入字符。cout是预定义的流类对象,“”是预定义的插入符,格式如下: cout 表达式表达式 例如,语句 cout”从cin输入流中抽取字符,格式如下: cin表达式表达式cin是预定义的流类对象,“”是预定义的提取符。例如: int a; char c; cinac; 要求从键盘上输入两个变量的值,两数之间以空格分隔。若输入 4 8 这时,变量a获取值为4,变量b获取值为8的ASCII值38(十六进制)。因为变量c的数据类型为char,cin能够知道输入的变量类型。 1.3

    42、.2 简单的I/O格式控制 从上面的介绍中可以看出,当我们用cin、cout进行数据的输入和输出时,无论处理的是什么类型的数据,都能够自动按照默认格式处理。但这还是不够,我们仍经常需要设置特殊的格式。设置格式有很多方法,有关内容将在第9章做详细介绍,本节只介绍最简单的格式控制。 C+的I/O流类库提供了一些控制符,可以直接嵌入到输入/输出语句中来实现I/O格式控制。使用格式控制符首先必须在源程序的开头包含iomanip.h。表1-5中列出了几个常用的I/O流类库格式控制符。表1-5 常用的I/O流控制符控 制 符含 义Dec数值数据采用十进制Hex数值数据采用十六进制Oct数值数据采用八进制W

    43、s提取空白符Endl插入换行符,并刷新流Ends插入空字符setprecision(int)设置浮点数的小数位数(包括小数点)setw(int)设置域宽 在使用setw(n)时要注意: 如果一个输出量需要比setw(n)确定的字符数更多的字符,则该输出量将使用它所需要的宽度。例如: float amount=3.14159; coutsetw(4)amountendl; 其运行结果为3.14159。它并不按4位宽度,而是按实际宽度输出。 setw(n)仅仅影响下一个数值输出,换句话说,使用setw设置的间隔方式并不保留其效力。例如: coutsetw(8)1020endl; 运行结果为 -10

    44、20 运行结果中的下划线表示空格整数20并没有按宽度8输出。setw( )的默认宽度为0,意思是按输出数值表示的宽度输出,所以20就紧挨10了。 【例1-3】 I/O格式控制例题。 按十六进制、八进制和十进制的格式输出数据例题。这三个控制符都是在iostream.h定义的,所以无需加入头文件iomanip.h。 #include void main( ) int number=1001;couttDecimal:decnumberendltHexadecimal:hexnumberendltOctal:octnumbery) coutx; elsecouty; 实现了从x和y中选择较大的一个输

    45、出。if语句中的语句2可以为空。当语句2为空时,else可以省略,成为如下形式: if (表达式) 语句1 例如,若ch字符等于字符b,则响铃: if(ch= =b)couta; 【例1-4】 输入一个年份,判断是否闰年。 分析:闰年的年份可以被4整除而不能被100整除,或者能被400整除。因此,首先输入年份存放到变量year中,如果表达式(year%4=0&year%100!=0)|(yeax400=0)的值为true,则为闰年;否则就不是闰年。 源程序: #include void main( ) int year;bool IsLeapYear;coutyear;IsLeapYear=(

    46、year%4=0&year%100!=0)|(year%400=0);if(IsLeapYear)coutyear is a leap yearendl;else coutyear is not a leap yearendl; 程序运行结果为 Enter the year:2000 2000 is a leap year 1.4.2 多重选择结构 有很多问题是一次简单的判断所解决不了的,需要进行多次判断选择。这可以有以下几种方法。 1嵌套的if语句 形式1: if (表达式1) if (表达式2) 语句1 else语句2 else if (表达式3) 语句3 else 语句4 形式2: if

    47、 (表达式1) 语句1 elseif (表达式2) 语句2 elseif (表达式3) 语句3 else语句n+1 可以看出,形式1的嵌套发生在if及else分支,形式2的嵌套仅发生在else分支。形式2的ifelse if语句的执行顺序如图1-8所示。图1-8 ifelse if语句流程图 无论是何种形式,应当注意: if与else的配对关系。else总是与它上面最近的if配对。 语句1、2、3、4、n+1可以是复合语句。 如果省略某一个else,if与else的数目不一样,为实现程序设计者的意图,便要用括起该层的if语句来确定层次关系。 例如: if ( ) if ( ) 语句1 else

    48、 语句2 这时,确定了内嵌if语句的范围,因此else与第一个if配对。【例1-5】 本章开始举例中,有一函数: -1 (x0) 输入一个x的值,输出y的值。 分析:通过键盘输入一个数,这个数有三种可能:x=0,x0,x0。因此需要进行多次判断,要用多重选择结构。这里我们选用嵌套的ifelse if语句。#includevoid main( )int x,y;cinx;if(x0) y=-1;else if(x=0) y=0; else y=1;coutyendl; 程序运行结果为 输入:4 屏幕显示:1 2. switch语句 如果在算法中,虽然需要进行多次判断选择,但都是判断同一个表达式的

    49、值,这样就没有必要在每一个嵌套的if语句中都计算一次表达式的值,为此,C+中有switch语句专门来解决这类问题。switch语句的语法形式如下:switch(表达式) case 常量表达式1:语句1case 常量表达式2:语句2 case 常量表达式n:语句ndefault:语句 n+1 switch语句的执行顺序是:首先计算switch语句中的表达式的值,然后在case语句中寻找值相等的常量表达式,并以此为入口标号,由此开始顺序执行。如果没有找到相等的常量表达式,则从“default:”开始执行。 使用switch语句应注意下列问题: switch后面括弧内的表达式的值只能是整型、字符型、

    50、枚举型。例如,下面的代码错误地用浮点型作switch的表达式,它会引起编译错误:float f=4.0switch(f) /error /. 各常量表达式的值不能相同,且次序不影响执行结果。例如,下面的代码中出现相同的常量值:case A:coutthis is An;csae 65:coutthis is 65n;/error:A 等值于65 每个case分支可以有多条语句,但不必用。 每个case语句只是一个入口标号,通常我们只需执行一个case后的语句,因此,每个case分支的最后应该加break语句,用来结束整个switch结构,否则从入口点开始一直执行到switch结构的结束点。 当

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:C++课件:第1章 C++简单程序设计.ppt
    链接地址:https://www.163wenku.com/p-2039996.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库