第一章C++导言_第1页
第一章C++导言_第2页
第一章C++导言_第3页
第一章C++导言_第4页
第一章C++导言_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

1、C+ 程序员自信心曲线图程序员自信心曲线图常用参考教材v钱能C+程序设计教程第2版语法介绍的很详尽,可以作为教材的补充。语法介绍的很详尽,可以作为教材的补充。v谭浩强谭浩强C+程序设计程序设计该书是按语法点来编写的,最大特点是易读易懂,是最佳自学用书该书是按语法点来编写的,最大特点是易读易懂,是最佳自学用书v张岳新张岳新Visual C+程序设计基础程序设计基础该教材也是按语法点来编写的,原来的最大优势是大学生等级考试指定用书。该教材也是按语法点来编写的,原来的最大优势是大学生等级考试指定用书。v郑莉等郑莉等C+语言程序设计语言程序设计第第3版版该书从培养学生编程能力出发的,其最大优点是配套书

2、十分丰富,尤其是完全与主该书从培养学生编程能力出发的,其最大优点是配套书十分丰富,尤其是完全与主教材同步的案例教程,有丰富的实例,给教师很多可选择的余地。教材同步的案例教程,有丰富的实例,给教师很多可选择的余地。v李师贤等李师贤等面向对象程序设计基础面向对象程序设计基础第第2版版该书以面向对象技术为线索来讲授该书以面向对象技术为线索来讲授C+。v周佩德等周佩德等计算机软件技术基础计算机软件技术基础C+/C程序设计程序设计第二版第二版该书编写思想是从培养学生编程能力出发。该书编写思想是从培养学生编程能力出发。vBjarne Stroustrup著著 C+程序设计语言程序设计语言,由,由C+语言的

3、设计者编写,是有语言的设计者编写,是有关关C+语言的最全面、最权威的著作语言的最全面、最权威的著作计算机语言的基本体系结构基本符号常量、变量保留字、运算符等表达式语 句函 数类、包程序基本符号词 汇短 语句 子段 落描 写文 章语言的基本体系结构本章将简要介绍本章将简要介绍C+C+中的数据类型及相关运算,中的数据类型及相关运算,以及常量、变量、表达式、语句等,最后介绍简以及常量、变量、表达式、语句等,最后介绍简单的输入输出方法。单的输入输出方法。第一章第一章 C+基础知识基础知识第一章第一章 C+基础知识基础知识1.3 C+的词法规则的词法规则1.6 运算符和表达式运算符和表达式1.5 常量和

4、变量常量和变量1.4 C+ 中的数据类型中的数据类型ok1.1 C+语言概述语言概述 1.2 一个一个C+程序实例程序实例1.1 C语言概述语言概述 历史:历史:C+C+是由是由C C语言为基础发展起来的。语言为基础发展起来的。C C语言是作为语言是作为UNIXUNIX操作系统的开发语言为人操作系统的开发语言为人们所认识。七十年代末,们所认识。七十年代末,C C语言开始移植到非语言开始移植到非UNIXUNIX环境中,并逐步脱离环境中,并逐步脱离UNIXUNIX系统成为一种独系统成为一种独立的程序设计语言。立的程序设计语言。19881988年美国国家标准协会年美国国家标准协会ANSIANSI对对

5、C C语言进行语言进行了标准化,产生了了标准化,产生了ANSI CANSI C。1.1 C 语言概述语言概述 (1 1)C C语言既具备高级语言的结构和编程环境,又提语言既具备高级语言的结构和编程环境,又提供类似于汇编语言那样的系统资源操纵能力及程序执行效供类似于汇编语言那样的系统资源操纵能力及程序执行效率。适合解决有实时要求的问题。率。适合解决有实时要求的问题。C语言的主要特点:(2 2)有丰富的运算符和数据类型,表达式类型多样)有丰富的运算符和数据类型,表达式类型多样化,可以方便地实现在其他语言中较难实现的运算,对各化,可以方便地实现在其他语言中较难实现的运算,对各种不同类型的程序设计都有

6、良好的适应性。种不同类型的程序设计都有良好的适应性。(3 3)以函数为基础实现程序的结构化设计,支持大)以函数为基础实现程序的结构化设计,支持大型程序的多文件构成及单个文件独立编译,适合大型复型程序的多文件构成及单个文件独立编译,适合大型复杂程序的设计。杂程序的设计。(4)语言简洁、紧凑,使用方便、灵活。)语言简洁、紧凑,使用方便、灵活。1.1 C 语言概述语言概述 C+C+是由是由C C发展成为的以面向对象为主要特征的语发展成为的以面向对象为主要特征的语言。作为言。作为C C语言的超集,语言的超集,C+C+继承了继承了C C的所有优点,又的所有优点,又对数据类型做了扩充,使得编译系统可以检查

7、出更多对数据类型做了扩充,使得编译系统可以检查出更多类型错误。类型错误。C+C+支持面向对象程序设计,通过类和对象的概念支持面向对象程序设计,通过类和对象的概念把数据和对数据的操作封装在一起把数据和对数据的操作封装在一起,通过派生、继承、,通过派生、继承、重载和多态性等特征实现了软件重用和程序自动生成,重载和多态性等特征实现了软件重用和程序自动生成,使得大型复杂软件的构造和维护变得更加有效和容易。使得大型复杂软件的构造和维护变得更加有效和容易。C+C+语言的主要特点:语言的主要特点:1.1 C 语言概述语言概述 C+C+与与C C完全兼容,很多用完全兼容,很多用C C编写的库函数和编写的库函数

8、和应用程序都可以为应用程序都可以为C+C+所用。所用。但正是由于与但正是由于与C C兼容,使得兼容,使得C+C+不是纯正的面不是纯正的面向对象的语言,它既支持面向对象程序设计,向对象的语言,它既支持面向对象程序设计,也支持面向过程设计。但我们应当注意用面向也支持面向过程设计。但我们应当注意用面向对象的思想进行设计,以发挥出对象的思想进行设计,以发挥出C+C+的优势。的优势。C+C+语言的兼容性:语言的兼容性:1.2 一个一个C+程序实例程序实例# include using namespace std;int max(int i, int j) /A if (i=j) return i; el

9、se return j; int main(void) /B coutij; /从键盘上输入变量值从键盘上输入变量值 coutmax number is:max(i, j) n ; /输出提示和结果输出提示和结果 return 0;【例【例1.1】 一个简单的一个简单的C+程序。程序。程序组成:程序组成:注释注释编译预处理指令编译预处理指令程序体程序体由若干函数组成,由若干函数组成,其中有且仅有一个主函其中有且仅有一个主函数数main(),这是程(),这是程序的执行入口。在序的执行入口。在Windows编程中定义编程中定义为为winmain()。()。下面进入下面进入VC+ 运行运行一个应用程

10、序的开发过程 v启动启动Visual C+ 6.0开发环境开发环境 v创建工程项目创建工程项目 v打开项目文件打开项目文件 v创建创建C+源程序文件并添加到项目文件中源程序文件并添加到项目文件中 v编译、链接与运行程序编译、链接与运行程序 开始开始编辑编辑编译编译有错?有错?连接连接运行运行结果正确?结果正确?结束结束有有无无不正确不正确正确正确源程序源程序Myprog.cpp目标程序目标程序Myprog.obj库文件和库文件和其它目标程序其它目标程序可执行程序可执行程序Myprog.exe1.3 C+的词法规则的词法规则1.3.1 C+的字符集的字符集 1.3.2 关键字关键字 1.3.3

11、标识符标识符(ID,identifier) 1.3.4 标点符号标点符号 ok1.3.1 C+的字符集的字符集ASCII码字符集是计算机中的常用字符集。字符集是计算机中的常用字符集。它包括英文字母及阿拉伯数字等它包括英文字母及阿拉伯数字等128个字符,个字符,存储一个存储一个ASCII码码占用一个字节占用一个字节单元。单元。汉字国标码汉字国标码用于汉字处理。国标码的存用于汉字处理。国标码的存储占用两个字节单元。储占用两个字节单元。Unicode字符集对各类字符进行字符集对各类字符进行统一的双统一的双字节编码字节编码。它包括了世界上多种语言的基本。它包括了世界上多种语言的基本字符,字符,最多可容

12、纳最多可容纳65536个个字符。字符。 ASCII码码字符集,国标码字符集都是它的子集。字符集,国标码字符集都是它的子集。常用字符集:C+的字符集的字符集26个个小写字母小写字母 abcdefghijklmnopqrstuvwxyz 26个个大写字母大写字母 ABCDEFGHIJKLMNOPQRSTUVWXYZ 10个个阿拉伯数阿拉伯数字字 0 1 2 3 4 5 6 7 8 9 其他符号其他符号 + - * / = , . _ : ; ? | ! # % & () 空格空格 C+C+语言基本字符:语言基本字符:1.3.2 关关 键键 字字关键字(keyword):又称保留字。是由系统

13、定义的具有特定含义的英文单词。关键字不能另作它用。C+区分大小写,关键字全部由小写字母组成。标准C+(ISO14882)定义了74个关键字,具体的C+编译器会做一些增删。常用关键字及分类见表2.1。 关关 键键 字字数据类型说数据类型说明符与修饰明符与修饰符符bool char wchar_t class const double enum float int long short signed struct union unsigned void volatile存储类型说存储类型说明符明符auto extern inline register static访问说明符访问说明符friend

14、private protected public其它说明符其它说明符asm explicit namespace operator template this typedef typename using virtual 语句与标号语句与标号break case catch continue default do else for goto if return switch throw try while 运算符及逻运算符及逻辑值辑值delete false new sizeof true表表2-1 C+2-1 C+常用关键字及分类常用关键字及分类 关关 键键 字字 还有一些关键字本书未介绍:

15、还有一些关键字本书未介绍: const_cast dynamic_cast reinterpret_cast static_cast export mutable typeid 下面可用一些关键字代替逻辑运算符:下面可用一些关键字代替逻辑运算符:and and_eq bitand bitorcompl not or or_eqXor xor_eq not_eq1.3.3 标识符标识符标识符(标识符(Identifier,ID ):):是程序员定义的是程序员定义的“单词单词”,用来给变量、,用来给变量、常量、数据类型、函数等命名。常量、数据类型、函数等命名。合法标识符合法标识符由由字母或下划线字

16、母或下划线开始开始,由,由字母、字母、数字、下划线数字、下划线组成,其有效组成,其有效长度为长度为1 13131个字个字符符,长度超过,长度超过3131个字符者只识别个字符者只识别前前3131个字符个字符,VC+VC+标识符长度为标识符长度为1 1247247个字符。个字符。建议使用有一定含义的英文单词或拼音序建议使用有一定含义的英文单词或拼音序列作标识符,以提高列作标识符,以提高可读性可读性;另外尽量不用下;另外尽量不用下划线或双下划线打头,以免与系统定义的关键划线或双下划线打头,以免与系统定义的关键字冲突。字冲突。标识符标识符例例: 判断下面哪些是合法的标识符:判断下面哪些是合法的标识符:

17、 MyFileSalary 94amountvoid94SalarySalary94$amountf3.5Num_of_Student1.3.4 标点符号标点符号标点符号标点符号: :# ( ) , : ; 等。等。 标点符号的作用标点符号的作用: :有一定的语法意义。如字符和字符串有一定的语法意义。如字符和字符串常量分别用常量分别用 和和 引起来。引起来。对语法符号起分隔作用。如对语法符号起分隔作用。如 ;等;等1.4 C+中的数据类型中的数据类型图图2-1 C+的数据结构的数据结构实实 型型 float双精度型双精度型 doubleC+的数的数据类型据类型基本数据基本数据类型类型非基本数非

18、基本数据类型据类型数组数组 type 指针指针 type *结构结构 struct联合联合 union枚举枚举 enum类类 class整整 型型 int字符型字符型 char逻辑型逻辑型 bool无值型无值型 void实实 型型 C+C+基本数据类型称为基本数据类型称为内置数据类型内置数据类型,内置,内置数据类型不仅定义了数据类型,数据类型不仅定义了数据类型,还定义了还定义了常用操常用操作作。本节仅介绍各种基本数据类型的定义,常用。本节仅介绍各种基本数据类型的定义,常用操作将在后面介绍。操作将在后面介绍。 C+C+为强类型语言,所有数据的使用严格遵从为强类型语言,所有数据的使用严格遵从“先说

19、明后使用先说明后使用”的原则,以便编译器进行编译。的原则,以便编译器进行编译。 整型:整型:用来存放整数,整数(有符号的整用来存放整数,整数(有符号的整数)在内存中存放的是它的补码,无符号数没数)在内存中存放的是它的补码,无符号数没有符号位,存放的就是原码。整数占用的字节有符号位,存放的就是原码。整数占用的字节数与机型有关,数与机型有关,3232位机上占用位机上占用4 4个字节。个字节。 内置数据类型:内置数据类型: 字符型:字符型:用来保存字符,存储的是该字符用来保存字符,存储的是该字符的的ASCIIASCII码,占用一个字节。如大写字母码,占用一个字节。如大写字母A A的的ASCIIASC

20、II码为码为6565,在对应的一个字节中存放的就是,在对应的一个字节中存放的就是6565。字符型数据从本质上说也是整数,可以是任。字符型数据从本质上说也是整数,可以是任何一个何一个8 8位二进制整数。位二进制整数。C+C+同时也支持宽字符类同时也支持宽字符类型(型(wchar_twchar_t),或称双字节字符型。),或称双字节字符型。 实型:实型:单精度单精度和和双精度型双精度型都用来存放实数,都用来存放实数,两者表示的实数精度不同。实数在内存中以规范两者表示的实数精度不同。实数在内存中以规范化的浮点数存放,包括尾数、数符和阶码。数的化的浮点数存放,包括尾数、数符和阶码。数的精度取决于尾数的

21、位数,精度取决于尾数的位数,32位机上实型为位机上实型为23位位(因规范化数的数码最高位恒为(因规范化数的数码最高位恒为1,不必存储,不必存储,实际精度为实际精度为24位),双精度为位),双精度为52位。位。 逻辑型:逻辑型:也称也称布尔型布尔型,其取值为,其取值为true(逻辑真)(逻辑真)和和false(逻辑假),存储字节数在不同编译系统(逻辑假),存储字节数在不同编译系统中可能有所不同,中可能有所不同,VC+6.0中为中为1个字节。布尔型个字节。布尔型在运算中可以和整型相互转化,在运算中可以和整型相互转化,false对应为对应为0,true对应为对应为1或非或非0无值型:无值型:主要用来

22、说明函数的返回值类型,将主要用来说明函数的返回值类型,将在函数一章中具体介绍。在函数一章中具体介绍。 基本数据类型还可以加上一些修饰词,包括:基本数据类型还可以加上一些修饰词,包括:signed(有符号)、(有符号)、unsigned(无符号)、(无符号)、long(长)、(长)、short(短)。参见下表:(短)。参见下表:类类 型型名名 称称占用字节数占用字节数取取 值值 范范 围围bool布尔型布尔型 1true, false(signed) char有符号字符型有符号字符型1-128 127unsiged char无符号字符型无符号字符型10 255(signed) short (in

23、t)有符号短整型有符号短整型2-32768 32767unsigned short (int)无符号短整型无符号短整型20 65535(signed) int (signed)有符号整型有符号整型4-231 (231-1)unsigned (int)无符号整型无符号整型40 (232-1)(signed) long (int)有符号长整型有符号长整型4-231 (231-1)unsigned long (int)无符号长整型无符号长整型40 (232-1)float实型实型4-1038 1038double双精度型双精度型8-10308 10308long double长双精度型长双精度型8-

24、10308 10308void无值型无值型0无值无值VC+中所有基本数据类型中所有基本数据类型1.5 变量和常量1.5.1 变 量1.5.2 文字常量1.5.3 符号常量在程序中,常量和变量是用来表示数据的;在程序中,常量和变量是用来表示数据的;常量又分为字面常量、符号常量、常变量;常量又分为字面常量、符号常量、常变量;1.5.1 变 量1 1 变量变量定义定义 2 2 变量初始化变量初始化变量变量,在程序中是指可以改变值的量;,在程序中是指可以改变值的量;变量必须用标识符进行标识,称为变量必须用标识符进行标识,称为变量名变量名;变量有变量有类型类型之分,如整形变量、字符变量等;之分,如整形变

25、量、字符变量等;类型决定了变量的类型决定了变量的取值范围取值范围和和合法运算合法运算;任何变量都必须任何变量都必须先定义后使用先定义后使用;一是便于编译程;一是便于编译程序为变量分配空间,二是便于编译时进行语法检序为变量分配空间,二是便于编译时进行语法检查;查;变量使用的第一步,是给变量赋变量使用的第一步,是给变量赋一个确定的值一个确定的值;1变量定义 在在C+C+中,变量定义的一般格式为:中,变量定义的一般格式为:存储类型存储类型数据类型数据类型 变量名变量名1 1, ,变量名变量名2, 2, , ,变量名变量名n n; 例:例:int i, j, k; /定义定义三个整型变量三个整型变量i

26、, j, kfloat x, y, z; /定义定义三个单精度实型变量三个单精度实型变量x, y, zchar c1, c2; /定义定义两个字符型变量两个字符型变量c1, c2double dx; /定义定义一个双精度型变量一个双精度型变量dx 2 变量初始化变量初始化:变量初始化:定义变量时即给变量一个值称为变量初定义变量时即给变量一个值称为变量初始化始化例如:例如:intint a=3, b=4, c=5;a=3, b=4, c=5;float float x=3.0 x=3.0;变量初始化可以避免引用到随机变量。变量初始化可以避免引用到随机变量。如未初始化,变量使用的第一步是赋一如未初

27、始化,变量使用的第一步是赋一个确定的值。个确定的值。1.5.2 文字常量1. 1. 整型常量整型常量 4. 4. 字符串常量字符串常量3. 3. 字符型常量字符型常量2. 2. 实型常量实型常量文字常量:文字常量:指程序中直接给出的量;指程序中直接给出的量;常量的值在程序执行过程中保持不变;并且常量的值在程序执行过程中保持不变;并且存储存储在程序区在程序区,而非数据区;,而非数据区;根据取值和表示方法的不同,可分为以下几种:根据取值和表示方法的不同,可分为以下几种:1. 整型常量十进制表示法十进制表示法八进制表示法八进制表示法十六进制表示法十六进制表示法其他表示法其他表示法整型常量表示方法:

28、整数的十进制表示方法 C+ C+中十进制表示与平时熟悉的书写方式中十进制表示与平时熟悉的书写方式相同。相同。例:例:15 -2415 -24 整数的八进制表示 C+C+中八进制表示中八进制表示以以0 0开始,由数字开始,由数字0 0 7 7组成组成,用来表示一个八进制数。用来表示一个八进制数。例:例:012012 /八进制数八进制数1212,即十进制数,即十进制数1010-0655-0655/八进制数八进制数-655-655,即十进制数,即十进制数-429-429 整数的十六进制表示 C+C+中十六进制中十六进制以以0X0X(大小写均可)开始,(大小写均可)开始,由数字由数字0 0 9 9和字

29、母和字母A A F F(大小写均可)组成(大小写均可)组成,用来表示一个十六进制数。用来表示一个十六进制数。例:例:0 x32A 0 x32A /十六进制数十六进制数32A32A,即十进制数,即十进制数810810-0 x2fe0 -0 x2fe0 /十六进制数十六进制数-2fe0-2fe0, /即十进制数即十进制数-12256-12256整数的其他表示方法长整型常量和无符号整型常量:长整型常量和无符号整型常量:长整型常数以长整型常数以 L L 或或 l l 结尾,无符号常整数以结尾,无符号常整数以 U U 或或 u u 结尾,以结尾,以 U LU L 或或 L UL U(大小写均可)(大小写

30、均可)结尾则可表示无符号长整型常数。结尾则可表示无符号长整型常数。例如:例如:-84L-84L/十进制长整数十进制长整数-84-84026U026U/八进制表示的无符号整数八进制表示的无符号整数26260X32LU 0X32LU /十六进制表示的无符号长整型数十六进制表示的无符号长整型数3232。2. 实型常量( (1)1)一般形式一般形式与平时书写形式相同,与平时书写形式相同,由数字由数字 0 0 9 9和小数点组成和小数点组成。例如:。例如:0.23 -125.76 0.0 .46 -35.0.23 -125.76 0.0 .46 -35.(2) (2) 指数形式(也称为科学表示法)指数形

31、式(也称为科学表示法)表示为表示为尾尾数乘以数乘以1010的次方形式,由的次方形式,由尾数尾数、E E或或e e和和阶数阶数组组成成。指数形式要求在。指数形式要求在E E或或e e前面的前面的尾数部分必须尾数部分必须有数字有数字,后面的,后面的指数部分必须为整数指数部分必须为整数。 例例 : : 判断下列表示是否合法判断下列表示是否合法123E12 -.34e-2 E4 1.43E3.5 包含小数点和包含小数点和1010的幂的数为实型常量的幂的数为实型常量表示方法:表示方法:3. 字符型常量 字符常量:字符常量:用单引号引起来的单个字符用单引号引起来的单个字符。在内存中保存的是字符的。在内存中

32、保存的是字符的ASCIIASCII码值。在所有字符中,可显示字符通常就用单引号引码值。在所有字符中,可显示字符通常就用单引号引起来表示:起来表示: a a /字符字符a a /字符字符 4 4/字符字符4 4 /空格字符空格字符特殊情况字符,如不可显示的字符等,特殊情况字符,如不可显示的字符等,c+c+使用使用转义序列转义序列表表示方法:示方法:nn /换行换行 / /字符字符 4. 字符串常量字符串常量与字符型常量的区别:字符串常量与字符型常量的区别:字符串常量字符串常量 a a占两个字节,存放占两个字节,存放a a和和00,值为值为0 x61000 x6100字符型常量字符型常量a a占一

33、个字节,存放占一个字节,存放a a,值为值为0 x610 x61字符串常量:字符串常量:用双引号引起来的若干个字符用双引号引起来的若干个字符。例如例如: : I am a Chinese.I am a Chinese., , 123123, , a a , , 1.5.3符号常量符号常量是一个用来替代常量的标识符。其作用是符号常量是一个用来替代常量的标识符。其作用是(1)增强程序的可读性。标识符可以定义得有意义,如)增强程序的可读性。标识符可以定义得有意义,如用用PI表示圆周率。表示圆周率。(2)书写简单,不易出错。有的常量直接书写很长,容)书写简单,不易出错。有的常量直接书写很长,容易出错,

34、如圆周率易出错,如圆周率3.141 592 6用用PI代之,既简单又不容易代之,既简单又不容易出错。出错。(3)修改程序方便。)修改程序方便。格式:格式:#define 例:#define PI 3.14159261.6 运算符和表达式1.6.1 运算符、优先级和结合性运算符、优先级和结合性 1.6.2 基本运算符及其表达式基本运算符及其表达式 1.6.3 算术类型转换和赋值类型转换算术类型转换和赋值类型转换 (选读选读)1.6.4 求值次序与副作用求值次序与副作用 本节的重点:介绍与基本数据类型封装在一起的运算(操作)。介绍与基本数据类型封装在一起的运算(操作)。1.6.1 运算符、优先级和

35、结合性 在在C+C+中对常量或变量进行运算或处理的符号称为中对常量或变量进行运算或处理的符号称为运算符运算符,参与运算的对象称为,参与运算的对象称为操作数操作数。运算符按操作数的数量分类:运算符按操作数的数量分类: 单目运算符单目运算符只对一个操作数运算,如负号运算只对一个操作数运算,如负号运算符符“ ”等;等; 双目运算符双目运算符要求有两个操作数,如乘号运算符要求有两个操作数,如乘号运算符“*”等;等; 三目运算符三目运算符要求有三个操作数,三元运算符只要求有三个操作数,三元运算符只有一个有一个“?:”。1.6.1 运算符、优先级和结合性 优先级和结合性决定了运算中的优先关系优先级和结合性

36、决定了运算中的优先关系。优先级:优先级:指不同运算符在运算中的优先关系,指不同运算符在运算中的优先关系,可以用序号表示,序号越小,优先级越高。可以用序号表示,序号越小,优先级越高。例如:例如: 加号()和减号()的优先级是加号()和减号()的优先级是6 6;乘;乘号(号( * * )和除号()和除号( / / )的优先级是)的优先级是5 5;* * 和和 / / 的优先级高于和。的优先级高于和。 1.6.1 运算符、优先级和结合性结合性:结合性:决定优先级决定优先级相等的运算符组合在一起时的运算次序相等的运算符组合在一起时的运算次序,同一优先级的运算符有相同的结合性。同一优先级的运算符有相同的

37、结合性。 如如+、-的结合性是从左到右(左结合),则的结合性是从左到右(左结合),则a+b+c-d的运算次序为:的运算次序为:(a+b)+c)-d /先算先算a+b,再加再加c,最后减,最后减d 又如前又如前+和单目负和单目负-的结合性是从右到左(右结的结合性是从右到左(右结合),则合),则-+a的运算次序为:的运算次序为:-(+a) /先做先做+a,再取相反数(加负号),再取相反数(加负号)这对算法描述是必须的,每一步做什么必须确定。这对算法描述是必须的,每一步做什么必须确定。1.6.1 运算符、优先级和结合性例:例:(1) a*b+c; /先做乘法运算,再做加法先做乘法运算,再做加法(2)

38、 a+b-c ;/根据左结合性,先取根据左结合性,先取a、b相加;相加;/再取再取c,最后相减,最后相减演示如下:设演示如下:设a=10,b=20,c=15;10201510203015-151 算术运算符及其表达式算术运算符及其表达式4 逻辑运算、逻辑表达式及其求值优化逻辑运算、逻辑表达式及其求值优化 5 位运算位运算2 赋值运算符赋值表达式赋值运算符赋值表达式3 自增、自减运算自增、自减运算 7 逗号运算符与逗号表达式逗号运算符与逗号表达式 1.6.2 基本运算符及其表达式8 sizeof( )运算符运算符 表达式:表达式:由运算符、操作数及标点符号组成的,能取得由运算符、操作数及标点符号

39、组成的,能取得一个值的式子。一个值的式子。6三目运算符三目运算符1.算术运算符及其表达式优先级优先级运算符运算符名名 称称3+正,单目正,单目 -负,单目负,单目5*乘,双目乘,双目 /除,双目除,双目 %求余,双目求余,双目6+加,双目加,双目 -减,双目减,双目整数的算术运算:整数的算术运算:当两个操作数均为整数时,当两个操作数均为整数时,* *和和/ /重载为重载为整乘整乘和和整除整除,结,结果为整数,除法运算后舍去小数取整。如:果为整数,除法运算后舍去小数取整。如:5/45/4/结果为结果为1 1,整数,整数当两个操作数均为整数,当两个操作数均为整数,%定义为定义为求余求余运算,也称求

40、模运算,也称求模运算,结果为两个整数相除后的余数。如果两个整数中运算,结果为两个整数相除后的余数。如果两个整数中有负数,则先用两数绝对值求余,最后结果的有负数,则先用两数绝对值求余,最后结果的符号与被符号与被除数相同除数相同。例如。例如6%3/结果为结果为06%7/结果为结果为67%6/结果为结果为1-7%6/结果为结果为-17%-6/结果为结果为1-7%-6/结果为结果为-1实数的算术运算:实数的算术运算: 只要有一个操作数是实数,两个操作数均转只要有一个操作数是实数,两个操作数均转换为换为doubledouble型,型,*和和/重载为普通的重载为普通的乘乘和和除除,结,结果果是实数是实数:

41、5/4.05/4.0/结果为结果为1.251.25,实数,实数运算符的重载:运算符的重载:运算符总是与操作数封装在一起。相同的运算符运算符总是与操作数封装在一起。相同的运算符对不同类型的操作数执行的运算是有差异的。对不同类型的操作数执行的运算是有差异的。算术表达式:使用时注意:使用时注意:1 1、表达式中每个变量都有确定的值时才能进行表、表达式中每个变量都有确定的值时才能进行表达式求值;达式求值;2 2、C+中算术运算应注意数据溢出问题,即运算结中算术运算应注意数据溢出问题,即运算结果超出对应数据类型的表示范围。果超出对应数据类型的表示范围。编译程序只会对编译程序只会对除法运算时除数为除法运算

42、时除数为0这种情况提示出错,这种情况提示出错,因此,程因此,程序设计者必须在程序中解决检查并处理整数溢出问序设计者必须在程序中解决检查并处理整数溢出问题。题。由算术运算符连接的表达式,如:由算术运算符连接的表达式,如:a+b*3 ;2.赋值运算符与赋值表达式 赋值与引用:赋值与引用: 将数据存放到相应存储单元中称为将数据存放到相应存储单元中称为赋值赋值,如果,如果该单元中已有值,赋值操作以新值取代旧值;从该单元中已有值,赋值操作以新值取代旧值;从某个存储单元中取出数据使用,称为某个存储单元中取出数据使用,称为引用引用,引用,引用不影响单元中的值,即一个量可以多次引用。不影响单元中的值,即一个量

43、可以多次引用。常常量量只能引用,不能赋值。只能引用,不能赋值。 赋值通过赋值运算符赋值通过赋值运算符“=”来完成,其意义是将来完成,其意义是将赋值号右边的值送到左边变量所对应的单元中。赋值号右边的值送到左边变量所对应的单元中。赋值号不是等号,它具有方向性赋值号不是等号,它具有方向性。 左值与右值:左值与右值:C+C+将变量名代表的单元称为将变量名代表的单元称为 “ “左值左值”,而将变,而将变量的值称为量的值称为“右值右值”。 左值左值必须是内存中一个必须是内存中一个可以访问且可以合法修改的对象可以访问且可以合法修改的对象,因此只能是变,因此只能是变量名,量名,而不能是常量或表达式而不能是常量

44、或表达式。2.赋值运算符与赋值表达式 例如下面的赋值运算是错误的:例如下面的赋值运算是错误的:3.1415926=pi;/左值不能是常数左值不能是常数x+y=z;/左值不能是表达式左值不能是表达式const int N=30;N=40;/左值不能是常变量左值不能是常变量2.赋值运算符与赋值表达式赋值表达式:赋值表达式:由赋值运算符连接的表达式。格式为:由赋值运算符连接的表达式。格式为: 变量变量 = = 表达式表达式 例如:例如:x=5+6;x=5+6;a=b=c=d+1a=b=c=d+1; ; 复合赋值运算符:复合赋值运算符:双目算术运算符和赋值运算符双目算术运算符和赋值运算符可以可以组合成

45、单一运算符:组合成单一运算符:+ = = * = / = % = 格式为:格式为: 变量变量 复合赋值运算符复合赋值运算符 表达式表达式 它等同于它等同于 变量变量 = = 变量变量 运算符运算符 表达式表达式 例如:例如:x+=5x+=5 等同于:等同于:x=x+5x=x+53.自增自减运算前置和后置运算:前置和后置运算:前置是先增减后引用前置是先增减后引用,即先对变量自加或自减,用新的值,即先对变量自加或自减,用新的值参与其他运算;参与其他运算;后置则是先引用后增减后置则是先引用后增减,即用变量原来的,即用变量原来的值参与其他运算,然后再对变量进行自加或自减值参与其他运算,然后再对变量进行

46、自加或自减, ,例如:例如:int i=5, j=5, m, n;m=i+; /后置;相当于后置;相当于m=i; i=i+1; /结果:结果:i的值为的值为6,m的值为的值为5;n=+j; /前置;相当于前置;相当于j=j+1;n=j; /结果:结果:j的值为的值为6,n的值为的值为6;自增自减运算符:自增自减运算符:意义:使变量当前值加意义:使变量当前值加1 1或减或减1 1,再赋给该变量自己:再赋给该变量自己:i+或或+i /相当于相当于i=i+1 j-或或-j /相当于相当于j=j1要求:操作数只能是要求:操作数只能是变量变量,不能是常量或表达式;,不能是常量或表达式;ok4.逻辑运算、

47、逻辑表达式及其求值优化 逻辑运算:逻辑运算:用于判断分析,运算符包括用于判断分析,运算符包括关系关系和和逻辑逻辑运算符。运算符。关系运算符:关系运算符:包括:包括: (大于)、(大于)、(大于等于)、(大于等于)、 (小于)、(小于)、(小(小于等于)、于等于)、= = =(等于)和!(等于)和!= =(不等于)。关系运算符完(不等于)。关系运算符完成两个操作数大小的比较,结果为逻辑值成两个操作数大小的比较,结果为逻辑值true(true(真真) )或或falsefalse(假)(假)。每种。每种可比较大小可比较大小的数据类型,都的数据类型,都重载重载了关系运算了关系运算符。不同类型,自动转换

48、为同一类型后进行比较。符。不同类型,自动转换为同一类型后进行比较。在在C+中这两个逻辑值与整数之间有一个对应关系,真对应中这两个逻辑值与整数之间有一个对应关系,真对应1,假对,假对应应0;反过来,;反过来,0对应假,非对应假,非0整数对应真。整数对应真。所以逻辑运算结果可以作所以逻辑运算结果可以作为整数参与算术运算、关系运算、逻辑运算及其他运算。为整数参与算术运算、关系运算、逻辑运算及其他运算。关系表达式:例如:例如:a+bc+da+bc+d / /* *等同于等同于(a+b)(c+d)(a+b)(c+d), 结果为结果为0 0或或1 1* */ /y=aby=ab / /* *计算计算aba

49、b的值的值0 0或或1 1 赋给赋给y y,y y的值为的值为0 0或或1 1* */ /abcabc / /* *等同于等同于(ab)c(ab)c,先求,先求ab ab 的值,的值, 再将结果再将结果0 0或或1 1与与c c比较大小比较大小* */ /由关系运算符连接的表达式。值为由关系运算符连接的表达式。值为truetrue或或falsefalse。4.逻辑运算、逻辑表达式及其求值优化设有定义设有定义 float a=3.2;int b=5; ;则则: : 3ab/结果是结果是?根据左结合根据左结合原则其运算原则其运算过程如下:过程如下:a5b3.23F, 即即0F即即0优先优先级级运算

50、运算符符名名 称称语语 义义3!逻辑非逻辑非, 单目单目操作数的值为真,则结操作数的值为真,则结果为假果为假;反之结果为真反之结果为真12&逻辑与逻辑与,双目双目当两个操作数全为真时,结当两个操作数全为真时,结果为真,否则为假果为真,否则为假;13|逻辑或逻辑或,双目双目两个操作数中有一个为两个操作数中有一个为真,则结果为真真,则结果为真;逻辑运算符:逻辑运算符:包括:包括:! !、&和和|,其优先级和语义见下表。,其优先级和语义见下表。由逻辑运算符连接的表达式由逻辑运算符连接的表达式。其操作数和运算结果均为其操作数和运算结果均为逻辑量逻辑量。运算结果同样可。运算结果同样可以作

51、为一个以作为一个整数整数参与其他运算。参与其他运算。 由于由于逻辑值逻辑值和和整数整数之间的之间的对应关系,对应关系,也允许也允许整型整型和和字符型字符型操作数进行操作数进行逻辑运算逻辑运算:21&021&0/逻辑与,逻辑与,2121与与0 0,结果为假:,结果为假:0 021|021|0/逻辑或,逻辑或,2121或或0 0,结果为真:,结果为真:1 1!21!21/逻辑非,逻辑非,2121的非,结果为假:的非,结果为假:0 0逻辑表达式:逻辑表达式:逻辑表达式计算时,逻辑非优先级最高,关系运算其次,逻辑表达式计算时,逻辑非优先级最高,关系运算其次,逻辑与和逻辑或最低。逻辑与和

52、逻辑或最低。 已知已知: int a=10, b=20, c=30;float x=1.8, y=2.4; ay|ab-!c按按优先级优先级与与结合性结合性,其,其求值顺序求值顺序等同于:等同于:(ay)|(a(b-(!c)t1=1 t2=0t4=0 -&t3=0t5=bt6=1| 得整个表达式的值为:得整个表达式的值为:1 1逻辑表达式求值的优化:在求逻辑表达式值的过程中,一旦表达式的在求逻辑表达式值的过程中,一旦表达式的值能够确定,就不再逐步进行下面的运算。值能够确定,就不再逐步进行下面的运算。称为称为“求值优化求值优化”。已知已知: int a=10, b=20, c=30;求:

53、求: ab | c+ /结果以及结果以及a,b,c的值的值t1=1整个表达式的值为整个表达式的值为 1 1可见可见: : 表达式表达式 c+ c+ 已不需要计算已不需要计算所以所以: : c不变仍为不变仍为 30编程人员在使用逻辑运算时应当加以小心,优化计算固然编程人员在使用逻辑运算时应当加以小心,优化计算固然提高了运算效率,但可能产生副作用。提高了运算效率,但可能产生副作用。所谓副作用,就是所谓副作用,就是出乎设计人员的意料,得到预想不到的结果。出乎设计人员的意料,得到预想不到的结果。5. 位运算(选读)(1)按位取反运算符)按位取反运算符“” (2)左移运算符)左移运算符“” (4)按位与

54、运算符)按位与运算符“&” (5)按位或运算符)按位或运算符“|” (6)按位异或运算符)按位异或运算符“” c+c+语言提供字位运算,它对操作数的各个位进行操作。语言提供字位运算,它对操作数的各个位进行操作。(1 1)按位取反运算符)按位取反运算符“”将操作数的每个二进制位取反,即将操作数的每个二进制位取反,即1 1变为变为0 0,0 0变为变为1 1。例如,。例如,整数整数a a的值为的值为1001101110011011,则,则aa的值为的值为0110010001100100。(2 2)左移运算符)左移运算符“”运算一般格式为:运算一般格式为:ana”与左移运算符类同,将左操作数

55、向右移动右操作数指定的二与左移运算符类同,将左操作数向右移动右操作数指定的二进制位数,忽略移位后的小数部分,并在高位补进制位数,忽略移位后的小数部分,并在高位补0 0。一个整数。一个整数右移右移n n位相当于位相当于除以除以2 2的的n n次方,但比除法快。次方,但比除法快。 在在VC+6.0VC+6.0中有符号数右移时高位补符号位,严格对应除法:中有符号数右移时高位补符号位,严格对应除法:-323 /-32右移右移3位,由位,由11100000B得得11111100B,即,即-4(4 4)按位与运算符)按位与运算符“&”&”将两个操作数的对应位逐一进行按位逻辑与运算。运算规则

56、将两个操作数的对应位逐一进行按位逻辑与运算。运算规则为:对应位均为为:对应位均为1 1时,该位运算结果为时,该位运算结果为1 1;否则为;否则为0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a & b 00001101a & b 00001101该运算可用来将整数的某些位置该运算可用来将整数的某些位置0 0,而保留所需要的位,上例,而保留所需要的位,上例保留了低四位。保留了低四位。(5 5)按位或运算符)按位或运算符“|”|”将两个操作数的对应位逐一进行按位逻辑或运算。运算规则将两个操作数的对应位逐一进行按位逻辑或运算。运

57、算规则为:只要有一个数对应位为为:只要有一个数对应位为1 1,该位运算结果即为,该位运算结果即为1 1;两个数;两个数对应位均为对应位均为0 0,该位结果为,该位结果为0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a | b 01001111a | b 01001111该运算符可用来将整数的某些位置该运算符可用来将整数的某些位置1 1。上例高四位不变,低四。上例高四位不变,低四位全位全1 1。(6 6)按位异或运算符)按位异或运算符“”将两个操作数的对应位逐一进行按位异或运算。运算规则为:将两个操作数的对应位逐一进行按位异或运算。运算规则

58、为:当对应位的值不同时,该位运算结果为当对应位的值不同时,该位运算结果为1 1,否则为,否则为0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a b 01000010a b 01000010该运算符可用来将一个整数的某些位取反,或将整型变量的该运算符可用来将一个整数的某些位取反,或将整型变量的值置值置0 0(将整型变量与自身按位异或)。上例低四位取反,(将整型变量与自身按位异或)。上例低四位取反,高四位不变。高四位不变。双目位运算符也可以与赋值运算符双目位运算符也可以与赋值运算符组合成组合成复合赋值复合赋值运算符:运算符:= &=

59、| = =以上以上6种单目运算不影响数据本身的值,而是只产生一个中种单目运算不影响数据本身的值,而是只产生一个中间量,这个中间量被引用后即不再存在。间量,这个中间量被引用后即不再存在。 6 三目运算符与三目条件表达式v在在C+中只有一个三目运算符中只有一个三目运算符?:,三目条件表达式格式如下:,三目条件表达式格式如下:v?:v先计算先计算,当,当非非0时,三目条件表达式取时,三目条件表达式取的值,否则取的值,否则取的值。三目条件表达式的值。三目条件表达式的功能可以解释成一个简单的条件语句(参见第的功能可以解释成一个简单的条件语句(参见第2章)。章)。v三目运算符三目运算符 ?: 的结合性是从

60、右至左。的结合性是从右至左。#include void main() int a=1,b=2,c=3; coutab?a:b=(ab?a:b)endl; coutb?b-:+a=b?b-:+a) endl;coutb?+a:+b=b?+a:+b)endl; coutb?a:bc?b:c =b?a:bc?b:c)endl;【例1.14】三目条件表达式的运用7.逗号运算符与逗号表达式用逗号连接起来的表达式称为逗号表达式用逗号连接起来的表达式称为逗号表达式, (C+中,逗号既是分隔符,又是运算符。)中,逗号既是分隔符,又是运算符。)格式为:格式为:表达式表达式1,表达式,表达式2,表达式,表达式n 逗号表达式中的每一个表达式都会被运算,逗号表达式中的每一个表达式都会被运算,整个逗号表达

温馨提示

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

评论

0/150

提交评论