基本数据类型与表达式.ppt_第1页
基本数据类型与表达式.ppt_第2页
基本数据类型与表达式.ppt_第3页
基本数据类型与表达式.ppt_第4页
基本数据类型与表达式.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

第二章基本数据类型与表达式,主要内容,数据类型的概念C+基本数据类型常量与变量操作符表达式,数据类型的概念,一种数据类型可以看成由两个集合构成:值集:描述了该数据类型包含哪些值(包括这些值的结构);操作(运算)集:描述了对值集中的值能实施哪些运算。例如:整数类型就是一种数据类型,它的值集就是由整数所构成的集合,它的操作集包括:加、减、乘、除等运算。数据类型可以分为:简单数据类型:值集的数据是不可再分解的简单数据,如:整数类型、实数类型等;复合数据类型:值集的数据是由其它类型的数据按照一定的方式组合而成,如:向量、矩阵等。,区分数据类型的好处对数据进行分类,便于数据的处理。提高程序的可靠性,便于自动进行类型一致性检查。便于产生高效代码语言对类型的支持静态类型与动态类型语言静态类型:在静态程序中区分类型动态类型:在程序运行中区分类型强类型与弱类型语言强类型:自动类型检查弱类型:不作或很少作类型检查C+是静态的强类型语言,C+数据类型,C+根据数据类型的提供方式(系统提供和用户定义),把数据类型分为:基本数据类型是C+语言预先定义好的数据类型,常常又称为标准数据类型或内置数据类型(built-intypes),它们都是简单类型。构造数据类型是指由用户利用语言提供的类型构造机制从其它类型构造出来的数据类型,它们大多为复合数据类型(枚举类型除外)。抽象数据类型是指由用户利用数据抽象机制把数据与相应的操作作为一个整体来描述的数据类型。它们一般为复合数据类型。,C+基本数据类型,C+基本数据类型指的是语言预定义的数据类型,称为标准或内置数据类型,C+基本数据类型对应着能由计算机直接表示和处理(机器指令能对它们直接进行操作)的数据类型,包括:整数类型实数类型字符类型逻辑类型空值类型,整数类型,整数类型用于描述通常的整数。包括:intshortint或shortlongint或long“shortint”的范围“int”的范围“longint”的范围unsignedint或unsignedunsignedshortint或unsignedshortunsignedlongint或unsignedlongunsigned(无符号)整数类型只能表示正整数,它们所占的内存大小与相应的有符号整数类型相同,但所表示的最大正整数比相应的有符号整数类型所表示的最大正整数要大(大约一倍)。,整数类型数据在计算机内部通常用补码表示:正整数的补码为它的二进制原码表示;负整数的补码为把相应正整数的二进制表示中各个二进制位取反后得到的整数加1。例如:如果用一个字节存储整数类型数据,则12和-12的补码分别为:00001100和11110100。,整数类型的内部表示,实数类型,实数类型又称浮点型,它用于描述通常的实数。包括:float(单精度型)double(双精度型)longdouble(长双精度型)“float”的范围“double”的范围“longdouble”的范围,实数类型的内部表示,在计算机内部,实数表示成:a2b,a:尾数;b:指数在实数的内存空间中存储的是尾数和指数两部分,它们均采用二进制表示。有些十进制小数是不能精确表示成二进制小数的。例如,十进制小数0.1就无法精确地用二进制表示。,字符类型,字符类型是用于描述文字类型的数据。包括:charsignedcharunsignedcharwchar_t字符在计算机中存储的是它的编码。char、signedchar和unsignedchar表示单子节编码的字符。wchar_t表示多字节编码的字符。C+允许把字符类型的数据当作整数类型数值进行算术运算。对signedchar,把字符编码看成有符号整数。对unsignedchar,把字符编码看成无符号整数。,常用的字符集及其编码,ASCII字符集10个数字26个英文字母(包括大、小写)其它一些常用符号(如标点符号、数学运算符等)09十个数字、26个大写英文字母以及26个小写英文字母的编码各自是连续的一个字节编码,最多表示256个字符用char、signedchar或unsignedchar类型描述,常用的字符集及其编码(续),Unicode(国际通用字符集)大部分语言中的字符24个字节用wchar_t描述GB2312(简体中文)2个字节用2个unsignedchar描述Big5(繁体中文)2个字节用2个unsignedchar描述Shift-JIS(日文)2个字节用2个unsignedchar描述,逻辑类型,逻辑类型用于描述“真”和“假”这样的逻辑值,它们为条件表达式的计算结果,分别表示条件的满足和不满足。在C+中,逻辑类型用bool表示,它的值只有两个:true和false,分别对应“真”和“假”。逻辑值也可以参加算术运算:true对应1、false对应0其它类型的数据可以转换成逻辑型:0-false非0-true,空值类型,在C+中提供了一种值集为空的类型:空值型(void),用以表示:没有返回值的函数的返回类型通用指针类型(void*),在C+中,常常把各种int型、char型以及bool型统称为整型(integraltypes);把整型和实数类型统称为算术类型(arithmetictypes)。,整型(integraltypes)和算术类型(arithmetictypes),sizeof,在不同规格的计算机上,各种数据类型的数据的取值范围可能不一样。在C+中,可以通过“sizeof(类型名)”或“sizeof(变量名)”来计算各种数据类型的数据所占的内存空间大小(字节数)。标准库的头文件climits(或limits.h)定义了所有整型的取值范围,标准库的头文件cfloat(或float.h)定义了所有实数类型的取值范围。,typedef,C+允许在程序中给已有数据类型取一些别名,格式为:typedef;例如:typedefunsignedintUint;unsignedintx;Uintx;typedef并没有定义新类型。便于程序的阅读和编写,并使程序简明、清晰和易于修改。,数据的表示,在程序中,数据以两种形式存在:常量和变量。常量:在程序执行过程中不变(或不能被改变)的数据,如:圆周率、一个星期的天数等。变量:在程序执行过程中值可变的数据,如:2*PI*r中的r。,常量,C+把常量分为:整数类型、实数类型、字符类型、逻辑类型、字符串类型以及指针类型。在C+程序中,常量可以用两种形式表示:字面常量:在程序中通过直接写出常量值来使用的常量,通常又称为直接量(literal)。符号常量(命名常量):通过常量定义给常量取一个名字并指定一个类型,在程序中通过常量名来使用这些常量。,字面常量(直接量),C+的字面常量有:整数类型常量实数类型常量字符类型常量字符串常量,整数类型字面常量,在C+程序中,整数类型常量可以用十进制、八进制或十六进制形式来书写:十进制形式。由09数字组成,第一个数字不能是0(整数0除外),如:59,128,-72为整数类型常量的十进制表示;八进制形式。由数字0打头,07数字组成,如:073,0200,-0110为八进制表示;十六进制形式。由0 x或0X打头,09数字和AF(或af)字母组成,如:0 x3B,0 x80,-0 x48,为十六进制表示可在整数类型常量的后面加上l或L,表示longint类型的常量,也可在整数类型常量的后面加上u或U,表示unsidnedint类型的常量,,实数类型字面常量,在C+程序中,实数类型常量采用十进制形式书写(在计算机内部采用二进制存储)。实数类型常量有两种表示法:小数表示法和科学表示法。小数表示法:由整数部分、小数点“.”和小数部分构成,如:456.78,-0.0057,5.,.5。科学表示法:在小数表示法后加上一个指数部分,指数部分由E(或e)和一个整数类型数构成,表示基数为10的指数,如:4.5678E2,-5.7e-3等。实数类型常量为double型。可以在实数类型常量后面加上F(f)以表示float型,如:5.6F。也可在实数类型常量后面加上L(l)表示longdouble型,如5.6L。,字符类型字面常量,字符常量是由两个单引号()括起来的一个字符构成,其中的字符写法可以是:字符本身,如:A转义序列,由打头的一串符号字符的编码八进制:ddd,如:101十六进制:xhh,如:x41特殊表示,如:n(换行符)、r(回车符)、t(横向制表符)、b(退格符)等注意:反斜杠()应写成:单引号()应写成:双引号()可写成:或,字符串类型字面常量,字符串常量是由两个双引号()括起来的字符序列构成,其中的字符的写法与字符类型常量基本相同,即可以是字符本身和转义序列。如:Thisisastring.Imastudent.PleaseenterYorN:Thisistwo-linenmessage!,字符常量与字符串常量的区别,字符常量表示单个字符,其类型为字符类型(char);而字符串常量可以表示多个字符,其类型为常量字符数组(参见5.2.1节中的6)。字符常量用单引号表示;而字符串常量用双引号表示。对字符常量的操作按char类型进行;对字符串常量的操作按字符数组的规定。字符常量在内存中占一个字节;字符串常量占多个字节,其字节数为:字符串中的字符个数加上1。,A,A,A,A,0,符号常量,在程序中使用常量时,除了采用字面常量形式外,还可以首先通过常量定义给常量取一个名字并指定一个类型;然后,在程序中通过常量名来使用这些常量。符号常量的定义格式为:const=;或#define例如:constdoublePI=3.1415926;或,#definePI3.1415926,使用符号常量的好处,增加程序的易读性提高程序对常量使用的一致性增强程序的易维护性,变量,在程序中,其值可以改变的量称为变量。变量可以用来表示可变的数据。例如:在计算圆周长的表达式2*PI*r中,半径r就是一个可变的数据,它可能是通过用户输入得到,也可能由程序的其它部分计算得到。,变量的基本特性,变量名:用标识符表示类型:指定变量能取何种值、对其能进行何种运算(操作)以及所需内存空间的大小等。值:在类型的值集范围内可变。内存地址,变量的定义,C+语言规定:程序中使用到的每个变量都要有定义(有的语言不需要)。格式为:;或者=;例如:inta=0;intb=a+1;doublex=0.5;或:inta=0,b=a+1;doublex=0.5;,变量的声明,在C+程序中使用(访问)一个变量之前,必须对它进行声明。变量定义属于一种声明,称为定义性声明。变量声明的另一种形式为:extern;称为非定义性声明。在使用一个全局变量前,如果未见到它的定义,则需要采用非定义性声明。为了描述方便,把定义性声明称为定义,把非定义性声明称为声明。,/file2.cppvoidg()/定义externintx,y;/声明intz;/定义z=x+y;,/file1.cppintx=0;/定义voidf()/定义externinty;/声明x=y+1;inty=0;/定义intmain()/定义externvoidg();/声明y=x+2;f();g();return0;,变量定义与声明的区别,变量定义要给变量分配空间,变量声明则否。变量定义可以给变量赋初值(对变量进行初始化),变量声明则否。如:inta=1,b=2,c=3;/OKexternintd=4;/Error在整个程序中,一个变量的定义只能有一个,而对该变量的声明可以有多个。,变量值的输入,#include/插入一些在标准库中定义的输入/输出操作所需要的声明usingnamespacestd;/C+标准库中的程序实体是在名空间std中定义的。inti;doubled;.cini;/从键盘输入一个整数类型数给变量icind;/从键盘输入一个双精度浮点数给变量d上述的键盘输入也可以写在一条语句中:cinid;在输入时,一般用空白符(空格符、横向制表符或回车符)作为输入数据之间的分隔符,每一个输入数据的格式应与相应变量的类型相符。例如输入数据为:12凵3.4则i的值为:12,d的值为:3.4。输入的数据为:012凵3.4则i的值为:10,d的值为:3.4。输入的数据为:12a3.4则i的值为:12,d的值没有意义。,操作符(运算符),操作符用于描述对数据的运算。这里的数据称为操作数,它们可以是:常量变量函数调用其它操作符的运算结果通常情况下,操作符所指定的运算不会改变操作数的值(运算结果将保存在临时的存储单元中)。在C+语言中,有些操作符(如:赋值=、自增+、自减-等操作符)的运算在得到一个运算结果的同时,也会改变操作数的值,称这些操作符带有副作用。有副作用的操作有时会产生不良结果!,C+操作符的种类,算术操作符关系与逻辑操作符位操作符赋值操作符其它操作符,算术操作符,算术操作符的操作数类型一般为算术类型,有时也可以是枚举类型和指针类型。包括:取负“-”与取正“+”加“+”、减“-”、乘“*”、除“/”和取余数“%”操作符“/”用于整型操作数时表示整除,小数点后面的数将舍去,并且一般不进行四舍五入。例如:3/2的结果为1;-10/3的结果为-3取余数“%”操作符用于计算两个整型数相除的余数,操作数的类型应为整型和枚举类型。例如:10%3的结果为1;8%2的结果为0(a/b)*b+a%b=a,算术操作符(续),自减“-”和自增“+”intx=1,y;y=(+x)/x的值是2,y的值是2(先加后用)y=(x+)/x的值是2,y的值是1(先用后加)注意:操作符“-”和“+”是两个带副作用的操作符,操作数的类型转换,在C+中,进行算术运算前通常要对操作数进行类型转换,特别是对两个类型不同的操作数,往往要把它们转换成相同类型。算术运算的结果类型与转换后的操作数类型相同。C+的类型转换方式有两种:隐式转换和显式转换。隐式转换是指由编译程序按照某种预定的规则进行自动转换,基本原则:精度低精度高;显式转换是指由写程序的人在程序中用类型转换操作符明确地指出转换。,常规算术转换规则(usualarithmeticconversions),如果其中一个操作数类型为longdouble,则另一个转换成longdouble。否则,如果其中一个操作数类型为double,则另一个转换成double。否则,如果其中一个操作数类型为float,则另一个转换成float。否则,先对操作数进行整型提升转换(integralpromotions),如果转换后操作数的类型不一样,则按e)以后的规则再进行转换。,如果其中一个操作数类型为unsignedlongint,则另一个转换成unsignedlongint。否则,如果一个操作数类型为longint,另一个操作数类型为unsignedint,那么,如果longint能表示unsignedint的所有值,则unsignedint转换成longint,否则,两个操作数都转化成unsignedlongint。否则,如果一个操作数类型为longint,则另一个操作数转换成longint。否则,如果一个操作数类型为unsignedint,则另一个操作数转换成unsignedint。,整型提升转换(integralpromotions),对于char、signedchar、unsignedchar、shortint、unsignedshortint类型,如果int型能够表示它们的值,则这些类型转换成int,否则,这些类型转换成unsignedint。bool型转换成int型,false为0;true为1。wchar_t和枚举类型转换成下列类型中第一个能表示其所有值的类型:int、unsignedint、longint、unsignedlongint。,隐式转换的问题,隐式转换有时不能满足要求。例如:inti=-10;unsignedintj=3;i+j将得到错误的结果:4294967289再例如:inti=2147483647;/int类型中最大的正整数intj=10;i+j将得到错误的结果:-2147483639,显式转换(强制类型转换),显

温馨提示

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

评论

0/150

提交评论