基本数据类型与基本运算.ppt

上传人:tia****nde 文档编号:11675787 上传时间:2020-05-01 格式:PPT 页数:90 大小:1.02MB
返回 下载 相关 举报
基本数据类型与基本运算.ppt_第1页
第1页 / 共90页
基本数据类型与基本运算.ppt_第2页
第2页 / 共90页
基本数据类型与基本运算.ppt_第3页
第3页 / 共90页
点击查看更多>>
资源描述
1,第2章基本数据类型与基本运算,2.1基本数据类型及其派生类型2.2C+基本运算,2,2.1基本数据类型及其派生类型-,2.1.1四种基本数据类型2.1.2基本类型的派生类型2.1.3enum类型,3,类型概念的几个要点是:,(1)每一项数据应唯一地属于某种类型;(2)每一数据类型意味着一个有明确定义的值的集合;(3)同一类型的数据占有相同大小的存储空间;(4)同一类型的数据具有相同的(允许对其施加的)运算操作集。,4,2.1.1四种基本数据类型-,C+预定义了四种最基本的数据类型:整型、浮点型(也称实型)、字符型、无值型。整型数据说明符为int;浮点型又分为单精度浮点型float及双精度浮点型double;字符型用char;而无值型使用void。,5,VC6.0中bool也是一种预定义的基本数据类型,注意,某些C+编译(如VC6.0)认为bool也是一种系统预定义的基本数据类型,它代表逻辑型,仅有两个取值(一个常量值为标识符false,而另一个为标识符true)。其中的false代表逻辑值0(假),而true则代表逻辑值1(真)。通过基本数据类型能够导出(或派生出)其它的数据类型。程序中用到的所有变量以及有名常量都必须在使用前先说明其数据类型。字面常量由系统自动将其归属于某种数据类型(从其“字面书写格式”区分)。,6,1.int类型,表示整型数据。其值集(取值范围)为:-3276832767。通常占用两个字节的存储空间(注意,在VC6下,int等同于longint,占用四个字节的存储空间)。允许对其施加的运算(操作)有:算术运算(+、-、*、/、%等),关系运算(、=、=、!=)及一些其他运算。,7,int类型字面常量的“字面书写格式”为:,(1)十进制整数与数学中的表示完全相同。如:5980,-123,0,32766。组成十进制整数的基本字符为:0,1,.,9(共10个)。(2)八进制整数以数字0开头的整数为八进制整数。如:017,0321,-0777。组成八进制整数的基本字符为:0,1,.,7(共8个)。(3)十六进制整数以两个符号0 x(或0X)开头的整数为十六进制整数。如:0 x30,-0 xA9f3,0X777。组成十六进制整数的基本字符为:0,1,.,9,A,B,C,D,E,F(共16个,6个字母也可以小写)。,8,2.float与double类型,表示实型数据。float值集(取值范围)为:-3.4E383.4E38,通常占用四个字节的存储空间。double值集(取值范围)为:-1.7E3081.7E308,通常占用八个字节的存储空间。允许对其施加的运算(操作)有:算术运算(+,-,*,/等),关系运算(,=,=,!=)及一些其他运算。,9,实型数据字面常量的“字面书写格式”为:,(1)一般表示形式(也称定点表示法)与数学中的实数表示法相同。如:45.6,-1279.23,0.5。(2)指数表示形式(也称科学表示法)由尾数部分,字母E或e,后随指数部分构成。如:-592e12,12345.6E-2,0.123456e3。其中后两个数都表示实数123.456。,10,3.char类型,表示字符数据。其值集即为ASCII码集(书P31,表2.1),也即C+使用的全部基本符号。1个字符数据表示1个基本符号,占用一个字节的存储空间。在内存中,字符数据以ASCII码存储,即是说,系统是以整数来表示字符数据的。从而那些可施加于整数的运算(如算术运算及关系运算等)也可施加于字符型数据。,11,char类型字面常量的“字面书写格式”为:,(1)用单引号括起一个基本符号如:A,a,8,+,?。单引号为定界符,不属于字符型常量的一部分。(2)以反斜杠开头的转义字符-参看书p36用于将反斜杠后面的一个特定字符或反斜杠后面的三个数字字符转变成另外的意义。表示的仍是一个字符。通常表示那些不可显示的或从键盘无法输入的字符,以及那些被指定为特殊用途的字符。,12,例如:,n-代表一个字符,表示“换行”;t-代表一个字符,表示“制表符”,用于实现横向跳格;-代表一个字符,表示反斜杠字符本身;-代表一个字符,表示单引号;-代表一个字符,表示双引号;ddd-代表一个字符,该字符的ASCII码值为八进制的ddd(其中的d表示0到7的一个数字字符);,13,xhh-代表一个字符,该字符的ASCII码值为十六进制的hh(其中的h表示0到F的一个数字字符)。可知,使用ddd或xhh的方式是可以表示任一个字符数据的,如,101,x41,和A均可用来表示字符常量A。转义字符可以出现在字符串常量中,但仍代表一个字符。如,字符串常量tNankaiUniversityn中就出现了两个转义字符,该字符串常量共含有19个字符,要占用20个字节的存储空间。,14,下面的程序说明char型与int型所具有的密切关系:,#includevoidmain()charc1=A,c2=t,c3=t,c4=!;/t为水平制表符,与t表示不同的字符coutc1=c1,int(c1)=int(c1),c1+1=c1+1endl;/int(c1)把char型的c1变为int型coutc2=c2,int(c2)=int(c2)n;coutc3=c3,int(c3)=int(c3),A+a=A+aendl;coutc4=c4,int(c4)=int(c4),c4+0=c4+0n;/注意,A、a、0的ASCII码依次为65、97、48,15,输出结果:,c1=A,int(c1)=65,c1+1=66c2=t,int(c2)=116c3=,int(c3)=9,A+a=162c4=!,int(c4)=33,c4+0=81,16,4.void类型,void类型称为无值类型,该类型的值集为一空集。void类型是一种较抽象的概念。在C+语言中,没有返回值的函数应被说明为是返回void类型值的函数;而没有参数的函数,其形参表也应被说明为是void。另外,若某指针类型被说明为“void*”,则该指针可指向任一种数据类型。不可用void类型来说明变量。,17,2.1.2基本类型的派生类型-,基本类型(除void外)经过简单的字长或范围的变更,可形成它们的简单派生类型。派生类型说明符是通过在int、float、double、char前面加上类型修饰符而构成的。类型修饰符包括:signed(有符号)、unsigned(无符号)、short(短)和long(长)。,18,注意,signed和unsigned只能修饰char和int(意味着浮点型数据总是有符号的)。较常用的简单派生类型有:unsignedchar,取值范围为0255;unsignedint,取值范围为065535;longint取值范围为-21474836482147483647;unsignedlongint取值范围为04294967295。,19,省略掉int而进行简写,当被修饰的是int时,允许省略掉int而进行简写,如,“longint”可简写为“long”,“unsignedint”可简写为“unsigned”,“unsignedlongint”可简写为“unsignedlong”等。,20,2.1.3enum类型-,enum类型又称枚举类型,它是一种由用户参与定义的类型。其定义格式如下:enum;其中的由用户任起,是一个标识符。由一批构成,各间以逗号分割。而或者是一个标识符,或者以=的格式出现。,21,说明枚举变量,可以缺省。不缺省时意味着在定义枚举类型的同时,又说明了一批枚举变量。缺省时,可通过如下两种方式之一来说明枚举变量:;或:enum;其中的中的每一表项可以是变量名,也可以同时赋初值。,22,例如:,enumcolorRED,YELLOW=3,BLUEc1=YELLOW,c2;/定义了枚举类型名color;同时又说明了/两个枚举变量c1与c2,且给变量c1赋了初值colora,b=BLUE,c,d=RED;/说明了4个color类型(枚举类型)的变量a,b,c,d,/且给变量b与d赋了初值,23,关于enum类型有以下几点说明:,(1)一个enum类型实际上是int型的一个子集,其每一个枚举值(标识符)都代表着一个int型常量值。(2)n个枚举值(标识符)在定义时全没赋常量值时,它们自左至右分别与整数0,1,.,n-1对应。(3)若第i个枚举值(标识符)在定义时被赋于了整数m,则其未赋常量值的后续枚举值分别与整数m+1,m+2,.对应,直到下一个赋了值的枚举值或结束。(4)使用枚举量的主要优点是:既可增加程序的可读性,又可增加程序数据的安全性。增加程序可读性是显然的。由于枚举量的赋值范围被限定、且被说明的枚举量要进行类型检查,这样无疑会增加程序数据的安全性。,24,enum类型的示意性使用例子:,#includevoidmain()enumcolorRED,YELLOW=3,BLUEc1=YELLOW,c2;colora,b=BLUE,c,d=RED;coutREDYELLOWBLUEendl;coutc1=c1b=bd=d:.(2)!+-+-/结果等价于i=i+1;+i;/结果等价于i=i+1;x=i+;/结果等价于x=i;i=i+1;x=+i;/结果等价于i=i+1;x=i;,34,减量(-)的使用格式:,前缀减量:-后缀减量:-除将加法改为减法外,减量运算与上述的增量运算完全相同。,35,3.双目的加(+)、减(-)、乘(*)、除(/)和模(%)运算,使用格式:使用含义:相当于进行数学中的加(+)、减(-)、乘(*)、除(/)和取模(%)运算。例如:x+y,x-y,x*y,x/y,x%y。,36,有以下几点注意:,(1)做除法运算时,若参加运算的两个对象都为int类型时,则运算结果(即商)仍为int型数据(甩掉商的小数部分而取整)。如,7/3的结果为2,而7/4的结果则为1。(2)取模运算符主要用于整型数值计算。x%y是要求出x除以y所得的余数。如,7%3的结果为1,而7%4的结果则为3。注意,x%y的值总等于x-y*(x/y)的值。,37,注意系统自动进行的类型转换,(3)若参加运算的两个分量的类型不同时,系统会自动将“短”类型数据转换为等值的“长”类型数据而后再进行运算,而运算结果规定为“长”类型数据。所谓“短”类型数据是指该类型的数据占据的内存空间少而且所表示数据大小的范围也要小。如,char比int要短,而int又比float短等等。如:5/2为2,而5/2.0则为2.5。这是因为int型的5与float型的2.0进行运算时,系统会自动将int型的5转换为等值的float型的5.0后再进行运算,因而结果也必然为float型的2.5了。,38,4.优先级与结合性,.单目算术运算符优先于双目算术运算符;.*、/、%优先于+、-;.同级单目算术运算符的结合性是自右向左(如,-+i等同于-(+i),而-i+等同于-(i+));.同级双目算术运算符的结合性是自左向右(如,3+2-5等同于(3+2)-5,而x*y/z等同于(x*y)/z)。,39,2.2.3关系运算-,关系运算也称为比较运算,通过关系运算符来实现,通常用来代表满足某种关系的一个条件。,40,1.六种关系运算符,C+提供了六种关系运算,相应的关系运算符为:,=,=,!=。使用格式:其中的“”必须为数值类型或指针类型的表达式。使用含义:判断两个运算分量(可以是表达式)是否满足由关系运算符指定的关系。若满足的话,则得结果值1(相当于bool类型的true);否则的话,得结果值0(相当于bool类型的false)。,41,2.优先级与结合性,.算术运算符优先于关系运算符;.,=优先于=,!=;.,=同级,结合性是自左向右(想一下,“1=、00100110;d2=44=00101100):,d1,60,那么(d1=38=00100110;d2=44=00101100):,d11的结果将是19(将00100110的每一位都向右移动一个位后得结果00010011);将d1的结果赋值给无符号字符型变量d3,而后按int值输出d3将得结果217(将00100110的每一位都取反后得结果11011001)。,61,执行如下的程序,可对上述结果进行验证,#includevoidmain()unsignedchard1=38,d2=44;cout(d1d2)1)int(d3)endl;cout-217-,64,注意,(1)之所以d1”时,会产生语法错误!其原因是算符“/ok!输出“22+8*2=38”/算术运算符优先级高于“”,可以不加括号cout2!=3=2!=3;/error!-注意,算符“!=”比算符“”优先级低!cout(2!=3)=(2!=3);/加括号后,ok!coutk=i+=(k=i+)endl;/ok!-赋值算符“=”的优先级低于“0?x:-x的结果为x的绝对值。而s=(ab)?a:b;等价于条件语句if(ab)s=a;elses=b;C+中具有最低优先级的3个运算符依次为(从高到低):三目运算符,赋值运算符,逗号运算符。,73,3.sizeof字长提取运算,sizeof字长提取运算也称为字长提取符或长度运算符。它为一目运算,其运算对象可以是一个任何类型的变量或者是一个任何的数据类型(名)。运算结果为那一变量(或类型)所占存储空间的大小(即字节数)。但该运算的使用格式较特殊,类似于函数调用,形式为:sizeof()。另外,当运算对象为变量时,还可省去那对圆括号而简写为sizeof。,74,例如:,charc;floatf;则sizeof(c)与sizeofc以及sizeof(char)的结果都为1。而sizeof(f)与sizeoff以及sizeof(float)的结果值都为4。sizeof(double)的结果值为8。,75,编程序,通过sizeof运算了解系统对不同类型数据的内存实际分配情况,#includevoidmain()coutNumberofbytesused:n;coutchar:sizeof(char)endl;coutshort:sizeof(short)endl;coutint:sizeof(int)endl;coutlong:sizeof(long)endl;coutunsignedint:sizeof(unsignedint)endl;coutfloat:sizeof(float)endl;coutdouble:sizeof(double)-通过指针访问结构体或类对象的成员(间接成员选择);:-类限定或全局限定;.-访问结构体或类对象的成员(直接成员选择)。,78,(2)第2优先级中的charch=B;doublex=1.1;20/3.0+-i(及改变后的变量i)20/3+j+%3+0(及改变了的变量j)x*=i+19(及变量x)k+*j+*i+(及变量i、j、k)+k*+j*+i(及变量i、j、k)k=(i=5,j+=ch-,i+j)(及变量i、j、k、ch),80,【程序编制】,#includevoidmain()inti=1,j=2,k=3;charch=B;doublex=1.1;cout(x*=i+19);cout;x=xendl;,81,i=1,j=2,k=3;ch=B;x=1.1;cout(k=(i=5,j+=ch-,i+j);cout;i=ij=jk=kch=ch56;j=3x*=i+19=22;x=22k+*j+*i+=6;i=2j=3k=4+k*+j*+i=24;i=2j=3k=4k=(i=5,j+=ch-,i+j)=73;i=5j=68k=73ch=A,83,【剖析点评】,1.整数除以整数“20/3”的结果仍为整数(甩掉小数部分),而整数除以实数“20/3.0”的结果则为实数。2.前缀减量“-i”又作为分量参加其他运算,是先令i减1,然后再去参加运算;而后缀增量“j+”也作为分量参加其他运算,先令j参加其他运算,而后再令j加1。3.字符参加运算时,使用的是其ASCII码值,如字符0的ASCII码值为48,字符B的ASCII码值为66等。,84,【剖析点评】,4.“x*=i+19”等同于“x=x*(i+19);”但并不等同于“x=x*i+19;”。5.计算“k+*j+*i+”时,先使用当前i、j、k的值去参加运算,而后i、j、k变量各“增1”;而计算“+k*+j*+i”时,先令i、j、k变量各“增1”,而后再使用增长后的值去参加运算。6.逗号表达式“i=5,j+=ch-,i+j”的结果值是其最后一个子表达式“i+j”的值。,85,3常量和宏,const=例子:constintN=2000;预编译宏定义:类似于#include,在编译的时候由编译器自动替换#defineN2000区别:常量是一个分配独立内存空间的不可写的标识,宏只是为了程序员书写方便定义的助记符号,没有独立的存储空间,86,3变量和变量的作用域,变量定义:变量名表:|=|,87,3.1全局变量和局部变量,全局变量作用域是整个程序局部变量作用域是定义该变量的那一对例子:课本p62,88,3.2变量存储类型,auto自动C+系统默认register寄存器,用于经常调用的变量(p63)static静态任何一个地方定义都等同于全局变量extern外部存储在另外文件,编译的时候不检查,连结的时候检查,89,4名字空间,用来解决C+中的名字重复问题namespace调用usingnamespace课本p64,第二章结束,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!