




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机所处理的数据以一定形式存放在内存中,数据计算机所处理的数据以一定形式存放在内存中,数据的存储方式以及能够进行的合法运算都与数据类型直的存储方式以及能够进行的合法运算都与数据类型直接相关。接相关。C+C+的特点之一就是提供了丰富的数据类型,的特点之一就是提供了丰富的数据类型,以便处理各种不同的数据。以便处理各种不同的数据。数据类型数据类型总是与运算封装总是与运算封装在一起,本质上是面向对象的。在一起,本质上是面向对象的。本章将简要介绍本章将简要介绍C+C+中的数据类型及相关运算,以及常量、变量、表达式、中的数据类型及相关运算,以及常量、变量、表达式、语句等,最后介绍简单的输入输出方法。语句
2、等,最后介绍简单的输入输出方法。第二章第二章 C+基础知识基础知识第1页/共88页第二章第二章 C+基础知识基础知识21 C+的词法单位的词法单位25 运算符、表达式和语句运算符、表达式和语句26 简单的输入输出简单的输入输出24 数组与字符数组数组与字符数组23 常量和变量常量和变量22 C+ 中的数据类型中的数据类型ok第2页/共88页2.1 C+的词法单位的词法单位211 C+的字符集 212 关键字 213 标识符(ID,identifier) 214 标点符号 ok第3页/共88页2.1.1 C+的字符集的字符集ASCII码字符集是计算机中的常用字符集。它包括英文字母及阿拉伯数字等1
3、28个字符,存储一个ASCII码占用一个字节单元。由于汉字处理的需要,又出现了汉字国标码等对应于不同语言的字符集。国标码的存储占用两个字节单元。Unicode字符集对各类字符进行统一的双字节编码。它包括了世界上多种语言的基本字符,最多可容纳65536个字符。 ASCII码字符集,国标码字符集都是它的子集。ok第4页/共88页C+的字符集的字符集26个个小写字母小写字母 abcdefghijklmnopqrstuvwxyz 26个个大写字母大写字母 ABCDEFGHIJKLMNOPQRSTUVWXYZ 10个个阿拉伯数阿拉伯数字字 0 1 2 3 4 5 6 7 8 9 其他符号其他符号 + -
4、 * / = , . _ : ; ? | ! # % & () 空格空格 C+语言使用下列基本字符来构成词法单位:结束第5页/共88页2.1.2 关关 键键 字字关键字(keyword)又称保留字。是由系统定义的具有特定含义的英文单词。关键字不能另作它用。C+区分大小写,关键字全部由小写字母组成。标准C+(ISO14882)定义了74个关键字,具体的C+编译器还会做一些增删。常用关键字及分类见表。ok第6页/共88页 关关 键键 字字数据类型说明符与修饰符bool char wchar_t class const double enum float int long short sig
5、ned struct union unsigned void volatile存储类型说明符auto extern inline register static访问说明符friend 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
6、 false new sizeof true表2-1 C+2-1 C+常用关键字及分类 ok第7页/共88页 关关 键键 字字结束 还有一些关键字本书未介绍:还有一些关键字本书未介绍: const_cast dynamic_cast reinterpret_cast static_cast export mutable typeid 下面可用一些关键字代替逻辑运算符:下面可用一些关键字代替逻辑运算符:and and_eq bitand bitorCompl not or or_eqXor xor_eq not_eq第8页/共88页2.1.3 标识符标识符标识符(IdentifierIdenti
7、fier,ID ID )是程序员定义的“单词”,用来给变量、常量、数据类型、函数等命名。合法标识符由字母或下划线开始,由字母、数字、下划线组成,其有效长度为1 13131个字符,长度超过3131个字符者只识别前3131个字符,VC+VC+标识符长度为1 1247247个字符。建议使用有一定含义的英文单词或拼音序列作标识符,以提高可读性;另外尽量不用下划线或双下划线打头,以免与系统定义的关键字冲突。ok第9页/共88页标识符标识符例: 判断下面哪些是合法的标识符: MyFileSalary 94amountvoid94SalarySalary94$amountNum_of_Student结束第1
8、0页/共88页2.1.4 标点符号标点符号标点符号包括:#、( )、 ,、 :、 ;、 、 等。 标点符号的作用:有一定的语法意义。如字符和字符串常量分别用 和 “ ”引起来。对语法符号起分隔作用。如 ;等结束第11页/共88页2.2 C+中的数据类型中的数据类型图2-1 C+的数据结构实 型 float双精度型 doubleC+的数据类型基本数据类型非基本数据类型数组 type 指针 type *结构 struct联合 union枚举 enum类 class整 型 int字符型 char逻辑型 bool无值型 void实 型ok第12页/共88页 C+C+对基本数据类型也分别进行了封装,称对
9、基本数据类型也分别进行了封装,称为为内置数据类型内置数据类型,内置数据类型不仅定义了数据,内置数据类型不仅定义了数据类型,类型,还定义了还定义了常用操作常用操作。本节仅介绍各种基本。本节仅介绍各种基本数据类型的定义,常用操作将在后面介绍。数据类型的定义,常用操作将在后面介绍。 C+C+为强类型语言,所有数据的使用严格遵从为强类型语言,所有数据的使用严格遵从“先说明后使用先说明后使用”的原则,以便编译器进行编译。的原则,以便编译器进行编译。 整型整型用来存放整数,整数(有符号的整数)用来存放整数,整数(有符号的整数)在内存中存放的是它的补码,无符号数没有符在内存中存放的是它的补码,无符号数没有符
10、号位,存放的就是原码。整数占用的字节数与号位,存放的就是原码。整数占用的字节数与机型有关,机型有关,3232位机上占用位机上占用4 4个字节。个字节。 第13页/共88页 字符型字符型用来保存字符,存储的是该字符的用来保存字符,存储的是该字符的ASCIIASCII码,码,占用一个字节。如大写字母占用一个字节。如大写字母A A的的ASCIIASCII码为码为6565,在对应的,在对应的一个字节中存放的就是一个字节中存放的就是6565。字符型数据从本质上说也是。字符型数据从本质上说也是整数,可以是任何一个整数,可以是任何一个8 8位二进制整数。位二进制整数。 由于汉语系字符很多,用由于汉语系字符很
11、多,用ASCIIASCII字符集处理远远不够,字符集处理远远不够,因此又创立了双字节字符集(因此又创立了双字节字符集(DBCSDBCS:double-byte double-byte character setcharacter set),每个字符用两个字节来编码。为便于),每个字符用两个字节来编码。为便于软件的国际化,国际上一些知名公司联合制定了新的宽软件的国际化,国际上一些知名公司联合制定了新的宽字节字符标准字节字符标准UnicodeUnicode。该标准中所有字符都是双字。该标准中所有字符都是双字节的,不同的语言和字符集分别占用其中一段代码。这节的,不同的语言和字符集分别占用其中一段代码
12、。这种用统一编码处理西文、中文及其它语言符号,就是种用统一编码处理西文、中文及其它语言符号,就是unicodeunicode码。码。C+C+同时也支持宽字符类型(同时也支持宽字符类型(wchar_twchar_t),或),或称双字节字符型称双字节字符型。 第14页/共88页 实型实型和和双精度型双精度型都用来存放实数,两者表示的实数都用来存放实数,两者表示的实数精度不同。实数在内存中以规范化的浮点数存放,包括精度不同。实数在内存中以规范化的浮点数存放,包括尾数、数符和阶码。数的精度取决于尾数的位数,尾数、数符和阶码。数的精度取决于尾数的位数,32位位机上实型为机上实型为23位(因规范化数的数码
13、最高位恒为位(因规范化数的数码最高位恒为1,不必,不必存储,实际为存储,实际为24位),双精度为位),双精度为52位。位。 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,中为1个字节。布尔型在运算中可以和整型相互转化,false对应为0,true对应为1或非0无值型主要用来说明函数的返回值类型,将在函数一章中具体介绍。 基本数据类型还可以加上一些修饰词,包括:signed(有符号)、unsigned(无符号)、long(长)、short(短)。参见下表:第15页/共88页2. 2结束 类 型名 称占用字节数取 值 范 围bool布尔
14、型 true, false(signed) char有符号字符型1-128 127unsiged char无符号字符型10 255(signed) short (int)有符号短整型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 1038dou
15、ble双精度型8-10308 10308long double长双精度型8-10308 10308void无值型0无值VC+中所有基本数据类型第16页/共88页2.3 常量和变量常量和变量2.3.1 变 量2.3.2 字面常量2.3.3 常变量及常量说明符const在程序中,常量和变量是用来表示数据的;在程序中,常量和变量是用来表示数据的;常量又分为字面常量、常变量;常量又分为字面常量、常变量;ok第17页/共88页2.3.1 变变 量量1 1 变量说明变量说明 2 2 变量赋初值变量赋初值 变量变量,在程序中是指可以改变值的量;,在程序中是指可以改变值的量;变量必须用标识符进行标识,称为变量
16、必须用标识符进行标识,称为变量名变量名;变量有变量有类型类型之分,如整形变量、字符变量等;之分,如整形变量、字符变量等;任何变量都必须任何变量都必须先说明后使用先说明后使用;一是便于编译;一是便于编译程序为变量分配空间,二是便于编译时进行语程序为变量分配空间,二是便于编译时进行语法检查;法检查;变量使用的第一步,是给变量赋变量使用的第一步,是给变量赋初始值初始值;ok第18页/共88页1变量说明变量说明 在在C+C+中,变量说明的一般格式为:中,变量说明的一般格式为:存储类型存储类型数据类型数据类型 变量名变量名1 1, ,变量名变量名2, 2, , ,变量名变量名n n; 下面是变量说明的几
17、个例子:int i, j, k; /说明三个整型变量i, j, kfloat x, y, z; /说明三个实型变量x, y, zchar c1, c2; /说明两个字符型变量c1, c2double dx; /说明一个双精度型变量dx 变量说明 结束 第19页/共88页2变量赋初值变量赋初值(1 1)变量说明时直接赋初值。变量说明时直接赋初值。例如:例如:int a=3, b=4, c=5;int a=3, b=4, c=5;;(2 2)用赋值语句赋初值。用赋值语句赋初值。严格的说,只有前严格的说,只有前者可称赋初值者可称赋初值例如:例如:float x, e;float x, e;x=3.5
18、; x=3.5; e=2.71828;e=2.71828;结束 给变量赋初值称为初始化,有两种方法:第20页/共88页2.3.2 字面常量字面常量1. 1. 整型常量整型常量 4. 4. 字符串常量字符串常量3. 3. 字符型常量字符型常量2. 2. 实型常量实型常量字面常量,指程序中直接给出的量;常量的值在程序执行过程中保持不变;并且存储在程序区,而非数据区;根据取值和表示方法的不同,可分为以下几种:ok第21页/共88页1.整型常量整型常量十进制表示法十进制表示法八进制表示法八进制表示法十六进制表示法十六进制表示法其他表示法其他表示法即整数,可以有多种表示方法:ok第22页/共88页 整数
19、的十进制表示方法整数的十进制表示方法十进制表示与我们熟悉的书写方式相同。十进制表示与我们熟悉的书写方式相同。如如15 -24ok第23页/共88页 整数的八进制表示整数的八进制表示 八进制表示八进制表示以以0 0开始,由数字开始,由数字0 0 7 7组成组成,用来,用来表示一个八进制数。表示一个八进制数。如:如:012012 / /八进制数八进制数1212,即十进制数,即十进制数1010-0655-0655/八进制数八进制数-655-655,即十进制数,即十进制数-429-429ok第24页/共88页 整数的十六进制表示整数的十六进制表示 十六进制以0X0X(大小写均可)开始,由数字0 0 9
20、 9和字母A A F F(大小写均可)组成,用来表示一个十六进制数。以下是一些常整数的例子:0 x32A /0 x32A /十六进制数32A32A,即十进制数810810-0 x2fe0 /-0 x2fe0 /十六进制数-2fe0-2fe0, /即十进制数-12256-12256ok第25页/共88页整数的其他表示方法整数的其他表示方法 整型常量还可以表示长整数和无符号整数。长整型常数以 L L 或 l l 结尾,无符号常整数以 U U 或 u u 结尾,以 U LU L 或 L UL U(大小写均可)结尾则可表示无符号长整型常数。例如:-84L-84L/十进制长整数-84-84026U026
21、U/八进制表示的无符号整数26260X32LU /0X32LU /十六进制表示的无符号长整型数3232。整数 结束 第26页/共88页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) 指数形式(也称为科学表示法)表示为尾数乘以1010的次方形式,由尾数、E E或e e和阶数组成。指数形式要求在E E或e e前面的尾数部分必须有数字,后面的指数部分必须为整数。 例 : : 判断下列表示是否合法123E12 -.34e-2 E4
22、1.43E3.5 包含小数点和包含小数点和1010的幂的数为实型常量,有的幂的数为实型常量,有两种表示方法:两种表示方法:实数实数 结束结束第27页/共88页3.字符型常量字符型常量 字符常量是用单引号引起来的单个字符。在内存中保存的是字符的ASCIIASCII码值。在所有字符中,有些是可显示字符,通常就用单引号引起来表示:a a /字符a a /字符 44/字符4 4 /空格字符有些是特殊情况字符,如不可显示的字符等,c+c+使用转义序列表示方法,如(祥见表2-32-3,此处略):n n /换行 / / 字符 字符常字符常 结束结束 第28页/共88页4. 字符串常量字符串常量字符串常量与字
23、符型常量的区别字符串常量aa占两个字节,存放aa和 0 0,值为0 x61000 x6100字符型常量aa占一个字节,存放aa,值为0 x610 x61结束用双引号引起来的若干个字符称为字符串常量用双引号引起来的若干个字符称为字符串常量。例如例如:I am a Chinese.,123, a ,:I am a Chinese.,123, a , 第29页/共88页2.3.3 常变量及常量说明符常变量及常量说明符const用常量说明符用常量说明符constconst给字面常量起个名字(标识符),给字面常量起个名字(标识符),这个标识符就称为这个标识符就称为标识符常量标识符常量;因为标识符常量的说
24、明和引用形式很像变量,所以也因为标识符常量的说明和引用形式很像变量,所以也称称常变量常变量;例如:;例如:constconst float PI=3.14159; float PI=3.14159;const const int Number_of_Student=100; int Number_of_Student=100;常变量必须也只能在说明时进行初始化;常变量必须也只能在说明时进行初始化;常变量初始化之后,不允许再被赋值;常变量初始化之后,不允许再被赋值;常变量必须先说明后使用;常变量必须先说明后使用;常变量存储在数据区,并且可以按地址访问,编译时常变量存储在数据区,并且可以按地址访问
25、,编译时系统对常变量进行类型检查。系统对常变量进行类型检查。C+C+建议使用常变量,而不要使用文字常量。建议使用常变量,而不要使用文字常量。2.3.3 结束第30页/共88页2.4 数组与字符数组数组与字符数组2.4.1 2.4.1 数数 组组2.4.2 2.4.2 字字 符符 数数 组组本节介绍一种用户自定义的导出数据类型 数组类型ok第31页/共88页2.4.1 数组数组数组是有限个数组是有限个同类型同类型元素的有序集合元素的有序集合,这些元,这些元素有一个共同的名字,每个元素以其在数组中的素有一个共同的名字,每个元素以其在数组中的位置区分位置区分,位置用,位置用下标下标表示。表示。 例如
26、数列或向量就可以看作一个数组,其中的例如数列或向量就可以看作一个数组,其中的元素用一个下标即可确定。元素用一个下标即可确定。 矩阵也可看作一个数组,其中的元素需要用矩阵也可看作一个数组,其中的元素需要用“行行”、“列列”两个下标确定。两个下标确定。 数组下标的个数称作数组下标的个数称作维数维数,上述代表数列的数,上述代表数列的数组和代表矩阵的数组分别称为一维数组和二维数组和代表矩阵的数组分别称为一维数组和二维数组。本节只介绍一维数组。组。本节只介绍一维数组。ok第32页/共88页 一维数组一维数组定义一个一维数组的一般格式为: 存储类型存储类型 数据类型数据类型 数组名数组名 常量常量 ; 数
27、据类型指的是数组中元素的数据类型,可以是C+中定义的任何一种数据类型。 写在中括号中的常量用来定义数组大小,即数组中元素的个数。例如:int m5; /定义数组m, 其中有5个整数 const int N=3; float xN;/数组x中有3个实数ok第33页/共88页 一维数组一维数组 数组在存储单元中是按下标的顺序连续存放的,数组在存储单元中是按下标的顺序连续存放的,任何一个元素都可以单独访问,其标识方法是用任何一个元素都可以单独访问,其标识方法是用数组名和下标:数组名和下标: 数组名数组名 表达式表达式 表达式用来计算下标值。表达式用来计算下标值。C+C+中规定数组第一中规定数组第一个
28、元素的下标为个元素的下标为0 0。okm4m3m2m1m0 x2x1x0第34页/共88页 一维数组一维数组 C+C+中数组大小在编译时确定,编译系统按照定义为中数组大小在编译时确定,编译系统按照定义为数组分配一段连续的存储单元,这段单元的大小也是不数组分配一段连续的存储单元,这段单元的大小也是不能改变的,因此数组大小不能用变量定义,而只能是一能改变的,因此数组大小不能用变量定义,而只能是一个正整数常量。个正整数常量。 下列定义是下列定义是非法非法的:的:int count;float scount;/数组个数不能是变量,且必数组个数不能是变量,且必/须在定义时指明须在定义时指明;const
29、float Num=3;int nNum;/数组个数不能是实数数组个数不能是实数;对数组的访问对数组的访问指的指的是对数组元素的访问是对数组元素的访问,不能直接将数,不能直接将数组名作为访问对象,对数组赋值也必须对每一个元素逐组名作为访问对象,对数组赋值也必须对每一个元素逐个赋值。个赋值。参见下例:参见下例: ok第35页/共88页 一维数组一维数组int_arr3=int_arr2=int_arr1=int_arr0= 11231输出结束1231+2=3【例21】使用数组的简单例子。# include void main() int int_arr4;int_arr0=1; int_arr1
30、=1; int_arr2=2;int_arr3=int_arr1+int_arr2;coutint_arr0n int_arr1n int_arr2n int_arr3 n; 第36页/共88页2.4.2 字符数组字符数组如果数组中的元素为字符,就称为如果数组中的元素为字符,就称为字符数组字符数组。例如:。例如:char string110; /可用来保存可用来保存1010个字符的字符数组个字符的字符数组; ;char city_name1 = N,a,n,j,i,n,g; /可用来保存可用来保存7 7个字符的字符数组个字符的字符数组; ;C+C+中字符数组用来保存字符串中字符数组用来保存字符
31、串。允许直接用字符串常。允许直接用字符串常量给字符数组量给字符数组初始化初始化。例如:。例如:char city_name2=”Nanjing”;用字符串初始化,字符数组会自动加上一个用字符串初始化,字符数组会自动加上一个串结束符串结束符00 。串结束符在字符串操作中具有十分重要的意。串结束符在字符串操作中具有十分重要的意义,因此在定义字符数组大小时,要注意留出足够的空义,因此在定义字符数组大小时,要注意留出足够的空间保存串结束符。间保存串结束符。ok第37页/共88页 字符数组字符数组 为了处理字符串,为了处理字符串,C+中提供了若干中提供了若干字符串处理函字符串处理函数数,这些函数定义在文
32、件中,其中包括:,这些函数定义在文件中,其中包括: strlen(s),返回字符串返回字符串s的实际长度(不包括的实际长度(不包括0););strcpy(s1,s2),将字符串将字符串s2中中0之前的所有字符依次赋值到字符串之前的所有字符依次赋值到字符串s1中,中,最后最后再加上一个再加上一个0。由于不能直接对字符数组名赋值,。由于不能直接对字符数组名赋值,所以将一个字符串的值赋给另一个字符串必须用所以将一个字符串的值赋给另一个字符串必须用字符串拷字符串拷贝函数贝函数完成。例如:完成。例如:char string220;string2=”VC+”;/非法非法strcpy(string2, “V
33、C+”);/合法合法第38页/共88页 字符数字符数组组【例22】 字符数组和字符串处理函数的应用。# include # include void main( ) char s1 =”Hello C+”;/初始化决定数组s1有10个元素char s210, s320;s20= B; s21= e; s22=g; s23= i;s24= n; s25= 0; /对字符串结束处理非常重要strcpy(s3, s2);cout”The length of”s1”is:”strlen(s1)n;/只有字符数组可整体输出,因为有结束符couts2ts3ab/结果是结果是?根据右结合根据右结合原则其运算
34、原则其运算过程如下:过程如下:a5b3F, 即0F即0第49页/共88页优先级运算符名 称语 义2!逻辑非, 单目操作数的值为真,则结果为假;12&逻辑与,双目当两个操作数全为真时,结果为真,否则为假;13|逻辑或,双目两个操作数中有一个为真,则结果为真;逻辑运算符逻辑运算符第50页/共88页 逻辑运算符用来进行逻辑运算。其操作数和运逻辑运算符用来进行逻辑运算。其操作数和运算结果均为算结果均为逻辑量逻辑量。运算结果同样可以作为一个。运算结果同样可以作为一个整整数数参与其他运算。参与其他运算。 由于由于逻辑值逻辑值和和整数整数之间的之间的对应关系,对应关系,也允许也允许整型整型和和字符型
35、字符型操作数进行操作数进行逻辑运算逻辑运算:21&021&0/逻辑与,逻辑与,2121与与0 0,结果为假:,结果为假:0 021|021|0/逻辑或,逻辑或,2121或或0 0,结果为真:,结果为真:1 1!21!21/逻辑非,逻辑非,2121的非,结果为假:的非,结果为假:0 0逻辑运算符逻辑运算符第51页/共88页3.位运算符位运算符(1)按位取反运算符“” (2)左移运算符“” (4)按位与运算符“&” (5)按位或运算符“|” (6)按位异或运算符“” okc+c+语言提供字位运算,它对操作数的各个位进行操作。语言提供字位运算,它对操作数的各个位进行操作。第5
36、2页/共88页(1 1)按位取反运算符)按位取反运算符“”将操作数的每个二进制位取反,即将操作数的每个二进制位取反,即1 1变为变为0 0,0 0变为变为1 1。例如,。例如,整数整数a a的值为的值为1001101110011011,则,则aa的值为的值为0110010001100100。(2 2)左移运算符)左移运算符“”运算一般格式为:运算一般格式为:ana”与左移运算符类同,将左操作数向右移动右操作数指定的与左移运算符类同,将左操作数向右移动右操作数指定的二进制位数,忽略移位后的小数部分,并在高位补二进制位数,忽略移位后的小数部分,并在高位补0 0。一。一个整数右移个整数右移n n位相
37、当于位相当于除以除以2 2的的n n次方,但比除法快。次方,但比除法快。 在中有符号数右移时高位补符号位,严格对应除法。在中有符号数右移时高位补符号位,严格对应除法。以上三种单目运算不影响数据本身的值,而是只产生一以上三种单目运算不影响数据本身的值,而是只产生一个中间量,这个中间量被引用后即不再存在。个中间量,这个中间量被引用后即不再存在。 第53页/共88页(4 4)按位与运算符)按位与运算符“&”&”将两个操作数的对应位逐一进行按位逻辑与运算。运算规则将两个操作数的对应位逐一进行按位逻辑与运算。运算规则为:对应位均为为:对应位均为1 1时,该位运算结果为时,该位运算结果为1
38、 1;否则为;否则为0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a & b 00001101a & b 00001101该运算可用来将整数的某些位置该运算可用来将整数的某些位置0 0,而保留所需要的位,上例,而保留所需要的位,上例保留了低四位。保留了低四位。(5 5)按位或运算符)按位或运算符“|”|”将两个操作数的对应位逐一进行按位逻辑或运算。运算规则将两个操作数的对应位逐一进行按位逻辑或运算。运算规则为:只要有一个数对应位为为:只要有一个数对应位为1 1,该位运算结果即为,该位运算结果即为1 1;两个数;两个数对应位
39、均为对应位均为0 0,该位结果为,该位结果为0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a | b 01001111a | b 01001111该运算符可用来将整数的某些位置该运算符可用来将整数的某些位置1 1。上例高四位不变,低四。上例高四位不变,低四位全位全1 1。第54页/共88页(6 6)按位异或运算符)按位异或运算符“”将两个操作数的对应位逐一进行按位异或运算。运算规则为:将两个操作数的对应位逐一进行按位异或运算。运算规则为:当对应位的值不同时,该位运算结果为当对应位的值不同时,该位运算结果为1 1,否则为,否则为0 0。例如
40、:。例如:a 01001101a 01001101b 00001111b 00001111a b 01000010a b 01000010该运算符可用来将一个整数的某些位取反,或将整型变量的该运算符可用来将一个整数的某些位取反,或将整型变量的值置值置0 0(将整型变量与自身按位异或)。上例低四位取反,(将整型变量与自身按位异或)。上例低四位取反,高四位不变。高四位不变。需要说明的一点是,以上例子中的整数都只取了低需要说明的一点是,以上例子中的整数都只取了低8 8位一个位一个字节。字节。第55页/共88页4.赋值运算符赋值运算符ok 将数据存放到相应存储单元中称为将数据存放到相应存储单元中称为赋
41、值赋值,如果,如果该单元中已有值,赋值操作以新值取代旧值;从该单元中已有值,赋值操作以新值取代旧值;从某个存储单元中取出数据使用,称为引用,引用某个存储单元中取出数据使用,称为引用,引用不影响单元中的值,即一个量可以多次引用。不影响单元中的值,即一个量可以多次引用。常常量量只能引用,不能赋值。只能引用,不能赋值。 赋值通过赋值运算符“=”来完成,其意义是将赋值号右边的值送到左边变量所对应的单元中。赋值号不是等号,它具有方向性。 第56页/共88页C+C+将变量名代表的单元称为将变量名代表的单元称为 “ “左值左值”,而将变,而将变量的值称为量的值称为“右值右值”。 左值必须是内存中一个左值必须
42、是内存中一个可以访问且可以合法修改的对象可以访问且可以合法修改的对象,因此只能是变,因此只能是变量名,量名,而不能是常量或表达式而不能是常量或表达式。4.赋值运算符例如下面的赋值运算是错误的:3.1415926=pi;/左值不能是常数x+y=z;/左值不能是表达式const int N=30;N=40;/左值不能是常变量第57页/共88页5.自增自减运算自增自减运算运算分前置和后置两种,运算分前置和后置两种,前置是先增减后引用前置是先增减后引用,即先,即先对变量自加或自减,用新的值参与其他运算;对变量自加或自减,用新的值参与其他运算;后置则后置则是先引用后增减是先引用后增减,即用变量原来的值参
43、与其他运算,即用变量原来的值参与其他运算,然后再对变量进行自加或自减然后再对变量进行自加或自减, ,例如:例如:int i=5, j=5, m, n;int i=5, j=5, m, n;m=i+;m=i+; / /后置;相当于后置;相当于m=i; i=i+1; m=i; i=i+1; / /结果:结果:i i的值为的值为6 6,m m的值为的值为5 5; ;n=+j;n=+j; / /前置;相当于前置;相当于j=j+1;n=j;j=j+1;n=j; / /结果:结果:j j的值为的值为6 6,n n的值为的值为6 6; ;意义:使变量当前值加意义:使变量当前值加1 1或减或减1 1,再赋给该
44、变量。再赋给该变量。要求:操作数只能是要求:操作数只能是变量变量,不能是常量或表达式;,不能是常量或表达式;ok第58页/共88页6.sizeof( ) 运算符运算符 用于计算一个操作数类型或一个变量的字用于计算一个操作数类型或一个变量的字节数。一般格式为:节数。一般格式为:sizeof (sizeof (数据类型数据类型) ) 或或 sizeof(sizeof(变量名变量名) ) 例如:例如:sizeof(int) 值为值为4 sizeof( float) 值为值为4double x; sizeof( x) 值为值为8 结束第59页/共88页2.5.2 表达式表达式1 算术表达式 2 关系表
45、达式 3 逻辑表达式和逻辑表达式求值的优化 4 赋值表达式与复合赋值表达式 5 逗号表达式 ok第60页/共88页1.算术表达式算术表达式使用时注意:使用时注意:1 1、表达式中每个变量都有确定的值时才能进、表达式中每个变量都有确定的值时才能进行表达式求值;行表达式求值;2 2、考虑到算术运算溢出和精度问题,应避免:、考虑到算术运算溢出和精度问题,应避免:(1 1)两个很接近的数直接相减;)两个很接近的数直接相减;(2 2)除数是一个很小的数;)除数是一个很小的数;(3 3)整数的连续乘运算。)整数的连续乘运算。ok由算术运算符连接的表达式称为算术表达式,例如:a+b*3 ;第61页/共88页
46、2.关系表达式关系表达式例如:例如:abcabc / /* *等同于等同于(ab)c(ab)c,先求,先求ab ab 的值,的值, 再将结果再将结果0 0或或1 1与与c c比较大小比较大小* */ /a+bc+da+bc+d / /* *等同于等同于(a+b)(c+d)(a+b)(c+d), 结果为结果为0 0或或1 1* */ /y=aby=ab / /* *计算计算abab的值的值0 0或或1 1 赋给赋给y y,y y的值为的值为0 0或或1 1* */ /由关系运算符连接的表达式。值为truetrue或falsefalse。ok第62页/共88页3.逻辑表达式和逻辑表达式求值的优化逻
47、辑表达式和逻辑表达式求值的优化由逻辑运算符连接的表达式称为逻辑表达式。逻辑表达式的由逻辑运算符连接的表达式称为逻辑表达式。逻辑表达式的值为值为truetrue或或falsefalse。这个值可对应整数。这个值可对应整数1 1或或0 0参与其他运算。参与其他运算。ok已知已知: 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第63页/
48、共88页3.逻辑表达式和逻辑表达式求值的优化在求逻辑表达式值的过程中,一旦表达式的在求逻辑表达式值的过程中,一旦表达式的值能够确定,就不再逐步进行下面的运算。值能够确定,就不再逐步进行下面的运算。称为称为“求值优化求值优化”。已知已知: int a=10, b=20, c=30;求:求: ab | c+ /结果以及结果以及a,b,c的值的值t1=1整个表达式的值为整个表达式的值为 1 1可见可见: : 表达式表达式 c+ c+ 已不需要计算已不需要计算所以所以: : c不变仍为不变仍为 30编程人员在使用逻辑运算时应当加以小心,优化计算固然编程人员在使用逻辑运算时应当加以小心,优化计算固然提高
49、了运算效率,但可能产生副作用。提高了运算效率,但可能产生副作用。所谓副作用,就是所谓副作用,就是出乎设计人员的意料,得到预想不到的结果。出乎设计人员的意料,得到预想不到的结果。第64页/共88页4.赋值表达式与复合赋值表达式赋值表达式与复合赋值表达式 赋值表达式的格式为:赋值表达式的格式为: 变量变量 = = 表达式表达式 例如:例如:x=5+6;x=5+6;a=b=c=d+1a=b=c=d+1; ; 在C+C+中,所有的双目算术运算符和位运算符均可与赋值运算符组合成一个单一运算符,称为复合运赋值算符。包括以下1010个:+ = = * = / = % = = &= | = =复合赋值
50、运算符的要求与格式与赋值运算符完全相同,复合赋值运算符的要求与格式与赋值运算符完全相同,表示为:表示为: 变量变量 复合赋值运算符复合赋值运算符 表达式表达式 它等同于它等同于 变量变量 = = 变量变量 运算符运算符 表达式表达式 例如:例如:x+=5x+=5 等同于:等同于:x=x+5x=x+5ok第65页/共88页5.逗号表达式逗号表达式 C+中,逗号既是分隔符,又是运算符,用逗号连接起来的表达式称为逗号表达式。 一般格式为:表达式1,表达式2,表达式n 逗号表达式中的每一个表达式都会被运算,整个逗号表达式的值为最后一个表达式的值。例如:a=(x=3,x+=6,5+6);/a=11 x=
51、9结束第66页/共88页算术类型转换和赋值类型转换算术类型转换和赋值类型转换1 1 不同类型数据的混合运算不同类型数据的混合运算 2 2 赋赋 值值 类类 型型 转转 换换 ok运算过程中,当某个二元运算符两边的操作数类型不同但运算过程中,当某个二元运算符两边的操作数类型不同但属于类型相容时,系统先将精度低的操作数变换到与另一属于类型相容时,系统先将精度低的操作数变换到与另一操作数精度相同,而后再进行运算。操作数精度相同,而后再进行运算。 所谓类型相容,指的就是类型不同但系统可以所谓类型相容,指的就是类型不同但系统可以自动进行转换。自动进行转换。当赋值号的左值和右值类型不一致但属于类型相容时,
52、当赋值号的左值和右值类型不一致但属于类型相容时,由系统自动进行类型转换。由系统自动进行类型转换。 第67页/共88页1.不同类型数据的混合运算不同类型数据的混合运算charshortintlongunsigned charunsigned shortunsigned intunsigned longfloatdoublelong double数据类型转换方向ok第68页/共88页具体规则如下:具体规则如下:(1 1)字符字符可以作为可以作为整数整数参与数值运算,参与数值运算,整数值为其整数值为其ASCIIASCII码码。(2 2)操作数为字符或短整型时,系统自动变换成)操作数为字符或短整型时,
53、系统自动变换成整型整型。(3 3)操作数为实型时,系统自动变换成)操作数为实型时,系统自动变换成双精度型双精度型。(4 4)其余情况,当两操作数类型不同时,将精度低(或表示范)其余情况,当两操作数类型不同时,将精度低(或表示范围小)的操作数的数据类型变换到与另一操作数类型相同再进围小)的操作数的数据类型变换到与另一操作数类型相同再进行运算行运算 例如有变量例如有变量: :char c1, c2; int i1, i2; float x1, x2;char c1, c2; int i1, i2; float x1, x2;则表达式则表达式x2=c1x2=c1* *i1+c1i1+c1* *x1+
54、c1x1+c1* *c2c2的求值过程为:将的求值过程为:将c1c1转换成整型,完成转换成整型,完成c1c1* *i1i1,结果表示为,结果表示为t1t1;将;将c1c1和和x1x1均转换成双精度型,完成均转换成双精度型,完成c1c1* *x1x1,结果表示为,结果表示为t2t2;将;将c1c1和和c2c2均转换成整型,完成均转换成整型,完成c1c1* *c2c2,结果表示为,结果表示为t3t3;然后然后t1t1转换成双精度型,完成转换成双精度型,完成t1+t2t1+t2,结果表示为,结果表示为t4t4;将;将t3t3转换成双精度型,完成转换成双精度型,完成t4+t3t4+t3,最后结果转为单
55、精度型赋给,最后结果转为单精度型赋给x2x2。 第69页/共88页2.赋值类型转换赋值类型转换结束系统自动进行类型转换规则:系统自动进行类型转换规则:1 1、实型数赋给整形变量:取整;注意溢出;、实型数赋给整形变量:取整;注意溢出;2 2、整型数赋给实型变量:先转换为实型数;、整型数赋给实型变量:先转换为实型数;3 3、字符型数赋给整形变量:、字符型数赋给整形变量:ASCIIASCII码为依据;码为依据;分为两种情况:符号位是分为两种情况:符号位是0 0或或1 1时不同;时不同;若符号位为若符号位为1,则低位字节不变,高位字节全部置,则低位字节不变,高位字节全部置1再赋值。再赋值。4 4、绝对
56、值较大的数赋给表达范围较小的数据、绝对值较大的数赋给表达范围较小的数据类型时,注意溢出;类型时,注意溢出;第70页/共88页2.5.4 强制类型转换运算符强制类型转换运算符ok其格式为:其格式为: () () /形式一形式一或或 ()/形式二形式二作用:作用:将表达式强制转换为将表达式强制转换为类型,类型, 但表达式的值及其类型不变。但表达式的值及其类型不变。任意数据类型任意数据类型第71页/共88页 赋值运算中,当左值与右值类型不一致时,赋值运算中,当左值与右值类型不一致时,系统将按照系统将按照左值左值的类型,的类型,自动自动进行强制转换进行强制转换。例如例如: : 设有以下定义设有以下定义
57、 double x=2.3,y; int i=2,j;(1) jx 22(1) j=x;(2) y=i;由由系统系统按按左值左值j 、y类型类型自动自动完成强制完成强制转换功能转换功能 (2) y2i2 2.5.4 强制类型转换运算符第72页/共88页2.5.5 求值次序与副作用求值次序与副作用 ok在符合优先级和结合性的前提下,C语言的标准对表达式中各操作数的求值次序没有做统一规定。 编译器为提高代码质量,在不影响优先级和结合性的前提下也要对操作数的访问次序作调整。在安排顺序时,如果某个操作数经历了求值运算,那么这个求值可能影响到其他操作数的值,这时就会产生副作用。例如,设有int a=2,
58、 b=5, c; 对表达式c=a*b+(+a)+(b=10)三个同级运算中,是先算a*b,还是+a,还是b=10,其次再算哪个?显然求值次序不同将导致结果不同。 第73页/共88页2.5.6 语句语句1 1 表达式语句:表达式语句:表达式;表达式; 2 2 空语句:空语句: ; 3 3 复合语句:复合语句: / /若干语句若干语句 4 4 流程控制语句:流程控制语句:实现三种基本结构的语句;实现三种基本结构的语句; 结束第74页/共88页2.6 简单的输入输出简单的输入输出2.6.1 C+C+的输入输出的输入输出2.6.2 C C语言的输入输出语言的输入输出ok第75页/共88页2.6.1 C
59、+的输入输出的输入输出cincin用来在程序执行期间给变量输入数据,用来在程序执行期间给变量输入数据,一般格式为:一般格式为:cincin变量名变量名1 1变量名变量名22变量名变量名n n; ; coutcout实现将数据输出到显示器的操作,实现将数据输出到显示器的操作,一般格式为:一般格式为:coutcout表达式表达式1 1表达式表达式22表达式表达式n n; ; 同时必须在程序开头增加一行:同时必须在程序开头增加一行:# include ok第76页/共88页1.字符的输入输出字符的输入输出cin 与cinget( )的区别(1) cin例如:char c1, c2, c3;cinc1
60、;/Acinc2c3;程序执行到A行时,等待用户输入数据。若输入:A b c 则cin分别将字符A、b、c赋给变量c1、c2、c3。cin自动跳过输入的自动跳过输入的空白空白字符(包括空格,制表,字符(包括空格,制表,backspacebackspace和回车等)。和回车等)。 ok第77页/共88页1.字符的输入输出字符的输入输出(2)cinget()例如:char c1, c2, c3, c4;cin.get (c1);/Bcin.get (c2);cin.get (c3);程序执行到B行时,若输入:A b则执行结果是:字符A、空格、字符b分别赋给变量c1、c2、c3;输入行中仍保留回车符。cin.get()把从键盘上输入的所有字符,包括把从键盘上输入的所有字符,包括
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光伏发电购销合同标准文本
- 出售不动产房屋合同样本
- 公积金借款合同样本样本
- 入学合同标准文本
- 第18讲 生物的分类和生物的多样性 2025年会考生物学专题练习(含答案)
- ups买卖合同样本
- 2025茶叶区域销售代理合同样本
- 出租合租店铺合同样本
- 人员转运服务合同标准文本
- 减水剂代理合同样本
- GB/T 16422.3-2014塑料实验室光源暴露试验方法第3部分:荧光紫外灯
- 计量器具校准记录
- DB36-T 1694-2022 餐厨垃圾集约化养殖黑水虻技术规程
- 三字经全文(带拼音及诵读指导)精编版课件
- 井控培训知识课件
- 技术合同认定登记培训课件
- 双减背景下小学语文作业的有效设计课件
- 十二讲船舶制冷装置课件
- 第12课送你一个书签
- 耳内镜微创外科技术PPT通用课件[通用]
- 宁夏华夏特钢有限公司年产40万吨石膏制酸项目环境影响评价报告书
评论
0/150
提交评论