1、2023年2月7日星期二Visual C+程序设计1第 章 数据类型、运算符和表达式2023年2月7日星期二Visual C+程序设计2o 在C+语言中,已有特殊含义和用途的英文单词称为关键字关键字或保留字,它们在程序中将不另作它用。o C+中的所有关键字如教材P10-11所示。共有48个,其中有5个不适用于VC+(表2-2)。另一方面,在VC+中有19个专用关键字不适用于C+(以双下划线开头)。关键字关键字2023年2月7日星期二Visual C+程序设计3标识符、标点符号和分割符标识符、标点符号和分割符以字母或下划线开始的字母、数字以及下划线组成的字符序列称为标识符标识符。在程序设计中标识
2、符可用作变量名、常量名、函数名、用户自定义的数据类型名等。2023年2月7日星期二Visual C+程序设计4关于标识符的几点说明:关于标识符的几点说明:a.标识符的有效长度为1247个字符。当标识符的长度超过247个字符时,超过限度的字符无效。b.标识符区分大小写。c.标识符的命名方法。匈牙利命名法;采用表示标识符含义的英文单词或汉语拼音。d.标识符不能为关键字。2023年2月7日星期二Visual C+程序设计5 课内练习 指出下列用户自定义的标识符中哪些是合法的,哪些是非法的?为什么?abcEnglish2xyx-yifElse关键字E大写,非关键字。注意:c+中标识符区分大小写。b(3
3、)def Chine_bbb3yAbsFloatfloat2023年2月7日星期二Visual C+程序设计6 C+中的标点符号标点符号共有9个:#(),:;在程序中,每个标点符号各有其不同的作用。分隔符分隔符的作用是将程序中的词法符号分隔开来。C+中的分隔符有:运算符、空格、标点符号、回车键和Tab键等。2023年2月7日星期二Visual C+程序设计7基本数据类型基本数据类型 描述一个数据需要两方面的信息:一是数据占用的存储空间的大小,二是该数据允许执行的操作或运算。C+中数据类型分为两大类:基本数据类型和导出数据类型。2023年2月7日星期二Visual C+程序设计8字符型整型实型(
4、单精度型)双精度型无值型数组类型指针类型结构体类型共同体类型枚举类型数据类型基本类型构造类型 C+中的数据类型2023年2月7日星期二Visual C+程序设计9 可以在这些基本数据类型前加上以下几个修饰词而形成一种新的基本数据类型:有符号(signed)、无符号(unsigned)、长(long)、短(short)。以上四个修饰词来修饰int时,关键字int可以省略。无修饰词的int和char,编译程序认为是有符号的。请同学们熟记教材P13表2-4。2023年2月7日星期二Visual C+程序设计10常量常量 在程序的执行过程中,值保持不变(也不能被改变)的量称为常量常量。1、字面常量:、
5、字面常量:a.整型常量整型常量:十进制常量:第一位为19的任意整数(由09之间的整数构成),比如123,-45 八进制常量:以0开头的整数(由07之间的整数构成),比如043,0712023年2月7日星期二Visual C+程序设计11 十六进制常量:以0X或0 x开头的整数(由09之间的整数以及AF之间的字母构成),比如,0X32,0 xA3F 长整型常量:以 L 或 l 结尾的整数,比如:123L,824l 无符号整形常量:以U或u结尾的整数,比如:123u,824U 2023年2月7日星期二Visual C+程序设计12 b.实型常量实型常量:十进制小数形式:比如,1.23、.23、1.
6、指数形式:格式为 E(或e),比如,2e3表示2000,2E-4表示0.0002 注意:E前必须有数字,E后指数部分必须是整数。2023年2月7日星期二Visual C+程序设计13 c.字符型常量字符型常量:用单引号 括起来的单个字符叫字符型字符型常量常量。字符常量在计算机内是采用该字符的 ASCII编码值来表示的,其数据类型为char。注意两个字符:和 ,不能直接表示为 ,而必须采用转义序列方法。2023年2月7日星期二Visual C+程序设计14 转义序列法转义序列法:o 反斜杠+字母:表示控制字符,比如 a 表示响铃,n 表示回车符。o 反斜杠+特殊字符(,),表示该字符。比如,表示
7、反斜杠“”,表示单引号“”。o 反斜杠+整型常量:此时整型常量必须是一个八进制(以0开头)或十六进制数(以0X或0 x或X或x开头,但在VC+开发环境中只能以x开头!),其取值通常在0255之间,此时,如果在整数之前没有0,表示八进制。比如:141、X61都与a等价。o 如要表示字符常量双引号,可采用或不采用转义序列法,即 和 均可。2023年2月7日星期二Visual C+程序设计15 d.字符串常量字符串常量:用双引号 括起来的若干个字符。当双引号()或反斜杠()作为字符串中的一个字符时,必须采用转义序列法;而单引号()出现在字符串中时,可采用或不采用转义序列法。字符串常量和字符常量的区别
8、:(1)在每一个字符串常量的末尾,存储时都要存放一个“0”,表示字符串的结束符。(2)字符串常量不能直接运用一些运算,比如算术运算、比较运算等,而字符常量可以。2023年2月7日星期二Visual C+程序设计16 2、标识符常量、标识符常量 用标识符表示的常量。可用两种方法定义标识符常量:(1)利用编译预处理指令。利用关键字 define,以如下形式定义常量:#define PI 3.14159 (2)利用常量说明符const。比如:const I=2;注意注意,标识符常量一经定义,在其后继的程序中就不能改变其值。2023年2月7日星期二Visual C+程序设计17课内练习 下列常量的表示
9、在c+中是否合法?若不合法,指出原因;若合法,指出常量的类型。3276735u1.25e3.43L0.0086e-3287”Computer System”整型无符号整型长整型实型字符串”a”a9645-0+0.5-.567字符串字符整型整型实型实型2023年2月7日星期二Visual C+程序设计18课内练习 下列符号中哪些表示字符?哪些表示字符串?哪些即不表示字符也不表示字符串?a0 x66”a”China”中国”8.42”0 x33字符0 x66字符串”China”字符串字符串字符”nt0 x34”56.34r8.34”0 x33”字符串字符字符字符串2023年2月7日星期二Visual
10、 C+程序设计19变量变量 在程序的执行过程中,可以改变其值的量称为变量变量。根据其取值不同,变量可分为不同类型的变量:整型变量、实型变量、字符型变量、构造型变量、指针型变量等。对于任一变量,编译程序要为其分配若干个字节(连续的)的内存单元,以便保存该变量的值,分配内存的大小由变量的类型决定。不管是什么类型的变量,通常是变量的说明在前,变量的使用在后。2023年2月7日星期二Visual C+程序设计20变量说明变量说明 说明变量的一般格式为:storage ,.,;在C+中,变量说明是作为一条语句来处理的,称为变量说明语句变量说明语句。变量说明(P17)可以出现在程序语句可出现的任何位置。同
11、一个变量只能作一次定义性说明。给一个变量取一个新值时,称为对变量的赋值对变量的赋值;取一个变量的值时,称为对变量对变量引用引用;2023年2月7日星期二Visual C+程序设计21课内练习 下列变量说明中,哪些是不正确的?为什么?(1)int m,n,x,y;float x,z;(2)char c1,c2;float a,b,c1;2023年2月7日星期二Visual C+程序设计22 变量的值可以通过赋值语句而得到改变。比如,假设有一个整型变量a,则通过如下语句就可以改变a的值:a=2;当引用某个变量时,该变量必须有一个唯一确定的值。首次给变量赋值称为对变量赋初值,或变量的初始变量的初始化
12、化。可以用三种方法给变量赋初值:(1)在变量说明时,直接赋初值;(int a=3;)(2)使用赋值语句赋初值;(int a;a=3;)(3)通过输入流cin等其它方法。(int a;cina;)变量的赋值与初始化变量的赋值与初始化2023年2月7日星期二Visual C+程序设计23运算符和表达式运算符和表达式2023年2月7日星期二Visual C+程序设计24 在C+中,对数据(变量或常量)进行运算或处理是通过运算符进行的。所谓运算符运算符就是表示某种特定运算形式简单的记号。参与运算的对象称为操作操作数数。数据与运算符一起构成表达式表达式,它描述对哪些数据、以何种顺序进行什么样的操作。20
13、23年2月7日星期二Visual C+程序设计25 要正确掌握运算符,必须要注意以下几点:1.每个运算符的功能和作用 每一个运算符都有特定的含义,但也要注意有的运算符相同,却具有不同的含义。2.运算符与操作数的关系 (1)运算符的操作数的个数 只有一个操作数的运算符,称为单目(一元)运算符;具有两个操作数的运算符称为双目(二元)运算符;只有一个三目运算符:?:(2)操作数的类型 2023年2月7日星期二Visual C+程序设计26 3.运算的优先级(见教材P18表2.6)优先级决定运算的优先顺序优先级高的运算符先运算,优先级低的运算符后运算。其意义和作用与数学中的优先级类似。4.结合性(见表
14、2.6)运算符的结合性规定了优先级相同的运算符的计算顺序。有两种结合性:右结合:操作数按从左到右的顺序进行运算,绝大多数运算符都是右结合的。左结合:操作数按从右到左的顺序进行运算 2023年2月7日星期二Visual C+程序设计27基本运算符基本运算符 基本运算符是指完成算术运算、关系运算、逻辑运算、位运算的运算符。2023年2月7日星期二Visual C+程序设计28 单目运算符:+-(正负号)双目运算符:+-*/%算术运算符都是右结合的,它们之间的优先级与数学中一致。两个整数的运算结果还是整数。如:5/2=2 而 5.0/2=2.5 运算符%(求余数)的操作数只能是整型或字符型。1、算术
15、运算符、算术运算符2023年2月7日星期二Visual C+程序设计292、关系运算符、关系运算符 关系运算是对两个操作数进行的比较运算,C+中有六个关系运算符:=!=关系运算符都是二目运算符。运算结果是一个整数,即当关系成立时,结果为1,而当关系不成立时,结果为0。关系运算符的两个操作数可以是任意基本类型的数据。在应用关系运算符时,要注意计算机存储和运算的精度误差。2023年2月7日星期二Visual C+程序设计303、逻辑运算符、逻辑运算符 逻辑运算符逻辑运算符用来表示操作数之间的逻辑关系,其运算结果为0或1,即当逻辑关系成立时,运算结果为1,否则,为0。C+中,逻辑运算符有三种:!:逻
16、辑非,单目运算符&:逻辑与,双目运算符|:逻辑或,双目运算符 逻辑运算符的操作数可为任意一种基本数据类型的变量和常量,在运算过程中,将非0数转化为1参与运算。2023年2月7日星期二Visual C+程序设计31 对于逻辑运算符及其操作数,要注意两点:(1)操作数的值为非0时,表示逻辑真,而0表示逻辑假。(2)逻辑运算的结果为逻辑真时,取值为1;否则,取值为0;其运算结果可作为一个整数再参与逻辑运算、关系运算或算术运算。2023年2月7日星期二Visual C+程序设计32 位运算符位运算符是对其操作数按二进制数形式逐位进行的逻辑运算或移位运算。位运算符的操作数只能是整数类型的数据。在C+中共
17、有六种位运算符:(1)按位取反():单目运算符,将操作数的各个二进制位取反。(2)按位与(&):双目运算符,将两个操作数的对应的二进制位分别进行逻辑与运算。(3)按位或(|):双目运算符,将两个操作数对应的二进制位分别进行逻辑或运算。4、位运算符、位运算符2023年2月7日星期二Visual C+程序设计33 (4)按位异或():双目运算符,将两个操作数对应的二进制位分别进行逻辑异或运算 (5)左移():双目运算符,其中右将一个二进制数向右移位指定的位数。注意,在进行位运算时,如果其中一个操作数为变量,在经过运算后操作数的值并没有改变,只是将运算结果作为位运算的返回值。2023年2月7日星期二
18、Visual C+程序设计345.赋值运算符赋值运算符 在C+中赋值运算符分为两种:(1)单一赋值运算符。即等号“=”。其功能为将右操作数赋给左操作数。(2)复合赋值运算符。在单一的赋值运算符“”前加上其它运算符(算术运算符或位运算符),构成复合的赋值运算符。C+提供了如下10种复合的赋值运算符:+=,=,*=,/=,%=,&=,=,|=,=运算符都为二目运算符,且结合性为左结合。运算法则为:将左操作数与右操作数进行相应的运算,再将结果赋给左操作数。注意注意:赋值运算符的左操作数必须为变量。2023年2月7日星期二Visual C+程序设计356、sizeof()运算符运算符 sizeof()
19、运算符是单目运算符,来计算某种类型或数据所占用的字节数。其格式为:sizeof()或 sizeof()其中前一种格式中的可以是任意一种基本数据类型或用户自定义类型。后一种格式用于计算结果所属类型所占用的字节数,可为常数。如:sizeof(int)的值为4;若有float b,则sizeof(b)的值为4;sizeof(a)=1,sizeof(“a”)=2,sizeof(“ntx34”)=42023年2月7日星期二Visual C+程序设计36表达式表达式2023年2月7日星期二Visual C+程序设计37 表达式表达式是由运算符和操作数组成的,能够求出值的式子。它描述的是哪些数据以何种顺序进
20、行什么样的操作。表达式中的操作数则可以为常量、变量、函数调用或其它表达式等等。最简单的表达式是常量和变量。根据运算符的类型的不同,我们可将表达式分为五类:算术表达式、逻辑表达式、关系表达式、赋值表达式和逗号表达式。2023年2月7日星期二Visual C+程序设计38 由算术运算符、括号和操作数构成的,能求出一个整数或实数值的式子,称为算术表达算术表达式式。在求算术表达式的值的过程中,要按先算乘除,后算加减的次序进行。相邻两个运算符的优先级相同,则按规定的“从左到右”的次序运算。表达式的值就是该表达式的算术运算的结果,表达式的类型按混合运算的类型转换规则确定(见后面类型转换)。1、算术表达式、
21、算术表达式2023年2月7日星期二Visual C+程序设计39课内练习:将下列数学表达式写成C+的表达式。sin(x)/(x-y)数学库函数见教材P402sqrt(s*(s-a)*(s-b)*(s-c)2023年2月7日星期二Visual C+程序设计40课内练习:求出下列表达式的值(1)5+7/3*4(2)a+23(3)23.5+9/5+0.5=13=120=25.02023年2月7日星期二Visual C+程序设计412、关系表达式、关系表达式 用关系运算符将操作数连接起来的式子叫做关系表达式关系表达式。关系表达式的值为0或1。即当关系成立时,值为1;而当关系不成立时,值为0。2023年
22、2月7日星期二Visual C+程序设计423、逻辑表达式、逻辑表达式 用逻辑符号连接起来的式子称为逻辑逻辑表达式表达式。逻辑表达式的值为真时,其值为1;为假时,其值为0。2023年2月7日星期二Visual C+程序设计43课内练习:(1)数学中axb,在c+中应如何表示?a=x&x=b 千万不可写成:a=x=b ,如:a=-4,x=-3,b=-2 分析:a=x即-4=-3成立,则a=x的值为1;继续,1=b即1=-2不成立,则1=b的值为0。也就是说,在数学中表达式a=x=b 成立,但在C+中该表达式不成立!(2)数学中xa或xb,在c+中应如何表示?x=b 2023年2月7日星期二Vis
23、ual C+程序设计44 C+规定:在计算逻辑表达式的过程中,一旦可以确定整个表达式的值,就不再继续计算该表达式的剩余部分。这就是所谓的逻辑表达式的表达式的副作用副作用。具体地说:对于a&b&c,只有a为非0时,才需要计算b的值,因为当a为0时,不管后面的项如何,都能得到该表达式的值就为0。同样只有在a和b都为非0的情况下才需要计算c的值。对于a|b|c,只要a为非0,就不需要判断b和c的值,而只有当a、b都为0时才需要计算c项。其它情况可以类推。2023年2月7日星期二Visual C+程序设计45几种运算符的优先级:!算术运算符关系运算符&|赋值运算符 课内练习:设有变量说明:int a=
24、3,b=4,c=5;求下列表达式的值:(1)a+bc&b=c(2)a|b+c&bc(3)!a|!c|b(4)a*b&c+a01112023年2月7日星期二Visual C+程序设计464、赋值表达式、赋值表达式 用赋值运算符(单一赋值运算符和复合赋值运算符)将两个操作数连接起来的式子称为赋值赋值表达式表达式,注意赋值表达式的左操作数必须为变量。赋值表达式的值为左操作数的值,赋值表达式还可进一步参与运算。由于赋值运算符的结合性为左结合,因此运算方向是自右向左的,因此当出现连续赋值运算符时,表达式的值为最左边的变量的值。2023年2月7日星期二Visual C+程序设计47课内练习:下列式子中,哪
25、些是合法的赋值表达式?哪些不是?(1)A=b=4.5+7.8(2)c=3.5+4.5=x=y=7.96(3)x=(y=4.5)*45(4)e=xy2023年2月7日星期二Visual C+程序设计48课内练习:已知int a=6,b=7;指出运算下列式子后a,b,c的值。a+=b-a等价于a=a+(b-a)a=7b=7c=b/=a等价于b=b/ac=ba=6b=1c=1a*=a*=b等价于a=a*ba=a*aa=1764b=72023年2月7日星期二Visual C+程序设计49 在C+中逗号既是分隔符,又是运算符。用逗号运算符连接起来的表达式称为逗号表达式逗号表达式。逗号运算符的优先级为所有
26、运算符中最低的。逗号运算符的结合性为右结合,整个逗号表达式的值和类型与最右的表达式的值和类型一致。5、逗号表达式、逗号表达式2023年2月7日星期二Visual C+程序设计50课内练习:已知 int a=5,b=8;指出运算下列式子后x,y的值及表达式的值。(1)x=a,y=a+b(2)y=(x=a*b,x+x,x*x)x=5 y=13 表达式的值为13x=40 y=1600 表达式的值为16002023年2月7日星期二Visual C+程序设计51类型转换类型转换 在求表达式值的过程中,对于二目运算符,有时会出现两个操作数的类型不一致的情形,这时就要求将这两个操作数转换为同一类型,然后再进
27、行运算。C+中有两种类型转换方式:自动类型转换和强制类型转换。2023年2月7日星期二Visual C+程序设计52(1)不同类型数据运算的自动转换规则 Double floatLongunsignedInt char,short高低图中横向向左的箭头表示必定的转换,如字符数据必定转化为整数,short型必定转化为int型,float型必定转化为double型。纵向向上的箭头表示当运算对象为不同类型时转化的方向,如int型和double型运算时int型会先一次性转换成double型再运算。注意纵向向上的箭头方向只表示数据类型级别的高低,int型和long型运算结果就为long型!如:sizeo
28、f(a+3.5)=8 sizeof(10L+a)=4 2023年2月7日星期二Visual C+程序设计53(2)不同类型之间赋值的自动转换规则 当赋值运算符右操作数的类型与左操作数(变量)的类型不一致时,如果它们可进行转换(称它们相互兼容),则系统自动对它们进行转换。规则如下:a)将实型数(双精度型)赋给整型变量时,只取实型数的整数部分,舍去小数部分。当其整数部分超过整数的范围时,赋值的结果错误。如:int a=3.7 则a的值为3 float b=a 则b的值为3.0 b)将字符型数据赋给整型变量时,根据字符类型的不同,可分两种情况:2023年2月7日星期二Visual C+程序设计54o
29、 对于无符号字符类型,将该字符型数据的二进制形式的八位数直接赋给整型变量二进制形式的低八位,再将整型变量的高位补0。o 对于有符号字符类型,若符号位为0,则与无符号字符类型的转换方式相同;如符号位为1,则将该字符型数据的二进制形式的八位数直接赋给整型变量二进制形式的低八位,再将高位补1。o 对于其它情形,当将精度较低的数据赋给精度较高的变量时,可直接将前者转换为与后者精度相同,再赋值。2023年2月7日星期二Visual C+程序设计55例如:signed char c1=250;int a;a=c1;coutaendl;则输出的结果为:二进制为:11111010范围为:-128 127 符号
30、位为1,即该补码表示一负数,对应原码为:10000110-62023年2月7日星期二Visual C+程序设计56 强制类型转换强制类型转换是指把一个表达式的值强制转换为指定的类型。强制类型转换的格式为:()或 ()注意:对一个变量无论进行强制转换还是自动转换,只是以该变量的转换类型参与运算,变量本身的类型和值都没有改变。如:int a=5,b=2;float c=2.6;c=float(a/b)则c=2.0 c=(float)a/b 则c=2.5,且a仍为5 a=int(c)则a=2,且c仍为2.6(3)强制类型转换 2023年2月7日星期二Visual C+程序设计57表达式语句、空语句、
31、自增自减表达式语句、空语句、自增自减运算符运算符2023年2月7日星期二Visual C+程序设计58表达式语句、空语句表达式语句、空语句o 在表达式后加一分号,就构成了表达式语句。如:int a=1,b=2,c;c=a+b;o C+中,任一语句都以分号结束。o 如果分号前没有任何表达式,则称此语句为空语句。如:int a=1;2023年2月7日星期二Visual C+程序设计59自增、自减运算符 在C+中,自增自减运算符有如下四种格式:+i(前置自增:先将i的值加1,再将变化后的i值参与运算)i+(后置自增:先将i参与运算,再将i的值加1)-i(前置自减:先将i的值减1,再将变化后的i值参与
32、运算)i-(后置自减:先将i参与运算,再将i的值减1)它们都是单目运算符,操作数必须为变量,一般是整型变量,但也可以是实型或字符型变量。2023年2月7日星期二Visual C+程序设计60 自增、自减运算符的主要难点是前置和后置的区别,这也是今后使用这类运算符时容易出错的地方。概括地说,若+(或-)在变量之前(前置),则先使变量的值加1(或减1),再将改变之后的变量值参加运算;而当+(或-)在变量之后(后置)时,则先把变量的值参加运算,然后再将变量的值加1(或减1)。2023年2月7日星期二Visual C+程序设计61课内练习:已知 int i=5,j;求下列语句执行后i,j的值。i+;+i;j=i+;j=-i;即i=i+1,表达式的值为5,i=6即i=i+1,表达式的值为6,i=6即j=i;i=i+1;则i=6,j=5即i=i-1;j=i;则i=4,j=42023年2月7日星期二Visual C+程序设计62课后作业:教材 P30T3,P31T11、14、15课后练习:试卷汇编 P5T21、22、25 P6T1 P15T21 P23T21、22、23 P24T3 P32T22、23 P40T21、22 P41T2、5 P51T21、22、23,P53T2、5