第2章基本数据类型与表达式.ppt
《第2章基本数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《第2章基本数据类型与表达式.ppt(85页珍藏版)》请在三一文库上搜索。
1、第二章 程序的数据描述(I)基本数据类型与表达式,主讲人:侯海良 通信与控制工程系,主要内容,数据类型的概念 C+基本数据类型 常量与变量 操作符 表达式 控制台的输入/输出,数据类型,数据是程序的一个重要组成部分,数据的描述用数据类型来给出,每个数据都属于某种数据类型。 一种数据类型可以看成由两个集合构成: 值集:描述了该数据类型包含哪些值(包括这些值的结构)。 操作(运算)集:描述了对值集中的值能实施哪些运算。 例如:整数类型就是一种数据类型,它的值集就是由整数所构成的集合,它的操作集包括:加、减、乘、除等运算。,数据类型一般可以分为: 简单数据类型:值集中的数据是不可再分解的简单数据,如
2、:整数类型、实数类型等; 复合数据类型:值集中的数据是由其它类型的数据按照一定的方式组织而成,如:向量、矩阵等。 区分数据类型的好处 对数据进行分类,便于数据的处理。 提高程序的可靠性,便于编译程序自动进行类型一致性检查。 便于产生高效代码,C+数据类型,C+把数据类型分为: 基本数据类型 C+语言预先定义好的数据类型,常常又称为标准数据类型或内置数据类型(built-in types),它们都是简单类型。 构造数据类型 用户利用语言提供的类型构造机制从其它类型构造出来的数据类型,它们大多为复合数据类型(枚举类型除外)。 抽象数据类型 用户利用数据抽象机制把数据与相应的操作作为一个整体来描述的
3、数据类型。它们一般为复合数据类型。,C+基本数据类型,C+基本数据类型指的是语言预定义的数据类型,称为标准或内置数据类型 C+基本数据类型对应着能由计算机直接表示和处理(机器指令能对它们直接进行操作)的数据类型,包括: 整数类型 实数类型 字符类型 逻辑类型 空值类型,1 整数类型,整数类型用于描述通常的整数。采用二进制补码 存储;根据精度分成: int short int或short long int或long 编译器的机器字长总是与整型的位长有关如:32位编译器的整型数一定为32位长。一般情况下, “short int”的范围 “int”的范围 “long int”的范围 short in
4、t占2个字节(-3276832767) long int占4个字节(-21474836482147483647) int占2个或4个字节(VC中为4字节) 超过表示范围的整型数其值不可预料或者出错 如:int a = 12345678912345678912345; / 错,1.1 无符号整数类型,为了能对正整数进行单独表示,C+提供了无符号整数类型: unsigned int或unsigned unsigned short int或unsigned short unsigned long int或unsigned long 它们所占的内存大小与相应的有符号整数类型相同,但所表示的最大正整数比
5、相应的有符号整数类型所表示的最大正整数要大(大约一倍)。,整数类型数据在计算机内部通常用2的补码表示: 正整数的补码为它的二进制原码表示 负整数的补码为把相应正整数的二进制表示中各个二进制位取反后得到的整数加1 例如:如果用一个字节存储整数类型数据,则, 12的补码为: 00001100 -12的补码为:11110100。,1.2 整数类型的内部表示,用补码表示整型数便于加、减运算,特别地,减法可以转换成加法来做。例如:,5 加 -2 00000101 (5的补码) + 11111110 (-2的补码) 100000011 (3),2 减 8 = 2 加 -8 00000010 (2的补码)
6、+ 11111000 (-8的补码) 11111010 (-6),整型数的操作:+,-,*,/,%,=,!,=,=,=,&,|,&=,|=,&,|,&=,|=,!=,=,+=,-=,*=,/=,%=,+,-,,,? :,2 实数类型,实数类型又称浮点型,它用于描述通常的实数。包括: float (单精度型) double (双精度型) long double(长双精度型) 一般情况下 “float”的范围 “double”的范围 “long double”的范围 float占4个字节( 3.41038 ) double占8个字节( 1.710308 ) long double占8个或者10个字
7、节(VC为8个),2.1 实数类型的内部表示,在计算机内部,实数表示成: a2b a:尾数(Mantissa),b:指数(Exponent),它们均为二进制形式。 存储实数前首先需要对其进行规格化,即把尾数调整为1.xxx.形式,其中的整数位“1”和小数点不存储。例如, 对于实数12.5,经过下面的规格化之后, 12.5 = (1100.1)2 = (1.1001)223 存储的是:1001(尾数)和3(指数,存储时将转化成某种二进制形式)两个部分,3 字符类型,字符类型用于描述文字类型数据中的一个字符。字符在计算机中存储的是它的编码。 char:表示单子节编码的字符。 wchar_t:表示多
8、字节编码的字符。 字符型可以看成整型数的子集,表示范围: 有符号:-128127 无符号:0255 输出形式与整型数不同: int a = 65; char b = 65; couta“n”; coutb“n”; 结果为:65 A,常用的字符集及其编码,ASCII字符集 一个字节编码,最多表示256个字符 10个数字 52个英文字母(包括大、小写) 其它一些常用符号(如标点符号、数学运算符等) 09十个数字、26个大写英文字母以及26个小写英文字母的编码各自是连续的 用char、signed char或unsigned char类型描述,常用的字符集及其编码(续),Unicode(国际通用字符
9、集) 24个字节 可用于大部分语言中的字符 用wchar_t描述 GB2312(简体中文) 2个字节 用2个unsigned char描述 Big5(繁体中文) 2个字节 用2个unsigned char描述 Shift-JIS(日文) 2个字节 用2个unsigned char描述,C+允许把char类型数据当作比short int类型表示范围更小的整数类型数据来看待,可以进行算术运算,因此提供了: signed char,把字符编码看成有符号整数。 unsigned char,把字符编码看成无符号整数。 char可以看成:signed char或unsigned char,由具体的实现(编
10、译程序)决定。,4 逻辑类型,逻辑类型用于描述“真”和“假”这样的逻辑值,分别表示条件的满足和不满足。 在C+中,逻辑类型用bool表示,它的值只有两个:true和false,分别对应“真”和“假”。 逻辑值也可以参加算术运算: true对应1、false对应0 逻辑类型可以看成整型数的子集,其它类型的数据可以转换成逻辑型: 0 false 非0 true,5 空值类型,在C+中提供了一种值集为空的类型:空值型(void),用以表示: 没有返回值的函数的返回类型 通用指针类型(void *):任何类型的数据指针都可以赋给void类型的指针,sizeof,可以通过“sizeof(类型名)”或“s
11、izeof(变量名)”来计算各种数据类型的数据所占的内存空间大小(字节数) 。 标准库的头文件climits(或limits.h)定义了所有整型的取值范围, 标准库的头文件cfloat(或float.h)定义了所有实数类型的取值范围。 VC中各种基本数据类型所占的字节数计算,typedef,C+允许在程序中给已有数据类型取一些别名,格式为: typedef ; 例如: typedef unsigned int Uint; unsigned int x; Uint x; 注意: typedef并没有定义新类型,只是给已有的类型取个别名而已。 使程序简明、清晰和易于修改。其作用是便于程序的阅读和编
12、写。,数据在C+程序中的表示,在程序中,数据以两种形式出现: 常量:用于表示在程序执行过程中不变(或不能被改变)的数据,如: 圆周率:3.1415926 一个星期的天数:7 变量:用于表示在程序执行过程中可变的数据,如:计算圆的周长2*PI*r中的半径r,它可能在程序运行时从用户处得到,或由程序的其它部分计算得到。,常量,在C+程序中,常量可以用两种形式表示: 字面常量:在程序中通过直接写出常量值来使用的常量,通常又称为直接量(literal)。 符号常量(命名常量):通过常量定义给常量取一个名字并指定一个类型,在程序中通过常量名来使用这些常量。,字面常量(直接量),C+的字面常量有: 整数类
13、型常量 实数类型常量 字符类型常量 字符串常量,整数类型字面常量,在C+程序中,整数类型常量可以用下面形式来书写: 十进制。由09数字组成,第一个数字不能是0(整数0除外),如: 59,128,-72 八进制。由数字0打头,07数字组成,如: 073,0200,-0110 十六进制。由0x或0X打头,09数字和AF(或af)字母组成,如: 0x3B, 0x80, -0x48,整数类型字面常量的类型为int。可在整数类型常量的后面: 加上l或L,表示long int类型的常量,如:32765L 也可加上u或U,表示unsigned int类型的常量,如: 4352U 也可同时加上u(U)和l(L
14、)表示unsigned long类型的常量,如: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)表示long double型,如5.6L。,字符
15、类型字面常量,在C+程序中,字符常量是由两个单引号()括起来的一个字符构成,其中的字符写法可以是: 字符本身,如:A 转义序列,由打头的一串符号 字符的编码,如:A的表示 八进制:ddd,如:101 十六进制:xhh,如:x41 特殊表示,如:n(换行符)、r(回车符)、t(横向制表符)、b(退格符)等,注意下列字符的表示: 反斜杠()应写成: 单引号()应写成: 双引号(“)可写成:“或 “,字符串类型字面常量,在C+程序中,字符串常量是由两个双引号(“ ”)括起来的字符序列构成,其中的字符的写法与字符类型常量基本相同,即可以是字符本身和转义序列。如: “This is a string.“
16、 “Im a student.“ “Please enter “Y“ or “N“:“ “This is two-line nmessage! “ 存储字符串时,继承了C语言的串的特点,往往要在最后一个字符的后面存储一个字符0,表示字符串结束,称为C-串;,知道了C-串首地址,即可知道整个C-串,所 以可以藉字符首址(字符指针)来操作串,但要 注意,C-串的第一个字符与整个C-串的操作不 同,如, 串的输出操作: char* str = ”Hello”; cout *str endl; / 显示H cout str endl; / 显示Hello,str,*str,C-串结构,C-串不能直接比
17、较,因为字符指针的比较只是地址值的比较而不是串的字典序比较: cout(“join”=”join” ? ” : ”not “)”equaln”; / 字面值比较 char* str1=”good”; char* str2=”good”; cout(str1=str2 ? ” : ”not “)”equaln”; / 字符指针比较 char buffer16=”Hello”; char buffer26=”Hello”; cout(buffer1=buffer2 ? ” : ”not “)”equaln”; / 字符数组比较 结果: not equal not equal not equal,不
18、得不配备专门操作C-串的库函数string.h: strcpy(s1, s2); /从s2拷贝到s1 strcmp(s1, s2); /比较s1与s2 strcat(s1, s2); /连接s2到s1 strrev(s); /将s倒排 strset(s, c); /将s全置为c strstr(s, “ell”); /查找s中的子串 strchr(s,c); /查找s中字符c的位置 strlen(s) /计算串s的实际长度 等等,但字符指针操作C-串的安全性受到质疑: char* str1; char* str2 = new char5; strcpy(str2, ”ugly”); strcpy
19、(str1,str2); / 错: str1没有空间可储 strcpy(str2, ”Hello”); / 错: str2空间不够大 str2 = ”Hello”; / 错:原来的”ugly”空间脱钩,导致内存泄漏 根源:复制操作须以足够的目的地空间为前提,而所有串操作的空间调配都是人为安排的,串库函数一概不管,C-串和String流操作,采用C-串完成串的复制等基本操作 程序及结果 采用string流进行上述相应的操作 程序及结果 a.replace(0,9,9,c):a串从0到9的前9个字符替换为c 说明:采用string串方式操作更简便,并可以直接进行运算和比较,操作的空间调配不需要人为
20、安排的,string流对文件的操作: 将string实体看作是一个输入设备进行文件的读写 例:如果一个文件aaa.txt,有若干行,每行中含有不知道几个的整数,每行的整数和输出并写入文件bbb.txt: #include /输入输出流头文件 #include /文件流头文件 #include /包含string.h的头文件 using namespace std; void main() ifstream in(“aaa.txt”); ofstream out(“bbb.txt”); for (string s;getline(in,s); ) int a,sum=0; for (istrin
21、gstream sin(s);sina;sum+=a); coutsumendl; outsumendl; ,字符常量与字符串常量的区别,字符常量表示单个字符,其类型为字符类型(char);而字符串常量可以表示多个字符,其类型为一维的常量字符数组(构造数据类型)。 字符常量用单引号表示;而字符串常量用双引号表示。 对字符常量的操作按char类型进行;对字符串常量的操作按字符数组的规定。 字符常量在内存中占一个字节;字符串常量占多个字节,其字节数为:字符串中的字符个数加上1。,A,“A“,A,A,0,符号常量,程序中的常量除了采用字面常量形式外,还可以首先通过常量定义给常量取一个名字并指定一个类
22、型;然后,在程序中通过常量名来使用这些常量。 符号常量的定义格式为: 1) const double PI=3.1415926; 2) #define PI 3.1415926 比较: (1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换, (2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。 符号常量的使用: 2*PI*r,使用符号常量的好处,增加程序的易读性 提高程序对常量使用的一致性 增强程序的易维护性 注意 宏是简单的符号替换,建议多使用const定义符号常量 宏的缺陷及避免 #define
23、 ADD(a,b) a+b (1) ADD(a,b)*ADD(a,b) a+b*a+b (2) ADD(a+1,b)*ADD(a,b+1) a+1+b*a+b+1 避免方法: #define ADD(a,b) (a)+(b),变量,程序中可变的数据用变量来表示。 例如:在计算圆周长的表达式2*PI*r中,半径r就是一个可变的数据,它可能是通过用户输入得到,也可能由程序的其它部分计算得到。,变量的基本特性,名字:用标识符表示。 类型:指定变量能取何种值、对其能进行何种运算(操作)以及所需内存空间的大小等。 值:在类型的值集范围内可变。 内存空间和地址:存储变量当前值的内存空间以及该空间的地址。,
24、变量的定义,C+语言规定:程序中使用到的每个变量都要有定义(有的语言不需要)。格式为: ; 或者 =; 例如: int a=0; int b=a+1; double x; 或: int a=0,b=a+1; double x;,变量的声明,在C+程序中访问(使用)一个变量之前,必须对它进行声明。 变量定义属于一种声明,称为定义性声明。 变量声明的另一种形式为: extern ; 称为非定义性声明。 在使用一个全局变量前,如果未见到它的定义性声明,则需要对它进行非定义性声明。 为了描述方便,今后 把定义性声明称为定义, 把非定义性声明称为声明。,/file2.cpp void g() /定义 e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 数据类型 表达式
链接地址:https://www.31doc.com/p-3501421.html