版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,第2章 C+数据类型,2.0 C+词法 2.1 基本数据类型 2.2 常量和变量 2.3 运算符和表达式 2.4 复合数据类型,目录,2.0 C+词法,字符集 标识符 关键字 C标点符号,字符集,共3类符号,注:在字符串中可以使用任何字符,包括汉字、图形字符等, 不受语法限制。,关键字(保留字),关键字是一类有特定的专门含义的单词 凡列入关键字表的单词一律不得移为它用 如int,for ,main,class C+的关键字包括了C的关键字,编程时应熟悉哪些是关键字及其在程序中的位置,避免标识符同关键字重名!,Key word(reserved word),C+的关键字预定义的标志符,标识符
2、(identifier),标识符是程序员为程序中各种成分所起的名字(如:变量、函数、类名、对象名等) C+标识符构成规则: 合法标识符由字母或下划线开始 由字母、数字、下划线组成 大小写有区别 不能是c+关键字 标识符有效长度为32,对超过有效长度的字符忽略,编程风格标识符定义习惯,定义易读易记的标识符!使用描述性的名称适用于大型程序,如my_car,而不是用简单的n,m 变量名一般以小写开头,自定义类型名和一些函数名以大写开头。变量的写法有三种: 下划线式 my_car 驼峰式 myCar:以小写单词开头以后都是大写开头,象驼峰 匈牙利标记法:在变量名字前面加上表示数据类型的字符,这种方式多
3、用于window的类库和函数库中。 如int imyCar 表示整型变量 ipmyCar 表示整型指针变量,编程风格标识符的定义习惯,标点符号,运算符(operator) - * / 等 分隔符 (separator) 不表示任何实际操作,仅用于构造程序,界定或分割其他语法成分 ( ) ,:; 空白符: 在程序编译时的词法分析阶段将程序正文分解为词法记号和空白。空白符用于指示词法记号的开始和结束。 空格、TAB、换行符、注释/* */ /,一个符号可能有多种含义, 符号分类不是绝对的 c = a*b乘法 (*为运算符) int *p 指针 (*起到关键字作用),2.1基本数据类型,C+的数据类
4、型,基本数据类型 (系统定义和提供),非基本数据类型,数组 type 指针 type * 引用 type coutint(c1); 结果: A 65,布尔型bool,所占字节数在不同的编译系统中有可能不同,VC+6.0中为单字节 取值范围true,false 布尔型在运算中可以和整型相互转化 false:0 true:非0,无值型void,长度为,取值范围:无值即值为空 用途 函数不带参数:形参定义为void类型 int main(void) 函数无返回值:返回值定义为void类型 void add(int a, int b) 定义通用指针 void *p; void 类型不能定义void类型
5、的变量。 main返回值缺省为int。,32位机基本数据类型的字长及值域表,2.2常量和变量,2.2.1 常量 2.2.2 常量的说明const 2.2.3 变量,2.2.1 常量,常量是在程序运行中其值始终不变的量。 形式 文字常量:直接出现在程序中的数值。 符号常量: 就是标识符 const float pi3.1416 c+支持的文字常量: 整型 浮点型 字符型 字符串型 布尔型 枚举型,整型常量,通常意义的整数,如34,0,-4。 写法: 十进制 八进制 十六进制,20 /十进制 024 /八进制数以0开头 0 x14 /十六进制数以0 x开头,135L /long int 135U
6、/unsigned int 135UL /unsigned long int 135LU /unsigned long int,类型 缺省:int 后L或l表示long int 后U或u表示unsigned,零,实型常量,通常意义的实数 写法 十进制形式:123.45 科学计数法:1.2345E+2(1.2345e+2) 尾数E阶数 类型 缺省double 后F或f表示float 后L或l表示long double,例: 3.14159/double 3.14159F/float 3.14159L/long double,字符常量,用单引号引起来的单个字符。a ,3, 类型:char 例如 c
7、har str a ; 在内存中保存的是字符的ASCII码值。 写法(3种): 可显示字符:通常就用单引号引起来表示 a ,3, 不可显示字符(部分)和特殊符号: 转义序列表示法:指定字符 n /换行符 r /回车符 用一般转义序列表示所有字符: ddd 其中ddd表示八进制值 或xdd 其中dd表示十六进制值,a /字符a /字符 4 /字符4 /空格字符 n /换行符 r /回车符 07 /响铃符 62 /2 x61 /a,最高位取值?,最高位取值?,常用转义字符,写法: “”双引号括起,0个或多个字符, 其中不可显示字符由相应转义序列表示 字符串可以写在多行上,必须用反斜线表示下一行字符
8、是这一行字符的延续,字符串常量,“ ” /空串 abcd /一般字符串 anrb /带特殊符号的字符串,e-mail:the exchange of text messages and computer files over a communications network,such as a local area network or Internet,usually between computer or terminals,类型:字符串常量实际上是一个字符数组 组成:除显式给出的字符外,还包括字符结尾处标识字符串结束的符号0,字符串“abc”在内存中的存放形式占4个字节 虽然该字符串长度
9、为3,不包括0,,字符串常量VS.字符常量,布尔型常量,true 1 false 0 在内存中的值为1、0,2.2.2 常量的说明-const,也可以用一个标识符来代表一个常量,这个标识符就称为符号常量。 用修饰符const给文字常量起个名字 const float pi=3.1415926; 注意: 符号常量必须在定义时初始化。 符号常量定义以后就不能再修改其值。 用途 增加程序的可读性,可维护性。 防止不必要的修改:常引用,常对象见后章,2.2.3 变量,顾名思义,变量就是值可变的量。 每个变量由一个标识符命名。 每个变量具有一个特定的数据类型。,1命名变量名,变量名要遵守C+合法标识符的
10、规则: 不能是保留字 不能是C预先定义的库函数名,类名和对象名 以字母或下划线开头,中间不能有空格 变量名除了字母和数字外,只能用下划线 不超过31个字符 建议 变量名一般用小写字母(index) 标识符一般使用助记名字(on_loan,salary) 对于多个词构成的标识符,习惯上在每个词之间加_或内嵌的每个词第一字母大写(student_loan,StudentLoan),2变量定义和声明,C+中,变量一定要先声明再使用 变量定义vs.声明(二者格式类似) 变量定义:是为变量分配内存空间,编译器在“定义”处分配空间来存储对应类型的数据 变量声明:编译器不为变量声明分配空间,使用在另一个文件
11、中定义的变量时,需要声明该变量。,变量名即对应内存单元的命名。一个变量只能有一个位置,程序的每个变量只能被定义一次,而同一变量声明可多次。,变量定义:存储类型修饰符 类型 变量名; 多个同类型变量可在一行中定义,用逗号隔开 float a,b,c; /定义3个浮点型变量a,b,c extern int global; /声明外部变量global,3变量初始化,在定义变量时可以给变量赋一个初值,也就是对相应内存单元的赋值。(初值必须在编译时就能计算出值来。) 建议:为每个被定义的对象提供一个初始值(不是必须的,安全考虑),例:方式2(复杂数据类型): int i(10); double d(1.
12、2);,例:方式1: int i=10; double d=1.2;,初始化的形式(2种),4修饰符存储类型,变量的存储类型 extern 该变量在另一个文件中,这是变量声明。 register 寄存器变量,适于频繁使用的变量 static 静态变量 auto 用于局部变量的定义,缺省的无需再用 Volatile特殊变量,其值可以随时变化。,变量定义:存储类型 类型 变量名;,例:static long int sum;,程序中任何一种数据的使用包括赋值和引用。 将数据存放的相应的存储单元中称为赋值。int a3; 从某个单元中取出数据使用称为引用。 b=a; 变量vs.常量 变量与文字常量都
13、有存储区,并且有相关的类型。区别是变量是可以赋值的 文字常量不可寻址。 符号常量虽然有自己的存储区,也只相当于只读不写的变量。 每个变量都有两个值与其关联 地址值:变量名代表的存储单元 数据值:存储单元中的值。,2.3 运算符和表达式,2.3.1 算术运算符 2.3.2 赋值运算符 2.3.3 等值、关系和逻辑运算符 2.3.4 自增、自减运算符 2.3.5 条件运算符 2.3.6 位运算符 2.3.7 sizeof运算符 2.3.8 运算符优先级 2.3.9 表达式 2.3.10 数据类型转换,表达式 组成:运算符、运算数、() 结果值:执行表达式的运算,得到的结果。 表达式定义 最简单的表
14、达式:一个常量或变量 a; pi; 复杂的表达式:简单表达式的值继续参与运算 (表达式):其类型与值与未加括号一致 运算符 一元运算符、二元运算符、三元运算符 运算符具有优先级和结合性(决定了表达式运算的优先关系) 优先级:指不同运算符在运算中的优先关系 结合性:决定同优先级的运算符对操作数的运算次序,2.3.1 算术运算符,高,低,整除/和取模%,( / )两个整数相除的结果是整数。如果商含小数部分将被截掉。 22/7 /结果为3 (%)求余数,只能被应用整数上。(char,short,int,long) 22%7 /结果为1 当除数和被除数都是正数,结果为正; 若有一个负数,结果符号未定义
15、。 5/3有的机器得-1,而有的得-2,多数采取“向零取整”得1,2.3.2 赋值运算符,“=”将右侧的值送给左侧变量的存储单元中 int i=0; i=4*(1+2); 赋值规则: 右边表达式的类型与左边被赋值的变量的类型完全匹配(若不匹配会怎样?隐式转换) int i=2.8*4; /结果为11,而不是11.2 “”的左侧必须是左值 23=i * 5 /不合法! 赋值的结果是实际上被放在左操作数相关内存中的值 “”的结合性从右至左的,“”可以被连在一起 int i,j,k; i=j=k=10;,什么是左值?下页,赋值表达式左值 c=a+; /c1,a2先将a的值1赋给c运算,再增1 c=+
16、a; /c2,a2 c=(a+)+b /结果:3 , a先参与运算,再 c=(+a)+b /结果:4, a先,再参与运算 一般单独使用,表达式运算可读性不好,少用!,先使用后自加,先自加后使用,2.3.5 条件运算符,格式: 表达式1?表达式2:表达式3 运算方式: 先计算表达式1,若其值为真,则表达式2就为整个表达式结果,否则表达式3是表达式结果,条件运算符是C+中惟一具有3个运算元的运算符,int ia=5,ib=2,min; min=(iaib) ? ia: ib;,2.3.6 位运算符,其它运算处理的单位是字节,而位运算处理的单位是二进制位 位运算符的运算对象必须为整数 c+中所有的位
17、运算符如下: (按位求反), (右移), /int是4个字节 0000,0000,0000,0000 0001, 0010,0011,0100 b=a2 0000,0100,1000,1101 0 x48d b /0001,0010,0011,0100=1234 unsigned int b=a48d0 unsigned int c=a2; /0000,0100,1000,1101=48d unsigned int d=b ,先自加后使用,unsigned int i; 取其某位的值:(第二位) i sizeof (x+1.0) sizeof (x) /值为8 ,x是double型,sizeo
18、f运算符仅计算表达式结果的类型所占字节数,并不对表达式求值,例2.2 使用sizeof运算符的程序(32位机),#include void main() coutsizeof(int)=sizeof(int)endl; coutsizeof(short int)= sizeof(short int)endl; coutsizeof(long int)= sizeof(long int)endl; coutsizeof(unsigned int)= sizeof(unsigned int)endl; coutsizeof(unsigned short int)=sizeof(unsigned s
19、hort int)endl; coutsizeof(unsigned long int)=sizeof(unsigned long int)endl; coutsizeof(char)=sizeof(char)endl; coutsizeof(unsigned char)= sizeof(unsigned char)endl; coutsizeof(float)=sizeof(float) endl; coutsizeof(double)=sizeof(double) endl; coutsizeof(long double)= sizeof(long double)endl; cout“si
20、zeof(int *)=”sizeof(int *)endl; /32位机指针为4个字节大小 coutsizeof(int ,本程序的执行结果如下:,不同机器数据类型长度不同,若程序中用到与数据长度相关的操作,应该先用sizeof确定各种数据类型的长度! 用sizeof获得自定义数据类型的长度!,2.3.8 运算符优先级,运算符优先级决定执行的先后顺序。 优先级相同时,则按结合性进行运算。 当表达式中出现了括号时,先计算括号中的子表达式值。,表2.5 运算符优先级表 (P20 优先级从高到低),CET()=4 k=3+(i=j) /表达式得到k值为7 (5)条件表达式: 由三目运算符组成的表达
21、式。 例: 已知 int n=2,n5 ? n+ :n- /n=3,(6)逗号表达式: 用逗号将若干个表达式连起来组成的表达式。 例: 已知 int n=2,则n+=3,n=15,n-=10是一个逗号表达式。 逗号表达式运算:从左到右依次求出各表达式的值, 最后一个表达式的值做为整个逗号表达式的值 上面的表达式的值为5。,2.3.10 数据类型转换,问题:算术表达式的求值及赋值过程中,若运算符两边的操作数类型不同,怎么办? 解决:如果属于类型相容的情况,如整数、字符、实数、布尔之间,系统可以自动进行类型转换。否则必须显式转换,int ival=0; ival=3.541+3; /ival为6,
22、数据类型转换种类: 隐式类型转换 显式类型转换,1隐式类型转换,隐式类型转换是由编译器自动完成。,不同类型数据赋值 右值转为左类型 int i=5.5; /i为5 不同类型数据混合运算 小类型转换为大类型,再运算 double n=2+3.3; /n为5.3,转换形式:2种,例: char cval; /1 byte bool found; /1byte unsigned long ulong; /4bytes cval+found+ulong /cval、found先提升为int,然后在提升为unsigned long,原则: 类型总是被提升为较宽的类型 所有含有小于整型的有序类型的算术表达
23、式,在计算之前其类型都会被转换成整型。,例: int i; i 10+a+2*1.25-5.0/4L的运算顺序如下:,(1)计算10+a ,先将a转换成int型97,结果为107(整型)。 (2)再计算2*1.25,将2和1.25都转换成double型,结果为double型的2.5。 (3)整数107和2.5相加,将107转换成double型再相加,结果为double型的109.5。 (4)将长整数4L转换成double型,5.0/4L结果为double型的1.25。 (5)进行109.5-1.25的运算,结果为double型的108.25。 (6)将108.25转换为整型,直接截取,i被赋值
24、为108。,2.显式类型转换(强制类型转换),显式类型转换是由程序员显式指出的类型转换。 转换形式有两种: (表达式) ()表达式 例: double f=3.98; int n=(int)f;/这样n为3。 强制类型转换优先级较高,只对紧随其后的表达式起作用,例:double dval; int ival12, ival23; ival1=ival2+(int )dval;/利用强制变换改变标准变换 dval=ival1/ival2; / 2/3=0,得不到预期想的分数效果 dval=(double)ival1/ (double) val2; / 0.666667 ok,2.4 复合数据类型
25、,C允许定义非基本的数据类型 复合数据类型包括 枚举(enum)、 结构(struct)、 联合(unoin)共用体、 位域 typedef定义自己的变量类型 类 此外还有由基本数据类型和复合数据类型导出的数据类型,包括数组、指针、引用等。,本节内容,2.4.1 枚举类型 2.4.2 结构 2.4.3 联合(共用体) 2.4.4 位域 2.4.8 typedef定义自己的变量类型,2.4.1 枚举类型,若一个变量只有几种可能的值,就可以定义为枚举类型,如星期,月。 枚举类型定义了一些整型符号常量的集合 (1)类型定义形式: enum 类型名标识符1, 标识符n; 标识符1,.,标识符n表示一些
26、整型符号常量,标志符的值默认由系统赋予整数值:从0递增。,enum Boolean No,Yes; /No等于0,Yes等于1,enum Color Red=-2,Yellow=-1, Green=2,Blue; /这样有:Red=-2,Yellow=-1,Green=2,Blue=3。,也可以自己定义标识符的值,定义方式是直接在定义语句的标识符后赋值。那些没有显式赋值的枚举值还是比前一个标识符值大1。,(2)定义枚举变量,today=Mon; /合法,today值为0 todayMay_day; /不合法,May_day不是枚举类型Day的元素 tomorrow=today;/合法,tomo
27、rrow值为0 int n=today; /合法,枚举变量可以给整型变量n赋值,为0 tomorrow=3; /不合法,枚举变量不能赋整数,类型不同 tomorrow=(enum Day)3 /合法,强制转换成了枚举变量,enum Day Mon,Tue,Wed,Thu,Fri,Sat,Sun; Day today,tomorrow; / 定义2个枚举变量,(3)枚举变量的运算 (a)赋值:枚举变量只能赋予其值表中的值,且不能直接赋予数值,(b)枚举类型变量可进行关系运算。 if (today=Mon). if (todaysun). (c)枚举变量不能直接输入,输出为其对应的整数值 。 co
28、uttoday; /输出值为0,例2.3枚举类型,#include void main() enum ColorRed,Yellow,Green,Blue; int n; for (n=Red;n=Blue;n+) coutn ; coutendl; ,2.4.2 结构体,(1)结构体类型定义: struct 成员类型 成员名1; 成员类型 成员名n; ,struct int no; char course; float grade; s3;,例:学生(学号/课程/成绩) struct stuGrade int no; char course; float grade; s2;,stuGrad
29、e s1;,(2)变量定义(3种) 结构名 变量名; 如s1 定义类型同时定义变量如s2 没类型名,直接定义变量如s3,相关数据共同表示一个信息,例:定义学生(学号,课程,成绩) struct stuGrade int no; char course; float grade; s2; void main() stuGrade s1; s1.no=1; s1.course=m; s1.grade=80; cout sizeof(s1); /计算结构的存储空间 ,(3)成员的引用 变量名.成员名,(4)初始化与赋值 定义变量时候允许初始化 C+允许同类型结构变量间赋值,一般数组变量是不允许的 分
30、别为结构的成员赋值,struct stuGrade int no; char course; float grade; s1=4001,m,80; /结构变量s1初始化 void main() /stuGrade s1=4001,m,80;/对!初始化 stuGrade s2; s2=s1; /结构变量间直接赋值 s2.no=4002; ,例2.4(演示) 程序使用了结构student,该结构中嵌套一个结构,#include void main() struct student int no; /学号 char name10; /姓名 char sex; /性别:m为男,f为女 struct
31、Day /日期结构 int year; /年 int month; /月 int day; /日 birthday; char classno; /班号 stud;,coutstud.no; ; coutstud.sex; coutstud.birthday.year; coutstud.birthday.month; coutstud.birthday.day; coutstud.classno; coutendl;,(5)结构类型变量不能整体输入、输出, 只能按成员输入输出,cout输出一个学生信息endl; cout学号:stud.noendl; cout姓名:
32、endl; cout性别:stud.sexendl; cout出生日期:stud.birthday.year年; coutstud.birthday.month月; coutstud.birthday.day日endl; cout班号:stud.classnoendl; ,本程序的执行结果如下:,2.4.3 联合,一种特殊的结构,一个联合中的数据成员在内存中的存储是互相重叠的,每个成员都在相同地址开始 C语言中联合的类型和变量定义: union 成员类型 成员1; 成员类型 成员2; 成员类型 成员n; ;,union exam int a; double b; char c
33、; x;,c,a,b,sizeof(exam) /8,成员的引用:x.a、x.b、x.c,例2.5 给出以下程序的执行结果。,#include void main() union value char c; int n; double d; data; coutsizeof(data)=sizeof(data)endl; data.c=a; coutdata.cendl; data.n=100; coutdata.nendl; data.d=12345.678; coutdata.dendl; ,结构与联合的嵌套 struct aircraft int wingspan; /翼幅 int passengers; /乘客 union /无名联合 float fuel_load; /战斗机装载的燃料 float bomb_load; /轰炸机装载的炸弹 int pallets; /运输机的货盘 ; ;,2.4.4 位域(紧缩结构体),例如下面的结构在32位机器上将占用16个字节: struct status unsigne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某汽车零部件生产质量办法
- 员工培训准则
- 应急响应操作细则
- 2026滨州月嫂面试题及答案
- 2026便利店巡店督导面试题及答案
- 2026中级安全工程师《建筑施工安全》课程精讲第二章
- 2025年海上风电运维成本控制策略
- 小学二年级下册数字谜知识点复习试卷
- 小学二年级下册科学材料特性知识点巩固试卷
- 小学二年级上册寓言单元(《坐井观天》《寒号鸟》《我要的是葫芦》)道理归纳与联系生活知识点试卷
- 粮食加工安全培训内容课件
- 国资监管数智化洞察与实践白皮书(发布版)
- 2025年血液净化室理论考试试题(附答案)
- 消毒供应中心湿包课件
- 肺康复考试题及答案
- 中科大火灾调查科学讲义03火灾现场勘查
- 四川化材科技有限公司新材料创新孵化基地-高功率光纤激光技术所地联合创新中心环评报告
- 华为基建管理办法
- 沥青混凝土供货方案及保障措施
- (高清版)T∕CES 243-2023 《构网型储能系统并网技术规范》
- 广元市选调公务员考试真题2024
评论
0/150
提交评论