第2章 基本数据类型及表达式(基本)_第1页
第2章 基本数据类型及表达式(基本)_第2页
第2章 基本数据类型及表达式(基本)_第3页
第2章 基本数据类型及表达式(基本)_第4页
第2章 基本数据类型及表达式(基本)_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

第二章程序的数据描述(I)--基本数据类型与表达式(基本)主要内容数据类型的概念C++基本数据类型常量与变量操作符表达式控制台的输入/输出数据类型数据是程序的一个重要组成部分,每个数据都属于某种数据类型。一种数据类型可以看成由两个集合构成:值集:规定了该数据类型能包含哪些值(包括这些值的结构)。操作(运算)集:规定了对值集中的值能实施哪些运算。例如:整数类型就是一种数据类型,它的值集就是由整数所构成的集合,它的操作集包括:加、减、乘、除等运算。数据类型一般可以分为:简单数据类型:值集中的数据是不可再分解的简单数据,如:整数类型、实数类型等;复合数据类型:值集中的数据是由其它类型的数据按照一定的方式组织而成,如:表、向量、矩阵等。区分数据类型的好处对数据进行分类,便于对数据进行描述和处理。提高程序的可靠性,便于编译程序自动进行类型一致性检查。便于产生高效的可执行代码。C++数据类型基本数据类型C++语言预先定义好的数据类型,常常又称为标准数据类型或内置数据类型(built-intypes),它们都是简单类型。构造数据类型用户利用语言提供的类型构造机制从其它类型构造出来的数据类型,它们大多为复合数据类型(枚举类型除外)。抽象数据类型用户利用数据抽象机制把数据与相应的操作作为一个整体来描述的数据类型。它们一般为复合数据类型。C++基本数据类型C++基本数据类型对应着能由计算机直接表示和处理(机器指令能对它们直接进行操作)的数据类型,包括: 整数类型实数类型字符类型逻辑类型空值类型整数类型整数类型用于描述通常的整数。根据精度分成:intshortint或shortlongint或long一般情况下,

“shortint”的范围≤“int”的范围≤“longint”的范围具体大小由实现决定,例如shortint占2个字节(-32768~32767)longint占4个字节(-2147483648~2147483647)int占2个或4个字节,一般由计算机的字长决定。在计算机内部,整数一般用2的补码表示。无符号整数类型为了能对非负整数进行单独描述,C++提供了无符号整数类型:unsignedint或unsignedunsignedshortint或unsignedshortunsignedlongint或unsignedlong它们所占的内存大小与相应的有符号整数类型相同,但所表示的最大正整数比相应的有符号整数类型所表示的最大正整数要大(大约一倍)。 实数类型实数类型又称浮点型,它用于描述通常的实数。根据精度可分为:

float(单精度型)

double(双精度型)

longdouble(长双精度型)一般情况下

“float”的范围<“double”的范围≤“longdouble”的范围float占4个字节(-3.402823466×1038~3.402823466×1038)double占8个字节(-1.7976931348623158×10308~1.7976931348623158×10308)longdouble占8个或10个字节在计算机内部,实数一般用IEEE754格式表示。字符类型字符类型用于描述文字类型数据中的一个字符。字符在计算机中存储的是它的编码。char:表示单子节编码的字符。wchar_t:表示多字节编码的字符。常用的字符集及其编码ASCII字符集一个字节编码,最多表示256个字符10个数字52个英文字母(包括大、小写)其它一些常用符号(如标点符号、数学运算符等)0~9十个数字、26个大写英文字母以及26个小写英文字母的编码各自是连续的在C++中用char类型描述常用的字符集及其编码(续)Unicode(国际通用字符集)2~4个字节可用于大部分语言中的字符C++用wchar_t描述

GB2312(简体中文)2个字节C++用2个char描述

Big5(繁体中文)2个字节C++用2个char描述

Shift-JIS(日文)2个字节C++用2个char描述逻辑类型逻辑类型用于描述“真”和“假”这样的逻辑值,分别表示条件的满足和不满足。在C++中,逻辑类型用bool表示,它的值只有两个:true和false,分别对应“真”和“假”。在大多数的C++实现中,bool类型的值一般占用一个字节的空间,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<已有类型><别名>;例如:typedefunsignedintUint;Uintx;

等价于:

unsignedintx;

typedef并没有定义新类型。其作用是便于程序的阅读和编写,并使程序简明、清晰和易于维护。数据在C++程序中的表示在程序中,数据以两种形式出现:常量:用于表示在程序执行过程中不变(或不能被改变)的数据。变量:用于表示在程序执行过程中可变的数据。例如,在计算圆的周长表达式2*PI*r中,2和圆周率PI是常量。半径r是变量,它的值可能在程序运行时从用户处得到,或由程序的其它部分计算得到。常量在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整数类型字面常量的默认类型为int,可在整数类型常量的后面:加上l或L,表示longint类型的常量,如:32765L加上u或U,表示unsignedint类型的常量,如:4352U同时加上u(U)和l(L)表示unsignedlong类型的常量,如:41152UL,或,41152LU实数类型字面常量在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。字符类型字面常量在C++程序中,字符常量是由两个单引号(')括起来的一个字符构成,其中的字符写法可以是:字符本身,如:'A'转义序列,由\打头的一串符号字符的编码八进制:'\ddd',如:'\101'十六进制:'\xhh',如:'\x41'特殊表示,如:'\n'(换行符)、'\r'(回车符)、'\t'(横向制表符)、'\b'(退格符)等注意下列字符的表示:反斜杠(\)应写成:'\\'单引号(')应写成:'\''双引号(")可写成:'\"'或'"'字符串类型字面常量在C++程序中,字符串常量是由两个双引号(")括起来的字符序列构成,其中的字符的写法与字符类型常量基本相同,即可以是字符本身和转义序列。如:"Thisisastring.""I'mastudent.""Pleaseenter\"Y\"or\"N\":""Thisistwo-line\nmessage!"存储字符串时,往往要在最后一个字符的后面存储一个字符'\0',表示字符串结束。字符串常量的类型为一维的常量字符数组(构造数据类型)。符号常量符号常量是指先通过常量定义给常量取一个名字,并可指定一个类型;然后,在程序中通过常量名来使用这些常量。符号常量的定义格式为:

#define<常量名><值>或

const<类型名><常量名>=<值>;例如:

#definePI3.1415926或,

constdoublePI=3.1415926;符号常量的使用:2*PI*r使用符号常量的好处增加程序的易读性constintPASS_SCORE=60;constintMINUTES_PER_HOUR=60;提高程序对常量使用的一致性3.14、3.1416、3.1415926增强程序的易维护性constdoublePI=3.14;...2*PI*r......PI*r*r...

constdoublePI=3.1415;变量程序中可变的数据用变量来表示。例如:在计算圆周长的式子“2*PI*r”中,半径r就是一个可变的数据,它可能是通过用户输入得到,也可能由程序的其它部分计算得到。变量的基本特性名字用于区别不同的变量,用标识符表示。类型指定变量能取何种值以及对其能进行何种运算(操作)。值在所属类型的值集范围内可变。内存空间和地址存储变量值的内存空间以及该空间的地址。变量的定义C++语言规定:程序中使用到的每个变量都要有定义(有的语言不需要)。变量定义格式为:

<类型名><变量名>;或者

<类型名><变量名>=<初值>;例如:inta=0;intb=a+1;doublex;或:inta=0,b=a+1;//同类型变量可以写在一起,用‘,’分开doublex;变量值的输入#include<iostream>//插入一些在标准库中定义的输入/输出操作所需要的声明usingnamespacestd;//C++标准库中的程序实体是在名空间std中定义的。inti;doubled;......cin>>i;//从键盘输入一个整数类型数给变量icin>>d;//从键盘输入一个双精度浮点数给变量d

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

在输入时,一般用空白符(空格符、制表符或回车符)作为输入数据之间的分隔符,每一个输入数据的格式应与相应变量的类型相符。例如:输入的数据为:12凵3.4↙

则i的值为:12,d的值为:3.4。输入的数据为:12↙3.4↙

则i的值为:12,d的值为:3.4。输入的数据为:12,3.4↙

则i的值为:12,d的值没有意义。操作符(运算符)操作符用于描述对数据的运算。这里的数据称为操作数,它们可以是:常量变量函数调用的结果其它操作符的运算结果例如,在下面的计算式子中,a+b-4(-a)*(b+c)a/f(10)x=a+、-(减法)、-(取负)、*、/、f(函数调用)以及=(赋值)都是操作符而a、b、4、c、10、x以及(-a)、(b+c)、f(10)都是操作数C++操作符的种类

算术操作符关系与逻辑操作符位操作符赋值操作符其它操作符算术操作符算术操作符用于实现通常意义下的数值运算。包括:取负“-”与取正“+”

,例如:-x

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

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

3/2的结果为1;-10/3的结果为-3操作符“%”用于计算两个整型数相除的余数。例如:

10%3的结果为1;8%2的结果为0“%”的操作数一般不为负数a%b按a-(a/b)*b计算算术操作符(续)自减“--”和自增“++”

单目操作符,把操作数减(或加)1可以前置,也可以后置:++x和x++前置与后置的区别是:intx=1,y;y=(++x)//x的值是2,y的值为2(先加后用)y=(x++)//x的值是2,y的值为1(先用后加)操作数类型一般为算术类型,有时也可以是枚举类型和指针类型。结果类型一般与操作数类型相同。算术操作可能会产生“溢出”等问题。关系操作符程序中经常要根据某个条件来决定其后续的动作,这里的条件往往体现为对数据进行比较。关系操作符用于对数据进行大小比较,有:>(大于),<(小于),>=(不小于),<=(不大于),==(相等),!=(不等)操作数为算术类型和枚举类型,关系操作的结果为bool类型的值:true或false。例如:

3>2的结果为true 4.3<1.2的结果为false 'A'<'B'的结果为true false<true的结果为true逻辑操作符逻辑操作符实现逻辑运算,用于复杂条件的表示。包括:!(逻辑非)&&(逻辑与)||(逻辑或)操作数为bool类型,例如:!(a>b)(age<10)&&(weight>30)(ch<'0')||(ch>'9')

结果为bool类型!true->false!false->truefalse||false->falsefalse||true->truetrue||false->truetrue||true->truefalse&&false->falsefalse&&true->falsetrue&&false->falsetrue&&true->true位操作在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(0x10:00010000)s=(s|0x40)//把第7位设置为1(0x40:01000000s=(s&0xF7)//表示把第4位设置为0(0xF7:11110111)位操作(续)移位操作

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

右移:把第一个操作数按二进制位依次右移由第二个操作数所指定的位数。右移时,低位舍弃,高位按下面规则处理:对于无符号数或有符号的非负数,高位补0对于有符号数的负数,高位与原来的最高位相同(适合于补码表示的整数)移位操作常常用于实现特殊的乘法和除法运算。例如,在某些情况下,把一个整型数按二进位左移一位相当于把该整型数乘以2,把一个整型数按二进位右移一位相当于把该整型数除以2,赋值操作除了通过输入操作来改变变量的值以外,通常,变量值的改变是通过赋值操作来实现。例如:a=x+y*z简单赋值操作符a=b复合赋值操作符+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=a#=b功能上等价于:a=a#(b)有时能提高效率第一个操作数通常为变量。赋值操作构成了冯•诺依曼计算模型的一个重要特征(状态转换),同时,也构成了冯•诺依曼计算的一个瓶颈。其它操作符

条件操作符(?:)d1?d2:d3如果d1的值为

温馨提示

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

评论

0/150

提交评论