




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,2,第3章,数据类型 _简单数据类型,本章目录,3.1 C+的字符集 3.2 标识符和关键字 3.3 数据类型 简单数据类型(一) 数组(二) 指针(三) 引用(四),数据是程序处理的基本对象 在程序中每种数据都应有确定的类型 每种数据类型的变量都有确定的存储长度、取值范围及允许的操作。 3. C+的字符集(CHARACTER SET) 每种语言都使用一组字符构造程序的基本单元, C+的字符集由下列字符组成: 大小写英文字母 和 数字字符 其他字符 * , . _ : ; ? “ | ! # % & ( ) (空格)等,3.标识符和关键字 (Identifiers and Reserved words) 程序设计语言中为变量、常量、类型、函数等 取的名字称为标识符。 标识符由大小写字母、数字和下划线组成,并 且只能以字母或下划线开始。 关键字是编译器已预定义好的,具有特定含义 的标识符,也称为保留字。 C+保留字 auto break case char const continue default do double else enum extern float for goto if int long register return short signed,sizeof static struct switch typedef union unsigned void volatile while bool catch class const_cast delete dynamic_cast explicit false friend inline mutable namespace new operator private protected public reinterpret_cast static_cast template this throw true try typeid typename using virtual wchar_t asm cdecl far huge interrupt near pascal export except fastcall saveregs stdcall seg syscall fortran thread 红色:C的32个关键字 黄色:C+补充的29个关键字 白色:BC和VC扩充的保留字,下列变量名哪些合法? Way_cool myCar case Bits32 Iptr cout A Lot -vv switch While 52select while,3.数据类型 程序中数据分为变量或常量,每个变量或常量都有确定的数据类型。,空类型 void 数 组 type 指 针 type * 引 用 type& 结 构 struct 联 合 union 枚 举 enum 类 class,用于定义基于基本数据类型和外部数据类型,外部 数据 类型,注:黄色标识的类型是C+中有而C没有的,其他两者皆有,类型修饰符 short (int ) long(int,double) signed, unsigned(char,int) 类型定义typedef 为已有类型名取一个新名字。 typedef int integer; integer a; /等价于 int a;,3.3.1整型,整数在计算机中的存储形式:二进制补码 整数的表示范围:见P67表3-2 整数的类型: signed, unsigned (char, short int, int , long int) 存储长度满足char=short int=int=long int,注: 长整数表示为 123l 123L 无符号整数表示为 123u 例如:b=02345L; c=235u+123u;,整型常数即整型常量(整数字面值),有三种表示方法: 十进制整数 123,-784 八进制整数 0123= 十六进制整数 注:八进制和十六进制只能表示正整数 例如: int a=23; long int b=02345; unsigned int c=0x79fa;,3.3.2 整数子类型,1、字符型 2、枚举型 3、布尔型(C+才有的类型),1、字符型(char) 字符的表示 单引号括起的字符,称为字符常量。 如: a, 9, + 字符的存储:1个字节(256种状态:对于signed char,此类型的0127用于ASCII编码,-1-128表示非正常状态;对于unsigned char 而言,此类型表示的整数范围为0255)。 由于char是int的子集,所以char数据可以参与到整数的运算中去,但是在输出上还是按本身类型输出。 int a=b; char c=97; int x=a+a; /x=98+7=105 coutaendl; / 输出:98 coutcendl; /输出:a,转义字符表示控制字符或具有特定用途的字符 a 0x07 响铃 0x27 单引号 n 0x0A 换行 ddd 13位八进制数 t 0x09 制表符 xhh 12位十六进制数 0x5c 反斜杠字符 ” 0x22 双引号 字符变量的初始化 char a=007, b=r, c=xab;,2、枚举型(enum Type) /应用举例:获取当前系统时间 枚举型是对整数区间的自定义类型,用户须为区间中的值取名。 enum color RED,BLUE,GREEN,WHITE,BLACK; Color是自定义的枚举类型。枚举成员RED,BLUE,GREEN等都是符号常量,枚举成员值按序初始化为0N。上例中REDBLACK的值分别为0。 在定义枚举类型时也可为其成员指定枚举值 : enum colorRED,BLUE=100,GREEN,WHITE,BLACK; 此时,RED 为0,BLUEBLACK分别为100 103。 一旦定义了枚举类型,该类型的变量的取值范围也确定了,即其变量只能取花括号中的枚举值。 color point=GREEN; 正确 color point=YELLOW; 错误 虽然枚举值对应整数,但是枚举变量却不能取得整数值。 例如:color c=0; /error:0是非枚举类型(虽然RED代表整数0) 枚举类型的作用:一般作为整数常量使用。,3、布尔型(bool)C+中的类型 bool型变量只有true和false两个逻辑值,在编译系统中,其定义相当于 enum bool false, true ; 由于bool型是整数的子类型,所以可以用任何整数给bool型变量赋值,但是任何非0整数给bool型变量赋值时,其值都为1,非整数的其他类型也一样,总之,只要非0,其值都为1。 bool a=3; /a为ture bool b=1; /b为ture bool c=a+b; /c为ture bool d=true; /d为ture bool e=a-b; /e为false 完整的例子 注意:bool是C+ 中的类型,C语言中没有此类型,但是C中有BOOL,使用BOOL需要包含头文件 在C中使用BOOL的完整的例子,3.3.3 浮点型,实数,也称浮点数,有float,double和long double三种类型 实型常量在书写时,默认为double类型,若要表示float类型,要在其后加上F或f。 float f1=19.2f; float f2=0.192e+02; /将double类型的值转换成float double d1=19.2; double d2=0.192e+02f; /将float类型的值转换成double long double ld1=19.2L; long double ld2=0.192e+02; /将double类型的值转换成long double 两种表示方法: ()定点数形式 1.123, 3.1415; ()科学计数法形式 123e5, 123E5都表示 有效位 float (4字节) 7位 double (8字节) 15位 long double (10字节) 19位,3.3.4 C-串与string,在C+中表示字符串的类型有以下三种,1、字符指针与字符串 (1)字符串常量 由一对双引号括起的字符序列称为字符串常量。 “How do you do?” “china” 字符串常量以0结束。 字符串常量通常存放在data area 的const 区中,并以0作为结束符,编译器记下其起始地址.即:地址代表了这个字符串常量。,由于字符串常量的地址属性,所以由相同字符组成的字符串常量是两个不同起始地址的字符串常量。 例如:/f0303.cpp #include using namespace std; int main( ) 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,(2)字符数组 数组中每个元素为字符的数组称为字符数组,字符数组可用单个字符常量初始化,也可用字符串常量初始化,例如: char buffer =“hello”; char buffer =h,e,l,l,o,0 定义数组时可以指定元素个数,也即数组的大小;一旦指定了元素个数,则给数组赋值的元素个数一定要小于等于指定的个数。 如: char buffer7=“hello!”; /right char buffer6=“hello!”; /error (3)字符指针 指向字符类型的指针称为字符指针。 如: char * str=“abc”; 字符串常量和字符数组名都具有地址特性,当把它们赋给一个字符指针后,编译器规定: 输出字符指针就是输出字符串; 输出字符指针指向的对象(*),就是输出单个字符。,二者等价,例如: #include using namespace std; void main( ) char buffer10=“ABC”; char *pc; pc=“hello”; coutbufferendl; /输出ABC coutpcendl; /输出hello pc+; coutpcendl; /输出ello cout*pcendl; /输出e pc=buffer; coutpc; /输出ABC ,()字符数组和字符指针的区别 字符数组也是字符指针,但是是字符指针常量,即const char *类型,也即字符数组一旦定义好,字符数组名是不能被重新赋值的 而这里的字符指针类型char*用来定义字符指针变量,它被赋值后是可以再次赋值的 访问单个字符的方式不一样,字符数组采用数组名加下标的方式,字符指针采用字符指针加*的方式 例如: #include using namespace std; void main( ) char buffer10=“ABC”; char *pc=“hello”; coutbufferendl; /输出ABC coutpcendl; /输出hello pc=“hi”; /right coutpc; /输出hi buffer=“hi”; /error coutbuffer2endl; /输出C字符 cout*pcendl; /输出h字符 ,字符串输出 调用格式: C+: cout 字符串; C: printf(“%s”,字符串名); puts(字符串首地址); 功能:输出字符串。 例如: char* s=“hello”; char ss=“Jim”; couts,ssendl;,(5)字符串的相关操作,char buffer10=“ABC”; char *pc=“hello”; printf(“%s”,buffer); /puts(buffer); printf(“%s”,pc); / puts(pc);,字符串输入 a.调用格式1: C+: cin字符串变量; C: scanf(“%s%s”,s1,s2); 功能:输入一个无空白字符的字符串。 例如:char s150,s250; cins1s2 ; /scanf(“%s%s”,s1,s2); 若输入ABCD 123XYZ WTR 则s1和s2分别取得的值为ABCD和123XYZ,b.调用格式2: C+: cin.getline(字符数组名,变量大小) C: gets(字符数组名) 功能:从键盘输入一个以enter键标志结束的字符串。 例如: char s81; cin.getline(s,81); / 也可以 gets(s);,关于char * 类型字符串的输入 字符指针的赋值可以通过程序中”=“赋值,也可以通过输入赋值 数组定义好后可以输入时直接赋值,但对于字符指针变量,应先分配空间再赋值 例如: C语言版字符指针类型字符串输入 C+版字符指针类型字符串输入,字符串连接函数strcat (要包含头文件) 调用形式: char* strcat(字符数组1,字符串2); 功能:将字符串2连接于字符数组1的后面,函数返回连接以后的结果. 例如: char str120=”This is a”; char str2 =” string”; / 也可以为char *str2=“ string.”; printf(“%sn“, strcat(s1,s2); printf(“%s,%sn“,s1,s2); 输出:,This is a string This is a strings , string,字符串拷贝函数strcpy (要包含头文件) 调用形式: char* strcpy(字符数组1,字符串2); 功能:将数组2 拷贝到 数组1中,并返回字符数组1 例如: char s110=“abcdef“; char *s2=“def“; printf(“%sn“,strcpy(s1,s2); printf(“s1=%s,s2=%sn“,s1,s2); 输出: def s1=def,s2=def 思考题: 若有 char s1=“abc”; char s2=“def”; /或者char * s2=“def”; 则使用”=“进行赋值s1=s2可不可以?为什么?,字符比较函数strcmp (要包含头文件) 调用形式: int strcmp(字符串1,字符串2); 功能:将两字符串的字符从左到右逐个进行比较.返回值为比较结果. 字符串1=字符串2 返回值为0 字符串1字符串2 返回值为1 字符串1字符串2 返回值为-1 例如: i=strcmp(”chinese”,”china”); 则: i等于1,测试字符串长度函数strlen (要包含头文件) 调用形式: int strlen(字符串); 功能: 测试字符串中字符个数,并将个数返回. 例如: char str110=”Turbo c”; cout strlen(str1); 输出: 7,求子串位置strstr (要包含头文件) 调用格式:char* strstr(字符串,子串); 功能:在字符串中寻找与子串相同的子串,如找到,返回该字符串的从子串起始处开始的后半部分,否则返回一空字符串。 例如:char s=“abcdefghi”; couts3 strstr(s,”def”); 则输出为:,d defghi,反转字符串strrev (要包含头文件) 调用格式:char * strrev(字符数组) 功能:将字符数组反转,并改变原来的存储,同时将反转后的字符串返回 例如: char s1=“abc”; printf(“%sn”,strrev(s1); /输出cba,改变字符串中的全部字符strset(要包含string.h) 格式:char* strset(字符数组, char b) 功能:将字符数组中的每个字符都用b字符来取代,并将改变后的字符数组返回。 例如:char s1=“abc”; coutstrset(s1,x),s1endl; 输出:xxx,xxx,查找单个字符strchr 格式:char* strchr(字符串, char b); 功能:在字符串中查找b字符,若找到,则返回从找到的位置开始后的整个字符串,若没找到,则返回null. 举例: #include #include using namespace std; void main() char s1=“abcde“; coutstrchr(s1,c)endl; /输出cde ,2、string类型,string是C+中的自定义类型,它可以方便地执行C-串所不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业承包合同下新增厨师补充协议范文8篇
- 压力真空罐安全培训流程课件
- 2025年区块链行业区块链技术应用前景与金融改革研究报告
- 2025年物联网行业物联网技术应用前景研究报告
- 2025年火箭航天行业商业化前景预测报告
- 2025年环保行业绿色环保产品市场前景研究报告
- 2025年虚拟现实行业VR技术与虚拟现实应用前景研究报告
- 商品车电器使用培训课件
- 商品混凝土安全技术培训课件
- 2025重庆建峰工业集团有限公司招聘77人笔试参考题库附带答案详解
- 股权代持协议(模板)8篇
- 《AI创意课件之设计》课件
- 医院会计笔试题目及答案
- 河南豫信电科所属公司招聘笔试题库2025
- GB/T 45345-2025金属及其他无机覆盖层工程用直流磁控溅射银镀层镀层附着力的测量
- 无人机教员聘用协议书
- 药物非临床研究质量管理规范
- 脑科生理病理图谱解读
- 全国青少年科技辅导员专业水平认证笔试考题
- (行业)常用表面处理工艺详解(行业讲座教学培训课件)
- 配电网安健环设施标准
评论
0/150
提交评论