1、1程序中要对各种各样的数据进行描述和操作,用到的数据都程序中要对各种各样的数据进行描述和操作,用到的数据都必须指明其类型。数据类型的作用:必须指明其类型。数据类型的作用:指出了应为数据分配的存储空间的大小指出了应为数据分配的存储空间的大小规定了数据所能进行的操作规定了数据所能进行的操作数据类型数据类型基本类型基本类型 构造类型构造类型 整型整型(int)实型实型 字符型字符型(char)布尔型布尔型(bool)空类型空类型(void)指针指针单精度型单精度型(float)双精度型双精度型(double)数组数组结构型结构型(struct)共用体共用体(union)枚举枚举(enum)类类(cl
2、ass)2.1 数据类型数据类型2名称声明符占字节数取值范围布尔型boolbool1 1false(0)false(0)或或true(1)true(1)有符号字符型charchar1 1-128127-128127无符号字符型unsigned charunsigned char1 102550255有符号短整型short intshort int或或 shortshort2 2-2-21515(2(21515-1)-1)有符号整型intint4 4-2-23131(2(23131-1)-1)无符号短整型unsigned intunsigned int4 40(20(23232-1)-1)有符号
3、长整型longlong4 4-2-23131(2(23131-1)-1)单精度型floatfloat4 4(3.4(3.41010-38-383.43.410103838)双精度型doubledouble8 8(1.7 9 7 7(1.7 9 7 7 1 01 0-3083081.79771.79771010308308)空值voidvoid 不同类型的数据占用的内存字节数、表示的数据范围都是不同类型的数据占用的内存字节数、表示的数据范围都是不同的。表不同的。表2-1中列出了中列出了Visual C+中支持的基本数据类型以及中支持的基本数据类型以及占用的字节数和和范围。占用的字节数和和范围。表
4、2-1 基本数据类型及其占用的字节数和和范围 32.2.1 常量常量在程序运行过程中其值不能改变的量,有值常量和符号常在程序运行过程中其值不能改变的量,有值常量和符号常量两种。量两种。1.逻辑常量逻辑常量 逻辑常量只有两个取值:逻辑常量只有两个取值:true和和false,主要用在逻辑运算中,主要用在逻辑运算中。例如,对于两个整数。例如,对于两个整数a和和b:bool x=(a=b);如果如果a和和b 相等,则相等,则x的值为的值为true,否则为,否则为false。此外,由于逻。此外,由于逻辑值对应着整数辑值对应着整数1和和0,因此它也能像其它整数一样出现在表达,因此它也能像其它整数一样出现
5、在表达式中,参与各种整数运算,这一点与其它语言有所区别。式中,参与各种整数运算,这一点与其它语言有所区别。42.整型常量整型常量 整型常量就是整型常数,简称整数,它有十进制、八进制和十六进整型常量就是整型常数,简称整数,它有十进制、八进制和十六进制三种形式。制三种形式。(1)十进制整型常量)十进制整型常量 形式:形式:n n为为09数字。十进制整数不能以数字。十进制整数不能以0开始,以开始,以0开始的为八进制整数。开始的为八进制整数。例如例如0、+16、124、-127等。等。(2)八进制整型常量)八进制整型常量 形式:形式:0n n为为07数字。例如数字。例如0、016、0124等。等。(3
6、)十六进制整型常量)十六进制整型常量 形式:形式:0 xn 以以0 x(或(或0X)开头,)开头,n 为为 09 数字和字母数字和字母AF或或af组成。例如组成。例如0 x0、0 x55、0 x1cd等。等。此外,此外,C+中整型数据还允许给它们添加后缀中整型数据还允许给它们添加后缀u或或l(大小写均可),(大小写均可),来表示无符号整数或长整数。来表示无符号整数或长整数。53.实型常量实型常量 (1)单精度实型常量)单精度实型常量 形式:形式:n.nf n为由为由09数字组成的若干位整数。如果不加字母数字组成的若干位整数。如果不加字母f默认为双默认为双精度实型常量。例如精度实型常量。例如1.
7、36、-17.、.1和和41.9等。等。(2)双精度实型常量)双精度实型常量 形式:形式:n.nEn 其中:其中:n为为09数字,符号数字,符号E(或(或e)表示指数部分,)表示指数部分,+号可省。号可省。例如:例如:1.37、34.0、1.25e-5、-1.25e23 等均为合法双精度实型常等均为合法双精度实型常量。量。注意:注意:e前面不能没有数字,前面不能没有数字,e后面的数字必须为整数,也不能后面的数字必须为整数,也不能加园括号。如加园括号。如1E(-3)、E-5、1e2.1都是错误的。都是错误的。64.枚举常量枚举常量 枚举常量是枚举类型中定义的值,即枚举值。这种类型的枚举常量是枚举
8、类型中定义的值,即枚举值。这种类型的变量值只能是给定的若干个名字之一。是一种有限状态的集合变量值只能是给定的若干个名字之一。是一种有限状态的集合,以整型值代表。如:颜色,星期等。枚举类型属于构造类型,以整型值代表。如:颜色,星期等。枚举类型属于构造类型,用关键字,用关键字enum表示。用户通常利用枚举类型定义程序中需要表示。用户通常利用枚举类型定义程序中需要使用一组相关符号常量。使用一组相关符号常量。声明形式:声明形式:enum ;例如:例如:enum daysun,mon,tue,wed,thu,fri,sat;说明:说明:(1)enum是关键字,标志枚举类型;是关键字,标志枚举类型;(2)
9、在定义枚举类型时,花括号中的一些名字如)在定义枚举类型时,花括号中的一些名字如sun、mon是程序设计者指定的,与标识符的命名规则相同,但名字是程序设计者指定的,与标识符的命名规则相同,但名字不是变量,不能改变其值;(如不是变量,不能改变其值;(如sun=1;非法)非法)枚举变量的说明和引用:枚举变量的说明和引用:enum day day1,day2;或或 enum daysun,mon,tue,wed,thu,fri,sat day1,day2;71)枚举变量只能取该类型中的一个元素。例如:)枚举变量只能取该类型中的一个元素。例如:day1=sat;2)枚举元素如果不赋值,自动取)枚举元素如
10、果不赋值,自动取0n-1整数值;整数值;3)在定义时,可以对某个枚举元素赋值,其后的元素按此值自)在定义时,可以对某个枚举元素赋值,其后的元素按此值自动加一递增。动加一递增。如如enum colorred=3,yellow,blue,green=8,black;则则yellow为为44)一个整数不能直接赋给一个枚举变量,应进行强制类型转换)一个整数不能直接赋给一个枚举变量,应进行强制类型转换;如;如day2=2;是错误的;是错误的;5)枚举常量可以进行比较;)枚举常量可以进行比较;6)枚举常量不是字符串。)枚举常量不是字符串。注意:注意:85.字符常量字符常量 C+提供了两类字符型常量:提供了
11、两类字符型常量:普通字符常量普通字符常量:用单引号括起来的一个字符。如:用单引号括起来的一个字符。如:A、0、?。转义字符常量转义字符常量:以:以 (反斜杠)开头的用单引号括起来的字符(反斜杠)开头的用单引号括起来的字符序列。如:序列。如:n、t、x61等。等。常用的转义字符见教材常用的转义字符见教材P26。注意:注意:0表示表示ASCII码为码为0的字符的字符,它是一个空字符,注意其与它是一个空字符,注意其与0的区的区别,后者表示的是别,后者表示的是ASCII码为码为48的数字字符。的数字字符。字符型数据在内存中以字符型数据在内存中以ASCII码存储,故整型数据和字符型数码存储,故整型数据和
12、字符型数据在一定范围内可以通用。如:据在一定范围内可以通用。如:x=a+2;96.字符串常量字符串常量 字符串常量是用双引号括起来的字符序列字符串常量是用双引号括起来的字符序列,系统在字符串常系统在字符串常量最后自动加字符串结束符号量最后自动加字符串结束符号0。例如:例如:字符串字符串A的存储形式:的存储形式:A 0 A内存中实际存放的内存中实际存放的是这些字符的是这些字符的ASCII码码#define 标识符标识符 常量值常量值 const 数据类型数据类型 标识符标识符=常量值;常量值;或或7.符号常量符号常量 是以标识符形式出现的常量,作用是便于程序阅读和修改。是以标识符形式出现的常量,
13、作用是便于程序阅读和修改。C+中用中用define命令或关键字命令或关键字const定义符号常量定义符号常量,形式如下:形式如下:字符字符A的存储形式:的存储形式:10注意:注意:习惯上符号常量名大写,而变量名小写,以示区分。习惯上符号常量名大写,而变量名小写,以示区分。符号常量虽然用标识符来标识,但本质上是常量,具有常符号常量虽然用标识符来标识,但本质上是常量,具有常量值不能改变的性质。量值不能改变的性质。#include iostream.h#define PI 3.14void main()float r=3.0,s,l;l=2*PI*r;s=PI*r*r;coutl=l,s=sa;)通
14、过赋值语句赋值通过赋值语句赋值 (如:如:a=3;)通过初始化方式赋初值通过初始化方式赋初值 (如:如:int k=3;)所谓初始化是指在定义变量的同时指定变量的初值,形式有所谓初始化是指在定义变量的同时指定变量的初值,形式有二:二:133.变量引用变量引用 C+中增加了中增加了“引用引用”这一概念,许多地方可以代替指针实现相这一概念,许多地方可以代替指针实现相应的功能,比指针更安全。应的功能,比指针更安全。所谓引用即给一个已知变量起个所谓引用即给一个已知变量起个别名别名,系统不为引用另外开辟内,系统不为引用另外开辟内存,而是与原变量共享同一段内存,引用好比是一个虚拟的变量,声存,而是与原变量
15、共享同一段内存,引用好比是一个虚拟的变量,声明形式为:明形式为:数据类型数据类型&引用名引用名=已定义的变量已定义的变量如:如:int a=3,&b=a;/定义定义b为为a的引用的引用b=5;/你知道此时你知道此时a的值为多少吗?的值为多少吗?说明:说明:(1)引用运算符与地址操作符使用了相同的符号,但含义不一样;)引用运算符与地址操作符使用了相同的符号,但含义不一样;(2)引用被创建时,必须立即初始化,且一旦一个引用被初始化为)引用被创建时,必须立即初始化,且一旦一个引用被初始化为一个对象的引用,就不能再被改变为另一个对象的引用,另外也不能有一个对象的引用,就不能再被改变为另一个对象的引用,
16、另外也不能有NULL引用,所以这点和以后学的指针不一样。引用,所以这点和以后学的指针不一样。144typedef语句语句 为了增加程序的可读性和可移植性,为了增加程序的可读性和可移植性,C+提供了提供了typedef 语句,用于为已有的数据类型定义一个新的名称。语句,用于为已有的数据类型定义一个新的名称。形式:形式:typedef 数据类型数据类型 新的数据类型名;新的数据类型名;例如:例如:typedef float FLOAT;/FLOAT可当作可当作float用用 FLOAT k,j;/用用FLOAT定义定义k和和j为为float类型类型注意:注意:typedef语句并没有真正地定义新的
17、数据类型,它只是语句并没有真正地定义新的数据类型,它只是相当于给某个已有的数据起了一个别名。相当于给某个已有的数据起了一个别名。152.2.3 标准函数标准函数 函数是一个可以独立完成某个功能的语句块。在函数是一个可以独立完成某个功能的语句块。在C+中函数中函数分为标准函数和用户自定义的函数。表分为标准函数和用户自定义的函数。表2-3中列出了常用的数学中列出了常用的数学函数。函数。函数名数学含义示例sin(x)sinxsin(30*3.14/180)cos(x)cosx exp(x)exexp(1)fabs(x)|x|fabs(-3.5)sqrt(x)sqrt(3)log(x)lnxlog(1
18、0)pow(x,y)xypow(2,3)x 所有的标准函数都被放在所有的标准函数都被放在不同的函数库中,并有一个与不同的函数库中,并有一个与之对应的头文件。在使用标准之对应的头文件。在使用标准函数时,应把包含标准函数的函数时,应把包含标准函数的头文件,通过头文件,通过#include 预处理预处理命令装入到程序中,例如,要命令装入到程序中,例如,要使用上述数学函数,应该在程使用上述数学函数,应该在程序加入:序加入:#include math.h 或或#include cmath using namespace std;又如:又如:#include stdlib.h 中含有的随机函数中含有的随机
19、函数rand是用于产是用于产生生032767之间的一个整数,如需产生之间的一个整数,如需产生a,b之间的整数,只需用:之间的整数,只需用:rand()%(b-a+1)+a即可。即可。162.3.1 基本概念基本概念运算符运算符具有三个属性:具有三个属性:优先级优先级:指运算的先后次序,共分指运算的先后次序,共分15个级别。个级别。(见书表见书表2-4)结合性结合性:指相同优先级运算符连续出现时的计算顺序,分自左指相同优先级运算符连续出现时的计算顺序,分自左 向右和自右向左两种,除特别声明外,皆指自左向右。向右和自右向左两种,除特别声明外,皆指自左向右。目目 数数:指运算符要求的操作数的个数,包
20、括单目、双目和三目,指运算符要求的操作数的个数,包括单目、双目和三目,一般目数越少,优先级越高。一般目数越少,优先级越高。表达式:表达式:由常量、变量、函数调用和运算符按一定规律组合在一由常量、变量、函数调用和运算符按一定规律组合在一 起构成的式子。起构成的式子。如:如:a+14/(3+2)-sqrt(17)(-b+sqrt(b*b-4*a*c)/(2*a)17 符号:符号:+(加法或取正)(加法或取正)-(减法或取负)(减法或取负)*(乘法)(乘法)/(除法)(除法)%(求余数)(求余数)+(自增)(自增)-(自减)(自减)其中:其中:+和和-的结合性则是自右向左的结合性则是自右向左 优先级
21、:优先级:(从高到低从高到低)(+、-、+、-)(*、/、%)(+、-)2.3.2 运算符运算符 1.算术运算算术运算正、负正、负加、减加、减18说明:说明:在除法运算中,当两个操作数都是整数时,商也为整数,小在除法运算中,当两个操作数都是整数时,商也为整数,小数部分一律舍去。如:数部分一律舍去。如:1/2 0 1.0/2 0.5 若若 i 的值为的值为3,则:,则:j=+i;j的值为的值为4,i的值为的值为4 j=i+;j的值为的值为3,i的值为的值为4注意注意:增、自减运算符只能用于变量,而不能用于常量和表达式。增、自减运算符只能用于变量,而不能用于常量和表达式。()5+、(a+b)+%(
22、求余运算)要求两个操作数都是(求余运算)要求两个操作数都是整型整型,结果为整除后,结果为整除后余下的整余数,符号与被除数相同。余下的整余数,符号与被除数相同。自增、自减运算符自增、自减运算符(+、-)+i ,-i (在使用在使用 i之前之前,先使先使i的值加减的值加减1)i+,i-(在使用在使用 i之后之后,使使i的值加减的值加减1)192.关系运算关系运算符号:符号:(小于)、(小于)、(大于)(大于)=(等于)、(等于)、=(大于等于)、(大于等于)、!=(不等于)(不等于)优先级:优先级:(从高到低)(从高到低)(、=)(=、!=)关系运算描述的是一种关系运算描述的是一种“判断关系判断关
23、系”,在,在C+中为了提高中为了提高程序的可读性,引入了程序的可读性,引入了bool类型,其结果有类型,其结果有true和和false两种。为两种。为了保持与了保持与C的兼容可以用的兼容可以用“1”代表代表“真真”,用,用“0”代表代表“假假”例如:例如:53的结果为的结果为true,a B 的结果为的结果为false思考:思考:x为为0到到100之间的数能否表示为之间的数能否表示为 0=x=100?203.逻辑运算逻辑运算种类:种类:&(逻辑与)、(逻辑与)、|(逻辑或)、(逻辑或)、!(逻辑非)(逻辑非)优先级:优先级:(从高到低从高到低)!&|其中,其中,“!”是单目运算符,优先级高于算
24、术运算符。是单目运算符,优先级高于算术运算符。“”和和“|”低于关系运算符。低于关系运算符。逻辑运算通常用来连接关系运算,逻辑运算符两端的操作逻辑运算通常用来连接关系运算,逻辑运算符两端的操作数如为数如为“非非”,就当作,就当作“真真”来处理,如果是来处理,如果是“”,便当,便当作作“假假”来处理。逻辑运算的结果也只有来处理。逻辑运算的结果也只有false(0)和和true(1)两种。两种。21说明:说明:当多个当多个&连续出现时,如连续出现时,如:表达式表达式&表达式表达式&表表达式达式。从左到右,只要一个操作数为。从左到右,只要一个操作数为0,结果就为,结果就为0,不进,不进行后续运算。行
25、后续运算。当多个当多个|连续出现时,如:连续出现时,如:表达式表达式|表达式表达式|表达式表达式。从左到右,只要一个操作数为从左到右,只要一个操作数为1,结果就为,结果就为1,不进行后续运,不进行后续运算。算。运算符说明优先级说明例结果!取反取反2当操作数为假时,结果为真当操作数为假时,结果为真!0true&与与11操作数均为真时,结果才为真操作数均为真时,结果才为真2&05&3 falsetrue|或或12操作数中有一个为真时,操作数中有一个为真时,0|10|0 truefalse22#include iostream.hvoid main()int m,n=10;m=2&n+;coutm=
26、m,n=y?x:y);/将和中较大的一个数赋值给变量将和中较大的一个数赋值给变量max条件运算符的结合性是由右向左条件运算符的结合性是由右向左思考题:思考题:试用条件运算符表达:对试用条件运算符表达:对n(0)个人进行分班,每班个人进行分班,每班k(0)个人,最后不足个人,最后不足k人也编一班,问要编几个班?人也编一班,问要编几个班?n%k0?n/k+1:n/k5.逗号运算逗号运算形式:形式:e1,e2,e3,其中其中e1、e2、e3均为表达式,从左向右依次计算各个表均为表达式,从左向右依次计算各个表达式的值,而将最后一个表达式的值作为整个表达式的值,达式的值,而将最后一个表达式的值作为整个表
27、达式的值,逗号运算符常用于循环语句的表达式中,将多个表达式连接逗号运算符常用于循环语句的表达式中,将多个表达式连接成一个表达式,成一个表达式,如:如:for(i=0,j=n;ij;i+,j-)逗号运算符的优先级别最低逗号运算符的优先级别最低。246.位运算位运算 xyx&yx|yxyy000001010110100111111100 位运算符是以单独的二进制位为操作对象的运算。也就是位运算符是以单独的二进制位为操作对象的运算。也就是说,其操作数是二进制数。这是与其他运算的主要不同。说,其操作数是二进制数。这是与其他运算的主要不同。C+语言中提供的位运算符有:语言中提供的位运算符有:按位与按位与
28、(&)、)、按位或按位或(|)、按位异或按位异或()、)、按位取反按位取反()、)、左移左移()6种。此运算规则见表种。此运算规则见表2-7。257.赋值运算赋值运算格式:格式:变量变量 赋值运算符赋值运算符 表达式表达式作用:作用:将一个表达式的值赋给一个变量,并以变量的值作为整将一个表达式的值赋给一个变量,并以变量的值作为整个式子的值。个式子的值。/Ex2_1.cpp#include void main()int a=15,x,y,z;x=a;/负数在计算机中以补码形式存储负数在计算机中以补码形式存储 y=a2;coutx y z关系运算符关系运算符逻辑运算符逻辑运算符条件运算符条件运算符
29、赋值运算赋值运算符符逗号运算符逗号运算符 (5)在能确定表达式值的情况下停止后面的运算)在能确定表达式值的情况下停止后面的运算3.表达式书写原则表达式书写原则 (1)乘号不能省略。)乘号不能省略。(2)括号必须成对出现,可以出现多个,但均使用圆括号。)括号必须成对出现,可以出现多个,但均使用圆括号。(3)表达式从左到右要在同一基准上书写,无高低之分。)表达式从左到右要在同一基准上书写,无高低之分。294.表达式书写示例表达式书写示例 aacbb242xye3ln45sin70表示表示3x20的关系式的关系式 字符变量字符变量c是字母是字母 30【例例2.2】编程序求任意三个数中最大的一个数编程
30、序求任意三个数中最大的一个数/Ex2_2.cpp#includeiostream using namespace std;void main()float x,y,z,max;cout输入三个数据输入三个数据:xyz;max=xy?x:y;max=maxz?max:z;cout最大的数据最大的数据=max=A&ch=Z 2.ch是大写字母。是大写字母。解:解:思考:思考:上述命题可否描述为上述命题可否描述为 A ch Z?为什么?为什么?或或34#includeiostream.h#includeiomanip.h#includemath.hvoid main()float a,b,c;dou
31、ble l,s;coutca;b=sqrt(c*c-a*a);/sqrt为内部函数,对其的说明包含在头文件为内部函数,对其的说明包含在头文件math.h中中l=a+b+c;s=a*b/2;cout计算结果:计算结果:endl;coutsetw(8)另一直角边另一直角边=bendlsetw(11)周长周长=lendlsetw(11)面积面积=sx;c4=x=0?+:-;/x的符号存入的符号存入c4x=abs(x);/求整型数求整型数x的绝对值的绝对值c3=x%10;/x%10为个位数字为个位数字x=x/10;c2=x%10;c1=x/10;cout数符数符 百位数百位数 十位数十位数 个位数个位
32、数endl;coutsetw(2)c4setw(8)c1 setw(8)c2setw(8)c3endl;【例例2-5】编程输入一个三位整数,依次输出该数的正(负)编程输入一个三位整数,依次输出该数的正(负)号和百位、十位、个位数字。号和百位、十位、个位数字。分离出符号位后分解各数位分离出符号位后分解各数位36习题二习题二 1.选择题在书本完成选择题在书本完成 2.二二3、4三三 2、3 四四 4、5 五五1、2、4实验实验2:C+集成开发环境(集成开发环境(IDE)1.熟悉熟悉Visual C+程序设计环境;程序设计环境;2.掌握在掌握在Visual C+环境中编写、调试程序的方法与基本步骤;环境中编写、调试程序的方法与基本步骤;3.利用利用Visual C+编制简单的输入输出程序并执行;编制简单的输入输出程序并执行;