C第2章-基本数据类型与表达式(共67张)_第1页
C第2章-基本数据类型与表达式(共67张)_第2页
C第2章-基本数据类型与表达式(共67张)_第3页
C第2章-基本数据类型与表达式(共67张)_第4页
C第2章-基本数据类型与表达式(共67张)_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

主要内容数据类型的概念C++基本数据类型常量与变量操作符表达式数据类型的概念数据类型包含两个集合:值集:描述了该数据类型包含哪些值(包括这些值的结构);操作(运算)集:描述了对值集中的值能实施哪些运算。例如:整数类型值集:由整数所构成的集合操作集:加、减、乘、除等运算数据类型可以分为:简单数据类型:值集的数据是不可再分解的简单数据,如:整数类型、实数类型等;复合数据类型:值集的数据是由其它类型的数据按照一定的方式组合而成,如:向量、矩阵等。数据类型的概念(续)C++数据类型

基本数据类型是C++语言预先定义好的数据类型,又称为标准数据类型或内置数据类型(built-intypes),简单数据类型。构造数据类型由用户利用语言提供的类型构造机制从其它类型构造出来的数据类型,复合数据类型(枚举类型除外)。--结构类型抽象数据类型 由用户利用数据抽象机制把数据与相应的操作作为一个整体来描述的数据类型,复合数据类型。--类C++基本数据类型

对应着能由计算机直接表示和处理(机器指令能对它们直接进行操作)的数据类型

整数类型实数类型字符类型逻辑类型空值类型整数类型

int和计算机的字长有关shortint或short2个字节longint或long4个字节unsignedint或unsignedunsignedshortint或unsignedshortunsignedlongint或unsignedlong

“shortint”的范围≤“int”的范围≤“longint”的范围最大正整数比相应的有符号整数类型所表示的最大正整数要大

在计算机内部通常用补码表示:

正整数的补码为它的二进制原码表示;负整数的补码为把相应正整数的二进制表示中各个二进制位取反后得到的整数加1。整数类型的内部表示实数类型(浮点型)

float(单精度型)4个字节

double(双精度型)8个字节

longdouble(长双精度型)8或10个字节“float”的范围<“double”的范围≤“longdouble”的范围优先级:优先级高的先运算i+(int)js=(s&0xF7)//表示把第4位设置为0对unsignedchar,把字符编码看成正整数。十六进制:'\xhh',如:'\x41'特殊表示,如:‘\n’(换行符)、‘\r’(回车符)、‘\t’(横向制表符)、‘\b’(退格符)等p20转义序列,由\打头的一串符号操作符“/”用于整型操作数时表示整除,小数点后面的数将舍去,并且不进行四舍五入。对相邻的两个操作符,按下面规则确定(p36):unsignedint或unsigned变量:在程序执行过程中值可变的数据,如:2*PI*r中的r。1就无法精确地用二进制表示。否则,如果一个操作数类型为longint,则另一个操作数转换成longint。而字符串常量可以表示多个字符,其类型为常量字符数组。-10/3的结果为-3实数类型的内部表示

在计算机内部,实数表示成:

a×2b,

a:尾数;b:指数在实数的内存空间中存储的是尾数和指数两部分,它们均采用二进制表示。有些十进制小数是不能精确表示成二进制小数的。例如,十进制小数0.1就无法精确地用二进制表示。字符类型

charsignedcharunsignedcharwchar_t

字符类型的内部表示字符在计算机中存储的是它的编码。C++允许把字符类型的数据(字符的编码)当作整数类型数值进行算术运算。对signedchar,把字符编码看成有符号整数,最高位看作符号位。对unsignedchar,把字符编码看成正整数。

wchar_t

用于汉字这样的大字符集,适用于国际化程序设计。逻辑类型用于描述“真”和“假”这样的逻辑值,它们为条件表达式的计算结果,分别表示条件的满足和不满足。在C++中,逻辑类型用bool表示,它的值只有两个:true和false,分别对应“真”和“假”。在C++中又常常把逻辑值看成整数类型值,true对应1、false对应0,逻辑值也可以参加算术运算。空值类型

在C++中提供了一种值集为空的类型:空值型(void),用以表示:没有返回值的函数的返回类型通用指针类型(void*)

在C++中,常常把各种int型、char型以及bool型统称为整型(integraltypes);把整型和实数类型统称为算术类型(arithmetictypes)。整型(integraltypes)和

算术类型(arithmetictypes)sizeof

在不同规格的计算机上,各种数据类型的数据的取值范围可能不一样。可以通过“sizeof(类型名)”或“sizeof(变量名)”来计算各种数据类型的数据所占的内存空间大小(字节数)。标准库的头文件climits(或limits.h)定义了所有整型的取值范围,标准库的头文件cfloat(或float.h)定义了所有实数类型的取值范围。typedefC++允许在程序中给已有数据类型取一些别名,格式为:

typedef<已有类型><别名>;例如,下面为类型unsignedint取了一个别名Uint:

typedefunsignedintUint;

typedef并没有定义新类型。便于程序的阅读和编写,并使程序简明、清晰和易于修改。数据的表示

在程序中,数据以两种形式存在:常量和变量。常量:在程序执行过程中不变(或不能被改变)的数据,如:圆周率π、一个星期的天数等。变量:在程序执行过程中值可变的数据,如:2*PI*r中的r。常量 C++把常量分为:整数类型、实数类型、字符类型、逻辑类型、字符串类型以及指针类型。

在C++程序中,常量可以用两种形式表示:字面常量:在程序中通过直接写出常量值来使用的常量,通常又称为直接量(literal)。符号常量(命名常量):通过常量定义给常量取一个名字并指定一个类型,在程序中通过常量名来使用这些常量。字面常量(直接量) C++的字面常量有:整数类型常量实数类型常量字符类型常量字符串常量整数类型字面常量

在C++程序中,整数类型常量可以用十进制、八进制或十六进制形式来书写:十进制形式。由0~9数字组成,第一个数字不能是0(整数0除外),如:59,128,-72为整数类型常量的十进制表示;八进制形式。由数字0打头,0~7数字组成,如:073,0200,-0110为八进制表示;整数类型字面常量(续)十六进制形式。由0x或0X打头,0~9数字和A~F(或a~f)字母组成,如:0x3B,0x80,-0x48,为十六进制表示可在整数类型常量的后面加上l或L,表示longint类型的常量,也可在整数类型常量的后面加上u或U,表示unsidnedint类型的常量默认为int型实数类型字面常量

在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’(退格符)等p20字符类型字面常量(续)注意:反斜杠(\)应写成:'\\'单引号(')应写成:'\''双引号(")可写成:'\"'或'"'字符串类型字面常量

字符串常量是由两个双引号(")括起来的字符序列构成,其中的字符的写法与字符类型常量基本相同,即可以是字符本身和转义序列。如:

"Thisisastring." "I'mastudent." "Pleaseenter\"Y\"or\"N\":" "Thisistwo-line\nmessage!"字符常量与字符串常量的区别字符常量表示单个字符,其类型为字符类型(char);而字符串常量可以表示多个字符,其类型为常量字符数组。字符常量用单引号表示;而字符串常量用双引号表示。对字符常量的操作按char类型进行;对字符串常量的操作按字符数组的规定。注意:在存储字符串时,会在最后一个字符后面加上一个符号‘\0’.即字符串结束符因此,字符常量在内存中占一个字节;字符串常量占多个字节,其字节数为:字符串中的字符个数加上1。'A'"A"AA\0“ef\0\123\\\n89”占多少内存单元?(03秋)9符合C++语法规则的常量是?(02秋)4e0.5‘\87’0X5A“\”3,4符号常量

在程序中使用常量时,除了采用字面常量形式外,还可以首先通过常量定义给常量取一个名字并指定一个类型;然后,在程序中通过常量名来使用这些常量。 符号常量的定义格式为:

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<类型名><变量名>;变量声明

变量的定义与声明(续)变量定义与声明的区别是:变量定义要给变量分配空间,变量声明则否。变量定义可以给变量赋初值(对变量进行初始化),变量声明则否。如:

inta=1,b=2,c=3;//OKexternintd=4;//Error

在整个程序中,一个变量的定义只能有一个,而对该变量的声明可以有多个。//voidg()//定义{externintx,y;//声明

intz;//定义

z=x+y;}//intx=0;//定义voidf()//定义{externinty;//声明

x=y+1;}inty=0;//定义intmain()//定义{externvoidg();//声明

y=x+2;f();g();return0;}变量值的输入#include<iostream>//插入一些在标准库中定义的输入/输出操作所需要的声明usingnamespacestd;//C++标准库中的程序实体是在名空间std中定义的。inti;doubled;......cin>>i;//从键盘输入一个整数类型数给变量icin>>d;//从键盘输入一个双精度浮点数给变量d

上述的键盘输入也可以写在一条语句中:cin>>i>>d;

多个变量值输入时,用空格、回车、横向制表符分隔。输入数据应和变量的类型一致否则按照变量类型来赋值p24例子当从键盘上输入1.5

10时,写出下面程序的执行结果

#include<iostream.h>

void

mian()

{

int

a,b,c;

char

ch;

cin>>a>>ch>>b>>c;//从键盘上输入1.5

10

cout<<a<<endl<<ch<<endl<<b<<endl<<c;

}1.5ch(10)操作符(运算符)

操作符用于描述对数据的运算。这里的数据称为操作数,它们可以是:常量、变量、其它操作符的运算结果

通常情况下,操作符所指定的运算不会改变操作数的值(运算结果将保存在临时的存储单元中)。 但在C++语言中,有些操作符(如:赋值=、自增++、自减--等操作符)的运算在得到一个运算结果的同时,也会改变操作数的值,称这些操作符带有副作用。 有副作用的操作有时会产生不良结果。C++操作符的种类

算术操作符关系与逻辑操作符位操作符赋值操作符其它操作符算术操作符

算术操作符的操作数类型一般为算术类型,有时也可以是枚举类型和指针类型。取负“-”与取正“+”

加“+”、减“-”、乘“*”、除“/”和取余数“%”

操作符“/”用于整型操作数时表示整除,小数点后面的数将舍去,并且不进行四舍五入。

3/2的结果为1;-10/3的结果为-3取余数“%”操作符用于计算两个操作数相除的余数,操作数的类型应为整型和枚举类型。

10%3的结果为1;8%2的结果为0算术操作符(续)自减“--”和自增“++”

intx=1,y;y=(++x)//x的值是2,y的值是2(先加后用)y=(x++)//x的值是2,y的值是1(先用后加)注意:操作符“--”和“++”是两个带副作用的操作符操作数的类型转换在C++中,进行算术运算前通常要对操作数进行类型转换,特别是对两个类型不同的操作数,往往要把它们转换成相同类型。算术运算的结果类型与转换后的操作数类型相同。C++的类型转换方式有两种:隐式转换和显式转换。隐式转换是指由编译程序按照某种预定的规则进行自动转换,基本原则:精度低->精度高;显式转换是指由写程序的人在程序中用类型转换操作符明确地指出转换。常规算术转换规则

(usualarithmeticconversions)p25如果其中一个操作数类型为longdouble,则另一个转换成longdouble。否则,如果其中一个操作数类型为double,则另一个转换成double。否则,如果其中一个操作数类型为float,则另一个转换成float。否则,先对操作数进行整型提升转换(integralpromotions),如果转换后操作数的类型不一样,则按e)以后的规则再进行转换。整型提升转换

(integralpromotions)对于char、signedchar、unsignedchar、shortint、unsignedshortint类型,如果int型能够表示它们的值,则这些类型转换成int,否则,这些类型转换成unsignedint。bool型转换成int型,false为0;true为1。wchar_t和枚举类型转换成下列类型中第一个能表示其所有值的类型:int、unsignedint、longint、unsignedlongint。如果其中一个操作数类型为unsignedlongint,则另一个转换成unsignedlongint。否则,如果一个操作数类型为longint,另一个操作数类型为unsignedint,那么,如果longint能表示unsignedint的所有值,则unsignedint转换成longint,否则,两个操作数都转化成unsignedlongint。否则,如果一个操作数类型为longint,则另一个操作数转换成longint。否则,如果一个操作数类型为unsignedint,则另一个操作数转换成unsignedint。显式转换(强制类型转换)

显式转换是指在程序中用类型转换操作符显式地指出转换,显式转换又称强制类型转换。其格式为:

<类型名>(<操作数>)或

(<类型名>)<操作数>再例如:

inti=2147483647; intj=10; (double)i+j例如:

inti=-10; unsignedintj=3; i+(int)j关系与逻辑操作符

程序中经常要根据某个条件来决定其后续的动作,这里的条件为对数据进行比较和逻辑运算。 关系操作符 对数据进行大小比较,结果为bool类型的值:true或false。>(大于),<(小于),>=(不小于),<=(不大于),==(相等),!=(不等)例如:

3>2的结果为true 4.3<1.2的结果为false 'A'<'B'的结果为true false<true的结果为true

应避免对两个浮点数进行“==”和“!=”比较运算

x==y 可写成:fabs(x-y)<1e-6 x!=y 可写成:fabs(x-y)>1e-6关系与逻辑操作符(续)

逻辑操作符 逻辑操作符实现逻辑运算,用于复杂条件的表示中。

!(逻辑非)、&&(逻辑与)、||(逻辑或)!true->false!false->truefalse||false->falsefalse||true->truetrue||false->truetrue||true->truefalse&&false->falsefalse&&true->falsetrue&&false->falsetrue&&true->true例如:

!(a>b) (age<10)&&(weight>30) (ch<'0')||(ch>'9')位操作

在C++中提供了对整型和枚举类型数据按操作数的各个二进制位分别进行运算的操作,包括:逻辑位运算和移位运算。

逻辑位操作

~(按位取反),&(按位与),|(按位或),^(按位异或)~0→1,~1→00|0→00|1→11|0→11|1→10^0→00^1→11^0→11^1→00&0→00&1→01&0→01&1→1例:

s&0x10//判别s的第5位(从低位数)是0还是1 s=(s|0x40)//把第7位设置为1 s=(s&0xF7)//表示把第4位设置为0位操作

移位操作

<<(左移),>>(右移) 左移:把第一个操作数按二进制位依次左移由第二个操作数所指定的位数。左移时,高位舍弃,低位补0。例如: 0x3F61<<2的结果为0xFD84

右移:把第一个操作数按二进制位依次右移由第二个操作数所指定的位数。右移时,低位舍弃,高位按下面规则处理:对于无符号数或有符号的非负数,高位补0对于有符号数的负数,高位与原来的最高位相同赋值操作

通过赋值操作来改变变量的值。简单赋值操作符a=b当赋值操作的两个操作数类型不同时,把右边操作数转换成左边的操作数类型。复合赋值操作符+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=a#=b功能上等价于:a=a#b有时能提高效率,a为表达式时,a#=b中的a只计算在C++里,赋值是一种运算,结果是左边的操作数其它操作符

条件操作符(?:)d1?d2:d3如果d1的值为true或非零,则运算结果为d2,否则为d3。逗号操作符d1,d2,d3,...从左至右依次进行各个运算,操作结果为最后一个运算的结果逗号操作表示的计算更加清晰例如:x=a+b,y=c+d,z=x+ysizeof sizeof(<类型名>)或sizeof(<表达式>)计算某类型的数据占用的内存大小(字节数)

表达式

定义表达式是由操作符、操作数以及圆括号所组成的运算式。其中,操作数可以是常量、变量或函数调用,也可以是用圆括号括起来的表达式。例如:

(a+b)*c/12-max(a,b)

表达式类型算术表达式关系/逻辑表达式地址表达式等左值表达式和右值表达式根据表达式能否放在赋值操作的左边左值表达式有明确的内存地址该地址中内容可被修改++前置、--前置、=可以改变操作数的值++前置、--前置不改变操作数的值,将操作结果存在一个临时变量中变量x,++x,--x,x=?为左值表达式常量,x++,x--不是左值表达式定义了intk,j;没有语法错误的表达式是(05秋)(k++)++(k+3)=5k--/=5k---jDvoid

mian()cin>>i>>d;关系与逻辑操作符(续)cout<<endl;在实数的内存空间中存储的是尾数和指数两部分,它们均采用二进制表示。把整型和实数类型统称为算术类型(arithmetictypes)。co

温馨提示

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

评论

0/150

提交评论