C程序设计教程第2章——C数据类型.ppt_第1页
C程序设计教程第2章——C数据类型.ppt_第2页
C程序设计教程第2章——C数据类型.ppt_第3页
C程序设计教程第2章——C数据类型.ppt_第4页
C程序设计教程第2章——C数据类型.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

,第2章 C+数据类型,C+的数据类型,整型 字符型 实型 布尔型 空类型,单精度 双精度,基本数据类型 构造数据类型,数组 指针 结构、联合、枚举、类,数据类型,C+的基本数据类型有整型(int)、字符型(char)、浮点型(float、double)、布尔型(bool)、空类型(void)等类型。 不同类型的数据有不同的处理方法,数据类型决定了该类型对象的存储和对该类型对象能执行的操作和运算。,2. 1 基本数据类型,C+的字符集与保留字,C+的字符集如下 26个小写字母 a b c z 26个大写字母 A B C Z 10个数字 0 1 3 9 其他符号 ? 保留字也称关键字,具有固定的意义。C规定有个关键字,C+在C的基础上补充了个关键字。,标识符的概念与定义,标识符的定义: 一个字母或下划线开头,后面跟上若干个字母、数字和下划线。 标识符的作用: C+中所有的常量名、变量名、函数名、文件名等都应由标识符组成。,所有的信息(包括数据和程序指令)在计算机中都是以二进制0和1存储的。计算机内存单元的单位是字节,一个字节是8个二进制数位。 各种数据类型在计算机中存储时,使用的存储空间也都是以字节为单位计算的。,2.1.1 数据在计算机中的存储,数据类型与内存中信息的存放关系: (1)不同的数据类型的数据占用的内存空间不一定相同。而数据占用内存字节的多少决定了其能表达的数据范围。 (2)数据类型规定了信息存放的格式和解释信息的方式。计算机对内存中存放的同样信息的解释会因其所表示的数据类型的不同而不同。 例如:,在C+中,可以在基本的数据类型前加上一些数据类型修饰符来改变基本类型的意义,以便适合于各种情况的需要。 可以附加的修饰符有 short long signed unsigned 不同的数据类型可以使用的修饰符不同。,2.1.2 数据类型修饰符,基本数据类型数据的字节数和取值范围见书上P18,(1)short只能修饰int,short int数据类型占2个字节,一般比int短。(int一般占4个字节) (2)long可以修饰int和double类型,经它修饰的数据类型一般比没有修饰的数据类型长。 (3)signed和unsigned可以修饰int和char。signed表示有符号数(即有正负之分),unsigned表示无符号数(没有负数)。如果不加修饰符,int和char类型默认是有符号的,如果要让它们表示无符号的,则必须加上unsigned修饰。 (4)signed、unsigned可以和short、long一起修饰int,进一步表示短整数或长整数的特征。,2.2.1 常量 定义:在程序执行过程中,其值不能改变的量称为常量。 表示:常量在程序中一般直接给出数值或字符。 常量有两种表示形式:字面常量和符号常量。 字面常量根据数据类型,又可分为整型、浮点型、字符型、字符串型和布尔型等五种,每个字面常量的字面本身就是它的值; 符号常量是一个标识符,在程序中必须遵循“先声明,后使用”的原则。,2.2 常量和变量,一整型常量 整型常量的表示方法 1)十进制数 如 123,0,-4 2)八进制数(以0(零)开头) 如 010,034 3)十六进制数(以0x(零)或0X开头) 如 0xl0,0x34,0xAB C+中,十进制的数有正负之分,而八进制和十六进制数只能表示无符号整数; 当要将一个常数表示为是长整数时,可以在该数后面加上l 或者L 来表示。12表示int型的,12L 或12l 表示这是一个长整数; 数值在内存中是以二进制的补码形式存放的。,二、浮点型常量 实型常量的表示方法 1)小数形式 如 1.23, 3.14 ,1.23f ,-0.34 2)指数形式 如 123e5,1.23e7 ,12E3 ,0.3E2 在C+中,实型常量默认为是double型的,如果想表示单精度型常数,则必须在常数后面加上f或F。 E或者e的前面必须要有数字, E或者e后面的值必须为整数。 规范化的指数形式 (如1.23e7 ,1.2E4) 对于float型,在内存中的存放形式如下:,三、字符型常量 字符型常量的表示方法 1)单引号(撇号)括起来的个字符。 如 a ,A,3, + , 2)以开始的字符序列(转义序列) ,见P20 表2-2 如 a -响铃 ; n - 换行; t -水平制表; b -退格 ddd - 3位八进制; xdd - 2位十六进制 101 -字符A; x41 - 字符A 字符常量在内存中占1个字节,存放的是字符的ASCII码。,四字符串常量 用一对双引号将若干个字符括起来,称为字符串常量。 如 “abc”、“CHINA”、 “A”、 “I am a boy!n” 编译系统会自动在字符串常量的尾部加上0 作为结束标志。 如字符串“CHINA”在内存存放形式是 它的长度为6个字节,而不是5个字节。 五布尔常量 C+中布尔常量true表示逻辑真,false表示逻辑假。 编译系统在处理布尔型数据时,将false处理为0,将true处理为1,而不是将false和true这两个英文单词存放到内存单元中。布尔型量在内存中占1个字节,用来存放0或1。,六符号常量 在C+程序设计中可以用一个符号名代表一个常量,称为 符号常量,即以标识符形式出现的常量。 用预处理命令 # define(即不带参数的宏定义)定义符号常量,其定义形式为: #define 符号常量 字符序列 例如,#define PI 3.14 在程序编译时,先对预处理命令进行处理,把程序中凡是有PI的地方全部替换成3.14。,七枚举常量 用建立枚举类型来定义枚举常量 如 enum Color (RED,BLUE,GREEN,WHITE,BLACK) Color是枚举类型名(就如同系统本身定义的int,float等), RED,BLUE,GREEN, WHITE, BLACK是枚举常量,它们是一种符号常量。在内存中用整数0,1,2,3,4,表示其值。,在程序执行过程中,其值可以改变的量称为变量。 变量有三个要素:变量名、数据类型、值(作用域,存储期) 一 定义变量 定义变量的一般形式为: 变量类型 变量名表列; 例如 int i,j; float x,y,z; double d1,d2; char c1,c2; enum Color (RED,BLUE,GREEN,WHITE,BLACK); Color p,q=RED; /* 不能将整数赋值给枚举变量*/,2.2.2 变量,变量定义的注意事项: 1)变量名由标识符组成。 2)大写与小写字母是不同的,例如:TOTAL与total是不同的变量名。一般,变量名有小写字母表示以增加可读性。 3)变量名不可与C+的关键字、系统函数名以及类名同名。 4)变量名尽量能“见名知意”,一般不要用a,b,c等。 5)变量要先定义后使用; 6)变量的类型决定了其可以进行的运算;例如:int a,b;则a%b是正确的,而float a,b;a%b是错误的。,二 变量赋初值 C+语言允许在定义变量的同时赋初值。 如: int a=1; float f=3.14; int a=3,b,c=4*5; int a=1,b=1,c=1; (不能写成 int a=b=c=1;而应该写成int a=1,b=1,c=1;),三定义常变量(所谓常变量就是变量的值在程序运行期间不能改变的量) 定义常变量的一般格式为: const 类型说明符 常变量名=常量值; 如: const int a = 8; const int b=3+6; 定义常变量时必须同时对它初始化,此后它的值不能再改变。常变量不能出现在赋值号的左边。 例如 const int a; /* 是错误的 */ a=10; /* 是错误的 */,#define与const的区别 #define定义的是符号常量,const定义的是常变量。符号常量是用一个符号代表一个字符序列,并在编译预处理的时候,把所有符号常量替换为指定的字符序列,它没有类型,在内存中不存在以符号常量命名的存贮单元;而常变量具有变量的特征,它具有类型,在内存中存在以它命名的存贮单元,但是存储单元的值不允许变化。 由于const语句定义的常变量带有数据类型,便于系统进行类型检测,同时具有计算初值表达式的功能,所以建议多使用const来定义常量。,C+的运算符十分丰富,灵活。C+的运算符见P23。,2.3 运算符和表达式,C+的运算符十分丰富, 有13类,30多种, 其分类如下:,算术自反赋值运算符 (、*、/、),2.3.1 算术运算符和算术表达式 一 、基本的算术运算符 、 、 、 (模运算符,或称求余运算符) 注意: (1)两个整数相除,结果仍为整数。如 7/4的结果为1,1/2的结果为0。 (2)运算符的两个操作数必须为整数。如 74的结果为 3。 (3)如果参加+、-、*、/运算的两个数中有一个数是浮点数,则结果是double,因为C+在运算时对所有浮点数据都按double型数据运算。 二、算术表达式 用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C+语法规则的式子。 例如,(-b+sqrt(bb-4ac)/(2a),三、运算符的优先级与结合性 C+中规定算术运算符的优先级按先乘除后加减的规则,在一个运算对象两侧的运算符的优先级别相同的情况下,则按运算符规定的“结合方向”(结合性)处理。在C+中,规定算术运算符的结合方向分为 “自左向右”(也称“左结合性”,是运算的结合方向是从左向右的)和“自右向左”(也称“右结合性”,是运算的结合方向是从右向左的)。,基本算术运算符的运算对象、运算规则与结果、 结合性如表所示 :,四、自增、自减运算符 作用:是使变量(左值表达式)的值增1或减1。 +i,- -i (先增值,后使用) i+,i- - (先使用,后增值) 例如, int i=3,j; j=i+; /* j 等于3,然后 i 变为4 */ j=+i; /* i 先变为5, j 等于5 */ cout i+; /* 输出5,然后 i 变成6 */ 注意: (1) + 、- -只能用于变量,而不能用于常量或表达式。 如 8+或(i+j)+都是不合法的。 (2)+和- -运算符的结合方向是“自右至左”。 如 int i=3,j; j= - i+; -(i+) ,j=-3,i=4 (3) +和- -运算符的本质是给出前趋和后继。即如果用在循环语句中,循环变量自动加(减)1,如果用于指针变量,则指针指向下一个地址。,自增自减运算符的运算对象、运算规则与结果、 结合性如表所示 :,五、算术运算类型转换 不同类型的数据可以进行混合运算,运算之前C+会进行类型转换,转换规则如下: char unsigned char short unsigned short int unsigned int long unsigned long float double long double 如 a+10+3.1415+4*b 结果为double型 总的规则是:精度低的向精度高的转换。,2.3.2 赋值运算符和赋值表达式 “”是赋值号,作用是将右边表达式的值赋给左边的变量。 如: x=3+4; x8; x=x+1; int i; i = 3.14; /* i = 3 */ 注意:如果赋值运算符两侧的类型不一致,则进行自动类型转换,如:int a;a=1.25;则a的结果是1.,复合的赋值运算符 如: x= x+1 ; 可写为 x +=1 ; x= x-y ; 可写为 x -= y ; x= x*y ; 可写为 x *= y ; x= x%y ; 可写为 x %= y ; x=x/(y+1); 可写为 x/=y+1 ; 凡是二目运算符,都可以与赋值符一起组合成复合赋值符。,赋值表达式的一般形式为: 变量 = 表达式 赋值表达式的值就是被赋值的变量的值,又可以作为一般的表达式使用。 如 a=3+4; a=3+(c=4) ; a=(b=5); 注意:赋值运算符是右结合性的,例如:int a=10;a+=a-=a*a; 则实际运算的过程是a+=(a-=(a*a),所以(1)a=a-a*a=10-100=-90;(2)a+=-90,则a=-180 例:关于数的溢出 #include int main() short int a,b; a=32767; b=a+1; cout a “ “ b endl; return 0; ,运行结果: 32767 -32768,赋值运算符的运算对象及有关规则如下表:,对象数,名称,运算符,运算规则,运算对象,运算结果,结合性,双目,加赋值,减赋值,乘赋值,除赋值,模赋值,*,/ =,%=,a+=b相当于 a=a+(b),a=b相当于 a=a(b),a*=b相当于 a=a*(b),a/=b相当于 a=a/(b),a%=b相当于 a=a%(b),数值型,数值型,自 右 向 左,整型,整型,赋值,将表达式的值 赋予变量,表达式 的类型,2.3.3 关系运算和逻辑运算 一、关系运算 1)运算符 (大于)、 =(大于或等于)、 = =(等于)、 ! (不等于)。 其中,前4种的优先级别相同,后两种也相同。前4种高于后2种。 2)表达式及其值 a)定义:用关系运算符将两个表达式连接起来的式子,称关系表达式。 b)值:是一个布尔型值,即true“真”或false“假”。C+中用1代表真,用0代表假。同时非零值表示真。 例如,x3,x1 等都是合法的关系表达式,其值为0或1。,关系运算符的运算对象、规则与结果、结合性如下表所示,二逻辑运算 1)运算符 & 逻辑与(AND) | 逻辑或(OR) ! 逻辑非(NOT) 逻辑运算的真值表,双目运算符,单目运算符,对象数,名称,运算符,运算规则,结合性,单目,双目,双目,逻辑非,逻辑与,逻辑或,参见 上表,自右向左,自左向右,自左向右,!,&,|,逻辑运算符的运算对象、规则与结果、结合性如下表所示,2)逻辑表达式及其值 用逻辑运算符将逻辑量连接起来的式子称为逻辑表达式。逻辑表达式的值是一个布尔量“true”(1)或“false”(0)。 如, int a=4,b=5; a3 & b=5 a5 a & b !a & b 逻辑运算符的优先级为: !(非)&(与)|(或) (从高到低),的值为1 的值为1 的值为1 的值为0,3)关于短路表达式 a a=3+(b=4)+(b3)+(a & b); 则运算后a=9 四、运算符的优先级: 算术运算符 优先于 关系运算符 优先于 双目逻辑运算符 优先于 算术自反赋值运算符,2.3.4 条件运算符 一般形式 表达式1 ?表达式2 :表达式3 条件表达式的值= 如 max(ab) ? a:b ; 条件运算符的优先级比关系运算符和算术运算符低。 故 ab?a:b+1 等价于 ab?a:(b+1) 条件表达式也可作为一般的表达式使用。 如 x5+ (ab) ? a:b );(括号不能省,因为条件运算符的优先级比关系运算符和算术运算符低,表达式2 表达式1为真 表达式3 表达式1为假,2.3.5 逗号运算符 一般形式为: 表达式1,表达式2,表达式n C+顺序求表达式1、表达式2、表达式n的值。整个逗号表达式的值是表达式n的值。 如 (a=1,b=a+2,c=b+3) (a=3*5,a*4) (a=3*5,a*4,a+5) a(a=3*5,a*4),a5 逗号运算符是所有运算符中级别最低的。,值为6 值为60 值为20 值为65,2.3.6 位运算符 C+中的位运算符按二进制位进行运算,只适用于char、int和long类型。合理地使用位运算符会提高程序的执行效率。 C+中的位运算符可分为位逻辑运算符、位移位运算符两类。 一、位逻辑运算符 (按位求反) (按位与) | (按位或) (按位异或) 其中,“”是单目运算符,结合性为右结合,而其余三个为双目运算符,结合性为左结合。,例如,有如下语句: int a=13,b=11; cout a “ “ (a 执行后,输出结果为 -14 9 15 6 。 分析:(为了简化,这里仅用2个字节表示一个整数) 13 对应的二进制数为 0000 0000 0000 1101, 11 对应的二进制数为 0000 0000 0000 1011, 执行 13后为 1111 1111 1111 0010 (-14); 执行13 & 11后,结果为 0000 0000 0000 1001 (9); 执行 13 | 11后,结果为 0000 0000 0000 1111 (15); 执行13 11 后,结果为 0000 0000 0000 0110 (6)。,二、位移位运算符 C+中位移位运算符共两个 : “” (右移位) 它们都是双目运算符,作用是将一个整型或字符型量按其二进制的位模式左移或右移若干位。移动的位数由运算符右边的操作数(只能是正整数)给出。 例如: (为了简化,这里仅用2个字节表示一个整数) 15 2 结果是4 (0000 0000 0001 00000000 0000 0000 0100) 在没有发生溢出的前提下,将一个数左移n位相当于将这个数乘以2的n次方;将一个数右移n位相当于将一个数除以2的n次方(余数被舍弃)。,2.3.7 sizeof运算符 sizeof运算符用于计算某种数据类型在内存所占的字节数。其使用一般形式为: sizeof(类型名) 或 sizeof(表达式) 运算结果值为“类型名”所指定的数据类型或“表达式”的结果的数据类型所占的字节数。但在计算过程中,并不对括号中的表达式本身求值。 例如,下面的语句 short int a; cout sizeof(int) “ “ sizeof (a) “ “ sizeof(double); 在VC+中执行后,输出结果为 4 2 8 。,2.3.8 运算符优先级和结合性 常用运算符的优先级列举如下: ! (逻辑非运算) 算术运算 关系运算 & | 条件运算 赋值运算 逗号运算 运算符的优先级和结合性见P31的表2.4。其中,结合性有两类:自左至右的结合方向称为“左结合性”,自右至左的结合方向称为“右结合性”。,双目逻辑运算,优先级逐渐变高,2.3.9 数据类型转换 强制类型转换运算符的使用格式为: 类型名(表达式) 或 (类型名)表达式 强制类型转换将表达式值的类型强制转换为类型名所指定的类型。它是暂时性的、一时性的转换。 例如,float x; x=5.6; cout(int)x; / 输出结果为5 x 的类型被强制转换为 int 型时,值为5,一旦离开该语句,x的值仍然是5.6。,2.4 数据的输入和输出 输入输出是程序的一个重要

温馨提示

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

评论

0/150

提交评论