C++语法大全.ppt_第1页
C++语法大全.ppt_第2页
C++语法大全.ppt_第3页
C++语法大全.ppt_第4页
C++语法大全.ppt_第5页
已阅读5页,还剩136页未读 继续免费阅读

下载本文档

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

文档简介

第3章C+基本语法,主要内容,3.1数据类型,程序中的各种加工和处理都是针对某些数据进行的,这些数据由数据类型描述。数据类型规定了数据的存储结构(在内存中占据的大小和布局)、可以进行的运算、取值范围。C+中的数据类型大致分为三类:C+预定义的一组内置的基本数据类型,表示常见的简单数据,如整数、浮点数等;复合类型,由基本数据类型组合而成的更复杂的数据类型,如数组、结构体、联合、枚举等;类类型,即用户自己定义的抽象数据类型。为了方便程序员,C+标准库中还提供的一些常用的抽象数据类型。,3.1.1内置数据类型,字符类型字符型char,通常用来表示单个字符和小整数。整数类型整型int、短整型short、长整型long,分别代表不同长度的整数值char、short、int和long类型都可以用signed和unsigned修饰浮点类型浮点型float、双精度浮点型double和长双精度longdouble布尔类型bool类型只有两个值:true和false。-bool类型、char类型、各种整数类型通称为整值类型。整值类型和浮点类型一起被称为算术类型。,内置数据类型的空间大小,标准C+对内置数据类型的空间大小并没有做出严格规定,但为了编写可移植的代码,应该了解你所使用的编译器和机器,避免对这些特性做出某种假定。如下代码可以测试C+编译器为每种数据类型分配的空间大小:,#includeusingnamespacestd;intmain()coutsizeof(char)endl;coutsizeof(int)endl;coutsizeof(float)endl;coutsizeof(double)endl;coutsizeof(bool)变量名;cin变量名1变量名2;cin变量名1变量名2变量名n;cout,ostream类型的对象,用于向用户终端写数据。cout的常用方式为:cout表达式;cout表达式endl;cout表达式1表达式2ival;cinfval;coutivalfval;coutivalnfvalendl;,字符串类string,除了保留C风格字符串char*之外,C+标准库还定义了字符串类string。string类支持字符串对象的各种初始化方式,支持字符串之间的拷贝、比较和连接等操作,还支持对字符串长度的查询和是否为空的判断,并且也可以访问字符串中的单个字符。使用string类,需要包含相应的头文件:string。#include,字符串类string,#include#includeusingnamespacestd;intmain()strings1,s2;/创建两个空字符串对象strings3=Hello,World!;/初始化s3strings4(Iam);s2=“Today”;/赋值s1=s3+s4;/字符串连接s1+=5;/末尾追加couts1+s2+!endl;/输出字符串内容coutLengthofs1is:s1.size()endl;/输出字符串长度for(inti=0;Is1.size();+i)couts1i;/逐个输出s1中的字符,字符串类string,字符串比较使用运算符“=”获得字符串长度使用size()判断字符串是否为空使用empty()可以将一个C风格的字符串赋给string对象,但反之不可。要将string对象转换为C风格字符串,使用c_str()操作,其返回结果为constchar*,即转换得到的C风格字符串首地址。例如:strings1=“Thisisabook.”;intx=strlen(s1);/Errorx=strlen(s1.c_str();/OK,标准数组向量类,C+标准库中的vector类为内置数组类提供了一种替代表示。为了使用vector,我们必须包含相关的头文件:vector。vector可以像数组一样使用,还可以以STL方式使用。/数组习惯#includeusingnamespacestd;intmain()vectoriv(10);intia10;for(intid=0;id10;id+)iaid=ivid;/,向量类:STL使用习惯,/STL习惯#include#includeusingnamespacestd;intmain()vectoriv;for(intid=0;id10;id+)iv.push_back(id);for(intid=0;idiv.size();id+)cout=/初始化,等价于intival(12);ival=15;/赋值intival2;/定义变量,没有初始化ival2=5;/赋值,虽然是第一次赋值,但不是初始化,“=”常被误用“=”,在编写程序时,赋值运算符“=”经常被误用为关系运算“=”,引起程序语义错误。例如,判断变量x的值如果等于1就执行某个操作的代码如果将“=”误写为“=”:/这个条件将永远为true,因为其结果是赋值表达式的值1if(x=1)doSomething;,3.3.4自增和自减,自增(+)和自减(-)运算符为对象加1和减1提供了方便简短的表示。它们最常用于对数组下标、迭代器或指针进行加1或减1操作。自增和自减是一元运算符,其操作数是可修改的左值。自增和自减都有前缀和后缀两种形式。inta=5,b=5;intival;ival=a+;/ival的值是5,而a的值是6ival=+b;/b的值是6,ival的值是6自增、自减运算也常用于指针,这时指针通常指向的是一个数组中的元素。,3.3.5位运算符(1),位运算符将操作数解释为有序位的集合,每个位是0或1。位运算符允许程序员设置或测试独立的位或一组位。通常使用无符号的整值数据类型进行位操作。按位非运算:按位非运算符()对操作数的每一位取反,原来的1置为0,0置为1。移位运算:是二元运算,形式:E1E2(对无符号数或者非负的有符号数,右移一位相当于除2)如果是有符号数的负数,右移运算在左边空位或者插入符号位,或者插入0,这由具体的实现定义。,3.3.5位运算符(2),按位,位运算表达式例子(加密解密),intmain()chara1=f,a2=i,a3=r,a4=e;charsecret=8;a1=(char)(a1secret);a2=(char)(a2secret);a3=(char)(a3secret);a4=(char)(a4secret);cout密文:“a1a2a3a4endl;a1=(char)(a1secret);a2=(char)(a2secret);a3=(char)(a3secret);a4=(char)(a4secret);cout原文:“a1a2a3a4endl;,3.3.6sizeof运算符,sizeof运算符的作用是计算一个对象或类型名的字节数,返回类型是size_t。size_t是一种与实现相关的typedef定义,在标准库头文件中定义。sizeof有以下三种形式:sizeof(typename)sizeof(object)sizeofobject,3.3.6sizeof应用在内置类型,在所有C+实现中:sizeof应用在char、unsignedchar、signedchar类型上的结果都是1;对其他内置类型应用sizeof运算,其结果由实现决定。sizeof应用在枚举类型上的结果是表示枚举类型数值的低层整值类型的字节数。,3.3.6sizeof应用在数组,sizeof运算符应用在数组上时,返回的是整个数组的字节个数,即数组长度乘以每个元素的字节数。sizeof应用在指针上时返回的是指针的字节长度,即使指针是指向数组的。例如:intia=0,1,2;size_tarraysize=siezeofia;/32位机器上,arraysize的值是12int*pa=ia;size_tpointersize=siezeof(pa);/pointersize的值是4,3.3.6sizeof应用在引用类型,应用在引用类型上的sizeof运算符返回的是被引用对象的字节数。charch=a;char/sizeof(pc)=4sizeof运算符是在编译时计算,因此被作为常量表达式。它可以用在任何需要常量表达式的地方,如数组的大小等。,3.3.7new和delete,对象可以静态分配即编译器在处理程序源代码时分配,也可以动态分配即程序运行时调用运行时刻库函数来分配。这两种内存分配方法的主要区别是效率和灵活性。静态内存分配效率比较高,但是缺少灵活性。而存储未知类型或未知数目的元素却需要动态内存分配的灵活性。C+语言则通过new和delete两个运算符来完成动态存储空间的管理静态和动态内存分配的主要区别:静态对象是有名字的变量,我们直接对其进行操作。而动态对象是没有名字的变量,我们通过指针间接地对它进行操作。静态对象的分配与释放由编译器自动处理,动态对象的分配与是否必须由程序员显式地管理。,newnew表达式的第一种形式,new运算符返回新分配的对象的指针。new表达式有三种形式。第一种用于分配特定类型的单个对象,并返回其地址。语法形式为:new类型或者new类型(初始值)例如:int*ip1=newint;*ip1=512;int*ip2=newint(100);,newnew表达式的第二种形式,new表达式的第二种形式可以在堆上分配特定类型和大小的数组,并返回数组首地址,但是不能对数组进行显式的初始化。语法形式为:new类型数组大小例如:int*ipa=newint100;注意:这里的数组大小是指数组元素的个数。用new分配的数组其大小不必是常量,可以在程序执行期间指定。比较:int*ip=newint(100);int*ip=newint100;,newnew表达式的第三种形式,new表达式的第三种形式允许程序员将对象创建在已经分配好的内存中。这种形式被称为定位new表达式,其形式如下:new(place_address)类型;place_address必须是指针。程序员可以预先分配大量的内存,以后通过定位new表达式在这段内存中创建对象。使用定位new,必须包含标准库头文件。,newnew表达式的第三种形式,定位new表达式示例:#include#includeusingnamespacestd;/预分配一段空间,首地址在buf中保存char*buf=newchar1000;intmain()int*pi=new(buf)int;/在buf中创建一个int对象,此时不再重新从堆上分配空间,delete,堆上的空间在使用之后必须释放,否则会造成内存泄漏。new表达式分配的空间用delete运算符释放。,delete释放new分配的单个对象,释放new分配的单个对象,使用“delete指针”表达式。例如:int*ip=newint;*ip=512;/不再使用这个对象时,释放内存/释放指针指向的int对象,将空间归还给动态存储区deleteip;,空悬指针,执行delete运算后,指针ip指向的空间被释放,不能再使用ip指向的内存。delete后的ip不是空指针,而是“空悬指针”,即指向不确定的单元。在大多C+实现中,delete之后,ip中保存的仍然是delete之前的地址值,但是这个地址单元的使用权已经通过delete操作归还给动态存储区了,再继续通过ip间接使用这个单元是非法的,会引起不可预料的运行错误。int*ip=newint;*ip=512;/OKdeleteip;/释放了空间,ip成为空悬指针*ip=100;/危险!不能再使用ip指向的单元intx;ip=/OK,仍然可以使用ip这个指针,delete释放new分配的数组,new表达式分配的数组使用“delete指针”形式释放,例如:int*pa=newint100;/不再使用这个数组时,释放内存/释放指针pa指向的数组,将空间归还给动态存储区deletepa;由于定位new并不实际分配空间,所以没有对应的delete表达式。,3.3.8条件运算符,C+中唯一的一个三元运算符。条件运算符的语法格式如下:expr1?expr2:expr3,intmin(intia,intib)return(ia6)cout“设备正常”endl;elsecout“设备出错”6)cout“设备正常”endl;elsecout“设备出错”endl;,3.4.4switch语句,在多分支选择的情况下,使用嵌套的if-else语句会降低程序的可读性,并且容易出错。switch语句的一般形式如下:switch(expression)caseconst-epxr1:statement1;caseconst-expr2:statement2;caseconst-exprn:statementn;default:statementn+1;expression是一个要被计算的条件表达式,它是整值类型或枚举类型。case后接一个常量表达式,构成case标号,后面有一组语句序列与之关联。default标号是可选的,最多只能有一个。,switch语句的执行,执行switch语句时,计算其条件表达式的值并依次与各个case常量值进行比较,如果某个case常量等于条件表达式的值,那么控制流转移到匹配的case标号后的语句执行;如果没有匹配条件的case常量,检查是否存在default标号;如果存在default标号,则控制进入default标号后的语句;否则switch中的语句都不被执行,程序控制将到达switch语句之后的第一条语句。,switch语句中的break,case标号和default标号只是标记一个语句序列的开始位置,它们本身并不改变程序的控制流。一个case标号之后的语句执行完成后,如果没有遇到控制转移语句,那么会继续执行后续的case标号语句,直到遇到转移语句或switch语句结束。例如:switch(ch)casea:aCnt+;/继续执行后续的case语句casee:eCnt+;/继续执行后续的case语句casei:iCnt+;/继续执行后续的case语句caseo:oCnt+;/继续执行后续的case语句caseu:uCnt+;/执行switch语句之后的语句,switch语句中的break,要在执行某个case标号语句之后退出switch,可以使用break语句;在有些情况下,如果希望由相同的动作序列处理两个或多个值,可以省略break语句。,switch(ch)casea:aCnt+;break;casee:eCnt+;break;casei:iCnt+;break;caseo:oCnt+;break;caseu:uCnt+;/最后一个分支,不需要break/break使控制转移到这里,switch(ch)caseA:casea:aCnt+;break;caseE:casee:eCnt+;break;caseI:casei:iCnt+;break;caseO:caseo:oCnt+;break;caseU:caseu:uCnt+;,3.4.5while语句,while循环的语法形式如下:while(condition)statement;condition可以是条件表达式或变量的初始化定义;condition的值在每次执行statement前检测;statement是单个语句或复合语句。例如:/累加数组元素constintsz=20;intiasz;intsum=0;intix=0;while(ixsz)sum+=iaix+;在condition部分定义的变量只能在while语句的控制范围内使用。,3.4.6for语句,for循环的语法形式如下:for(init-statement;condition;expression)statement;init-statement可以是声明或表达式,一般用来对循环控制变量进行初始化。condition用作循环控制条件,当其计算结果为true时,statement被执行。statement可以是单个语句,也可以是复合语句。expression在循环的每次迭代后计算,一般用它来修改循环控制变量的值。如果condition第一次计算的结果是false,则statement不会执行,expression也不会被计算。init-statement、condition和expression都可以省略,但不能省略分号。,3.4.6for语句,例如/累加数组元素constintsz=20;intiasz;intsum=0;for(intix=0;ixsz;+ix)sum+=iaix;/ix在for语句的初始化部分定义,此处是for语句之外,ix不可见,boolfoo(charc)coutc;returntrue;intmain()inti=0;for(foo(A);foo(B)结果输出为:ABDCBDCB,循环语句举例1,例百鸡问题,公鸡5元/只,母鸡3元/只,小鸡3只/元,问100圆买100只鸡,公鸡、母鸡、小鸡各多少(采用穷举法公鸡最多20只,母鸡33只),intmain()intz=0;booleanisAnswer=false;for(inti=1;i=20;i+)for(intj=1;jival;/对ival进行处理switch(ival)case1:/功能1case5:/功能5;while(ival);,3.4.8break和continue,如果希望在循环条件不为false时就提前结束整个循环或某次迭代,可以使用break或continue转移控制。break语句终止自己所在while、dowhile、for或switch语句;程序的执行权被传递给紧接在被终止语句之后的语句。continue语句导致最近的循环语句的当前迭代结束,执行权被传递给循环控制条件计算部分,即continue语句将控制转移到循环体最后一条语句的结束处。continue语句只有出现在循环语句中才是合法的。,3.4.8break和continue,/在数组ia中查找value,若找到返回下标,否则返回-1intsearch(intia,intsize,intvalue)intloc=-1;for(intix=0;ixsize;+ix)if(value=iaix)loc=ix;break;/提前结束for循环returnloc;/-,编程打印1到100中的所有素数,intmain()intn=0,m,j,i;for(i=3;i=m+1)if(n%6=0

温馨提示

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

评论

0/150

提交评论