




已阅读5页,还剩63页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章C+语言初步,本章主要内容1.C+语言的字符集、词汇2.基本数据类型、运算符与表达式3.C+中的常量与变量4.C+中的I/O5.基本控制结构6.数组、结构体、共用体与枚举类型7.指针、引用与动态内存分配8.函数与函数重载,1,1C+语言的字符集与词汇,1.字符集,(1)字母ABCDZabcdz(2)数字0123456789(3)特殊符号空格!#$%_|,2,2.词汇:五类,(1)关键字(保留字):系统预定义且有专门含义的单词,不允许另作它用.C+的关键字包含了C语言的几乎所有关键字.C+的关键字随C+的发展而不断增加(2)标识符:由程序员为程序中的各种成份定义的名字.以字母或_开头,由字母、_、数字组成.不能是关键字.C+中的标识符区分大小写.见名知义的原则.C+系统对标识符的长度有一定限制(3)直接常量(4)运算符(5)分隔符:用来分隔不同的语法成份的单词空格;#()/*/*C+的两种注释:./*/./注释到行尾,3,2基本数据类型、运算符与表达式,一.数据类型每一项数据都唯一的属于某种类型每一数据类型都有一个明确定义的值的集合每一类型的数据占用相同大小的存储空间同一类型的数据可以进行相同类型的运算,1.C+的数据类型,基本类型是由系统定义,各种语言都具备的类型,复合类型与指针类型都属于用户定义类型,4,2.基本类型,int型:整型VC中占4字节float型:浮点型4字节char型:字符型1字节void型:空类型bool型:布尔型1字节值为true或false,*修饰说明符long与short、signed与unsignedlong和short修改整型具有的最大值和最小值signed和unsigned告诉编译器如何处理整型和字符型数据的最高位,float型可用double和longdouble修饰,修改实型数据的表数范围和精度,5,C+中的全部基本类型,6,二.运算符与表达式,1.运算符,算术运算符:+-*/%+-关系运算符:=赋值运算符:=+=-=*=/=%=inty;y=(int)x;目标类型名(表达式):floatx=2.5;inty;y=int(x);C+中的显式转换,使用方式转换用关键字(待转换的表达式),10,例:static_cast,voidfunc(int)voidmain()inti=0 x7fff;longl;floatf;l=i;f=i;/更好的方法是使用static_castl=static_cast(i);f=static_cast(i);i=l;i=f;/以上两条语句会出Warning,可使用如下方式消除i=static_cast(l);i=static_cast(f);charc=static_cast(i);void*vp=/更好的方法,11,例:const_cast,voidmain()constinti=0;/int*j=/错误,不允许同时进行const*-nonConst*/和nonConst*-long*两项转换,12,例:reinterpret_cast,#includeusingnamespacestd;constintsz=100;structXintasz;voidprint(X*x)for(inti=0;iai(,13,2.表达式,由运算符连接操作数构成的式子,算术表达式关系表达式逻辑表达式赋值表达式条件表达式逗号表达式,14,3常量与变量,一.C+中的常量,1.直接常量(字面常量):10,10.5,A,型.float型.char型.字符串常量.bool型:true、false,2.符号常量:C+中有两种符号常量#define定义的常量例:#definepi3.1415926关键字const定义的常量例:constintsz=100;,#define定义的常量,在预处理时只是字符串的替换,对编译器而言,不带有任何类型信息,不便于查错;而const定义的常量带有类型信息,故优于#define定义的常量C+推荐使用const定义的常量,15,const常量,定义语法:const类型名常量名=常量值;或类型名const常量名=常量值;,例:constfloatpi=3.14;floatconstpi=3.14;constintmin=50;intconstmin=50;constintmax=2*min;intconstmax=2*min;,const定义的常量,相当于定义了一个相应类型的变量,但其值不能发生改变例:constintmin=50;min=40;/错误,不能改变min的值,所以,定义const常量的同时必须初始化,且一旦初始化后,就不会(因不能故不会)再发生变化。因此在作用范围内若某变量的值不会发生改变,则定义该变量时应用const进行限定,以免无意中改变该变量的值,const常量是编译时的常量例:constintsz=100;intarrsz;,16,const与指针,1.指向常量的指针:限定指针所指的对象、变量定义形式:const类型*指针变量=地址表达式;或类型const*指针变量=地址表达式;,例:intvar=35;constintmax=100;int*p;constint*p1_const;constint*p2_const;p1_const=,p1_const和p2_const,var不是常量,*p1_const和*p2_const、max是常量,17,指向常量的指针,18,2.指针常量:指针变量本身的值初始化后不能再改变,定义方式:类型*const指针变量=地址表达式;,例:intvar1=100,var2=200;constintmax=1000;int*constcst_p1=,只说明了指针变量如cst_p1本身是常量,但并没有说不能改变*cst_p1的值,必须要赋初值,19,3.指向常量的指针常量,指针变量本身和所指对象的值都为常量,不能改变,定义方式:const类型*const指针变量=地址表达式;或类型const*const指针变量=地址表达式;,例:intvar1=128,var2=256;constintmax=1000;constint*constdoubleCst_p1=,20,二.C+中的变量,变量必须先定义(声明)再使用变量的定义存储类型数据类型名变量名列表;,C+中几乎随处可以定义变量例:for(inti=0;i100;i+)if(i100)intx=0;x+=100;inty=10;,变量的分类:根据定义变量的位置,分为两类:全局变量(外部变量)局部变量(内部变量),21,变量的存储类型,存储方式:动态存储方式和静态存储方式静态存储方式:程序运行过程中给此类变量分配固定的存储空间动态存储方式:程序运行过程中根据需要,给此类变量动态分配存储空间,程序的存储组织,22,变量的存储类型,auto、register、static、extern和默认五种auto:自动类型普通的局部变量都属于此类,分配在动态存储区中register:寄存器类型static:静态变量静态局部变量:在静态区中,只初始化一次,多次调用函数时能保留前一次函数调用结束时的值,延长了该变量的生存期静态全局变量:在静态区中,限制了该变量的作用域extern:外部变量定义全局变量声明外部变量:扩展了全局变量的作用域,23,例:static,#includeusingnamespacestd;intfactor(intn)staticintresult=1;result*=n;returnresult;voidmain()for(inti=1;i=8;i+)coutfactor(i);coutendl;,24,例:extern,/main.cpp#includeusingnamespacestd;externintnTestVar;voidmain()nTestVar=100;coutnTestVar变量向流中添加数据的操作称为插入操作:流对象:提取运算符cin和cout是C+预定义的流对象cout:用于进行输出操作,与显示器相关联cin:用于进行输入操作,与键盘相关联,28,用法:cout变量1变量2变量n;同样也可以串联多个给多个变量输入数据输入时多个数据项之间用空格、Tab或回车分隔具有智能,能够自动判断其后的数据项的类型,并采用相应的类型进行输出或输入,使用流对象时,必须#include相应的头文件(如iostream)并使用语句“usingnamespacestd;”打开名称空间stdcin与cout在iostream中的std名称空间中定义,29,二.简单的输入/输出格式控制:使用操纵符(manipulator),I/O流类库中提供了若干个操纵符,可以直接嵌入到输入/输出语句中实现I/O格式控制,常用的I/O操纵符,30,说明:,不带参数的I/O操纵符定义在iostream中使用带参数的I/O操纵符,需包含iomanipsetw()只对其后紧跟着的一个真正的数据项起作用,例:coutAendsBendl;couthex255ends32endl;coutdecsetw(5)setfill(0)32endl;coutsetw(5)setprecision(4)7.5612endl;,屏幕输出,31,5基本控制结构,顺序、选择(分支)和循环结构对应的控制语句,32,6数组、结构体、共用体和枚举类型,一.数组:需要处理相同类型的一批相关数据时使用,数组分为一维数组与多维数组定义:一维数组:类型数组变量名数组长度;二维数组:类型数组变量名第一维长度第二维长度;例:intnArr10;intnArr2d105;,说明:数组长度必须是常量表达式:编译时求值C意义上的字符串采用字符数组作为其存储形式,在最后添加一个ASCII码为0的字符作为字符串的结束标志,33,string类:字符串类,string类封装了字符串的基本特性和对字符串的典型操作,其对象可用于保存几乎任意长的字符串,对处理输入文件中一行上字符数不定的情况特别有用string类是STL中的类,使用时需要包含头文件string并打开名称空间std,string类的操作:成员函数,求串长:size()、length(),例:#include#includeusingnamespacestd;voidPrintAttribute(conststring,34,intmain()strings1,s2;PrintAttribute(s1);s1=Mystringobject;PrintAttribute(s1);s2=AnotherStringObject;PrintAttribute(s2);return0;,35,赋值:assign()=,s1.assign(s2);s1=s2;,连接:append+=+s1.append(s2);s1+=s2;s1=s1+s2;,下标:s10,#include#includeusingnamespacestd;intmain()strings1=cat,s2,s3;s2=s1;s3.assign(jump);couts2s3endl;s1+=s3;couts1endl;s1.append(andyell);couts1endl;s10=h;couts1endl;return0;,36,比较string,pare(s2);比较字符串s1与s2,当s1等于s2时,返回0;当s1大于s2时返回正值,否则返回负值,字符串的部分比较pare(beg1,len1,s2,beg2,len2);beg1和len1指示s1参与比较的开始字符的下标与长度,beg2和len2指示s2参与比较的开始字符的下标与长度,运算符:!=,37,例:string的比较:字符串的排序,#include#includeusingnamespacestd;intmain()stringnames=LiHua,HeXiaoMing,ZhangLi,SunFei,ChenBao;strings;inti,j,k,nmb;nmb=sizeof(names)/sizeof(names0);for(i=0;inamesj)k=j;if(k!=i)s=namesk;namesk=namesi;namesi=s;for(i=0;inmb;i+)coutnamei=namesiendl;return0;,38,子串:substr(),s.substr(beg,len);beg指定子串的开始下标,len指定读取的字符数,strings=C+programdesign;couts.substr(4,7)=0)alphabet.replace(x,1,;);x=alphabet.find(,x+1);coutalphabetendl;return0;,40,插入:insert(),s1.insert(n,s2);,例:strings1=catjump;strings2=dog;s1.insert(4,s2);s1.insert(4,and);couts1endl;,41,转换成C语言式的char*型字符串:data()c_str()copy(),char*ptr=s.data();/char*ptr=s.c_str();s.copy(buffer,n,begin);,#include#includeusingnamespacestd;intmain()strings=StringObject;constchar*ptr1;ptr1=s.data();intlen=s.length();char*ptr2=newcharlen+1;s.copy(ptr2,len,0);ptr2len=0;coutsendl;coutptr1endl;coutptr2endl;deleteptr2;return0;,42,从文件中输入一行字符:getline(),getline(in,str,ch);,其中:in为输入流对象str为string类对象ch为结束输入的字符,默认为n,例:strings;getline(cin,s,n);从键盘输入一行字符(以回车结束),存入s中,43,例:从文件中输入一行数据,#include#include#includeusingnamespacestd;intmain()stringline;ifstreaminput(input.txt,ios:in);while(1)getline(input,line);if(input.eof()break;/一行数据已存入line中,可对其处理,此处只将其输出coutlineab;coutmax(a,b)endl;,59,例:内联函数,*注意.若inline不在函数名第一次出现时指定,则编译器把该函数做为普通函数对待.内联函数的函数体应尽可能简洁,否则会增加程序的体积.内联函数中不能包含复杂的流程控制语句,否则inline关键字将不会起作用,该函数将成为普通函数.inline函数不能递归,也不能包含静态变量,inlineintisnumber(char);voidmain()charc;intn;n=0;while(c=getchar()!=n)if(isnumber(c)n+;coutn=n=0,60,.带缺省实参值的函数声明或定义函数的同时,可对函数的某些参数进行初始化,该初始化的值称做缺省实参值。调用该函数时,可传递少于形参数目的参数,对缺少实参值的参数,函数使用缺省的实参值,.声明或定义形式:类型名函数名(参数类型1参数名1=缺省值1,参数类型2参数名n=缺省值n)例:voidshowchar(charc,in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租赁合同注销协议范文
- 纸箱合同协议范本大全
- 高考协议班合同
- 砼班组劳务合同范文
- 四年级下册数学教学工作总结范文4篇
- 仓储保管合同
- 灵活应变2024年农艺师考试应对技巧试题及答案
- 农业职业经理人考试的政策环境分析试题及答案
- 2024年花艺师考试回顾与展望试题及答案
- 2024年园艺师考试材料准备规范试题及答案
- 关于在生产过程中物料流转的交接和管理规定
- 8.5.1直线与直线平行 课件(共24张PPT)
- 2022年高考真题及答案解析《历史、地理、政治》(湖北卷)
- 高中数学人教A版空间几何体(省一等奖)
- 把未来点亮歌词打印版
- 急性白血病急性髓系白血病课件
- 写字楼能耗评估和节能降耗措施
- 运动会100米栏广播稿2篇
- isbp745中英文版解析
- 污水处理设备调试方案
- 中国邮政集团公司人才发展规划
评论
0/150
提交评论