[工学]c++语言基础知识汇总_第1页
[工学]c++语言基础知识汇总_第2页
[工学]c++语言基础知识汇总_第3页
[工学]c++语言基础知识汇总_第4页
[工学]c++语言基础知识汇总_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1,第二章 C+语言初步,本章主要内容 1.C+语言的字符集、词汇 2.基本数据类型、运算符与表达式 3.C+中的常量与变量 4.C+中的I/O 5.基本控制结构 6.数组、结构体、共用体与枚举类型 7.指针、引用与动态内存分配 8.函数与函数重载,2,1 C+语言的字符集与词汇,1.字符集,(1)字母 A B C D Z a b c d z (2)数字 0 1 2 3 4 5 6 7 8 9 (3)特殊符号 空格 ! # $ % _ | ,3,2.词汇:五类,(1)关键字(保留字):系统预定义且有专门含义的单词,不允许另作它用 .C+的关键字包含了C语言的几乎所有关键字 .C+的关键字随C+的发展而不断增加 (2)标识符:由程序员为程序中的各种成份定义的名字 .以字母或_开头,由字母、_、数字组成 .不能是关键字 .C+中的标识符区分大小写 .见名知义的原则 .C+系统对标识符的长度有一定限制 (3)直接常量 (4)运算符 (5)分隔符:用来分隔不同的语法成份的单词 空格 ; # ( ) /* */ /*C+的两种注释: ./*/ ./ 注释到行尾,4,2 基本数据类型、运算符与表达式,一.数据类型每一项数据都唯一的属于某种类型每一数据类型都有一个明确定义的值的集合每一类型的数据占用相同大小的存储空间同一类型的数据可以进行相同类型的运算,1.C+的数据类型,基本类型是由系统定义,各种语言都具备的类型,复合类型与指针类型都属于用户定义类型,5,2.基本类型,int型:整型 VC中占4字节float型: 浮点型 4字节char型: 字符型 1字节void型: 空类型bool型: 布尔型 1字节 值为 true 或 false,*修饰说明符long与short、signed与unsignedlong和short修改整型具有的最大值和最小值signed和unsigned告诉编译器如何处理整型和字符型数据的最高位,float型可用double和long double修饰,修改实型数据的表数范围和精度,6,C+中的全部基本类型,7,二.运算符与表达式,1.运算符,算术运算符:+ - * / % + -关系运算符: = = 赋值运算符:= += -= *= /= %= = &= |= =条件运算符:?:逗号运算符:,指针运算符:&*求字节运算符:sizeof函数调用运算符、强制类型转换运算符:()分量运算符: . -数组下标运算符:作用范围分解运算符::动态内存分配符:new、delete插入提取运算符:,8,运算符的优先级与结合性,9,运算符的优先级与结合性(续表),10,C+中的类型转换,转换运算符:()两种强制类型转换的方法:(目标类型名)表达式: float x = 2.5; int y; y = (int)x;目标类型名(表达式): float x = 2.5; int y; y = int(x);C+中的显式转换,使用方式 转换用关键字(待转换的表达式),11,例:static_cast,void func(int) void main()int i=0x7fff; long l; float f;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);char c = static_cast(i);void *vp = /更好的方法,12,例:const_cast,void main()const int i = 0;/int *j = /错误,不允许同时进行const*-nonConst* /和nonConst*-long*两项转换,13,例:reinterpret_cast,#include using namespace std;const int sz=100;struct Xint asz;void print(X* x)for (int i=0;iai (,14,2.表达式,由运算符连接操作数构成的式子,算术表达式关系表达式逻辑表达式赋值表达式条件表达式逗号表达式,15,3 常量与变量,一.C+中的常量,1.直接常量(字面常量): 10,10.5,A, string .int型 .float型 .char型 .字符串常量 .bool型:true、false,2.符号常量:C+中有两种符号常量#define定义的常量 例:#define pi 3.1415926关键字const定义的常量 例:const int sz = 100;,#define定义的常量,在预处理时只是字符串的替换,对编译器而言,不带有任何类型信息,不便于查错;而const定义的常量带有类型信息,故优于#define定义的常量C+推荐使用const定义的常量,16,const常量,定义语法: const 类型名 常量名 = 常量值;或 类型名 const 常量名 = 常量值;,例:const float pi=3.14; float const pi=3.14; const int min=50; int const min=50; const int max=2*min; int const max=2*min;,const定义的常量,相当于定义了一个相应类型的变量,但其值不能发生改变 例:const int min = 50; min = 40; /错误,不能改变min的值,所以,定义const常量的同时必须初始化,且一旦初始化后,就不会(因不能故不会)再发生变化。因此在作用范围内若某变量的值不会发生改变,则定义该变量时应用const进行限定,以免无意中改变该变量的值,const常量是编译时的常量 例:const int sz = 100; int arrsz;,17,const与指针,1.指向常量的指针:限定指针所指的对象、变量 定义形式: const 类型 * 指针变量=地址表达式; 或 类型 const * 指针变量=地址表达式;,例:int var = 35; const int max = 100; int *p; const int *p1_const; const int *p2_const; p1_const = ,p1_const和p2_const,var不是常量,*p1_const和*p2_const、max是常量,18,指向常量的指针,19,2.指针常量:指针变量本身的值初始化后不能再改变,定义方式: 类型 * const 指针变量 = 地址表达式;,例:int var1 = 100,var2 = 200; const int max = 1000; int * const cst_p1 = ,只说明了指针变量如cst_p1本身是常量,但并没有说不能改变*cst_p1的值,必须要赋初值,20,3.指向常量的指针常量,指针变量本身和所指对象的值都为常量,不能改变,定义方式: const 类型 * const 指针变量 = 地址表达式; 或 类型 const * const 指针变量 = 地址表达式;,例:int var1 = 128,var2 = 256; const int max = 1000; const int *const doubleCst_p1 = ,21,二.C+中的变量,变量必须先定义(声明)再使用变量的定义 存储类型 数据类型名 变量名列表;,C+中几乎 随处可以定义变量 例: for(int i=0;i100;i+) if(i 100) int x = 0; x += 100; int y = 10; ,变量的分类:根据定义变量的位置,分为两类:全局变量(外部变量)局部变量(内部变量),22,变量的存储类型,存储方式:动态存储方式和静态存储方式静态存储方式:程序运行过程中给此类变量分配固定的存储空间动态存储方式:程序运行过程中根据需要,给此类变量动态分配存储空间,程序的存储组织,23,变量的存储类型,auto、register、static、extern和默认五种auto:自动类型 普通的局部变量都属于此类,分配在动态存储区中register:寄存器类型static:静态变量静态局部变量:在静态区中,只初始化一次,多次调用函数时能保留前一次函数调用结束时的值,延长了该变量的生存期静态全局变量:在静态区中,限制了该变量的作用域extern:外部变量定义全局变量声明外部变量:扩展了全局变量的作用域,24,例:static,#include using namespace std;int factor(int n) static int result = 1; result *= n; return result;void main() for(int i=1;i=8;i+)cout factor(i) ; cout endl;,25,例:extern,/main.cpp#include using namespace std;extern int nTestVar;void main() nTestVar = 100; cout nTestVar 变量 向流中添加数据的操作称为插入操作: 流对象 :提取运算符cin和cout是C+预定义的流对象 cout:用于进行输出操作,与显示器相关联 cin:用于进行输入操作,与键盘相关联,29, 用法: cout变量1变量2变量n;同样也可以串联多个给多个变量输入数据 输入时多个数据项之间用空格、Tab或回车分隔具有智能,能够自动判断其后的数据项的类型,并采用相应的类型进行输出或输入,使用流对象时,必须#include相应的头文件(如iostream)并使用语句“using namespace std;”打开名称空间stdcin与cout在iostream中的std名称空间中定义,30,二.简单的输入/输出格式控制:使用操纵符(manipulator),I/O流类库中提供了若干个操纵符,可以直接嵌入到输入/输出语句中实现I/O格式控制,常用的I/O操纵符,31,说明:,不带参数的I/O操纵符定义在iostream中使用带参数的I/O操纵符,需包含iomanipsetw()只对其后紧跟着的一个真正的数据项起作用,例:coutAendsBendl; couthex255ends32endl; coutdecsetw(5)setfill(0)32endl; coutsetw(5)setprecision(4)7.5612endl;,屏幕输出,32,5 基本控制结构,顺序、选择(分支)和循环结构对应的控制语句,33,6 数组、结构体、共用体和枚举类型,一.数组:需要处理相同类型的一批相关数据时使用,数组分为一维数组与多维数组 定义: 一维数组:类型 数组变量名数组长度; 二维数组:类型 数组变量名第一维长度第二维长度; 例: int nArr10; int nArr2d105;,说明:数组长度必须是常量表达式:编译时求值C意义上的字符串采用字符数组作为其存储形式,在最后添加一个ASCII码为0的字符作为字符串的结束标志,34,string类:字符串类,string类封装了字符串的基本特性和对字符串的典型操作,其对象可用于保存几乎任意长的字符串,对处理输入文件中一行上字符数不定的情况特别有用string类是STL中的类,使用时需要包含头文件string并打开名称空间std,string类的操作:成员函数,求串长:size()、length(),例:#include #include using namespace std;void PrintAttribute(const string ,35,int main()string s1,s2;PrintAttribute(s1); s1 = My string object; PrintAttribute(s1);s2 = Another String Object; PrintAttribute(s2);return 0;,36,赋值:assign() =,s1.assign(s2); s1 = s2;,连接:append += + s1.append(s2); s1+=s2; s1=s1+s2;,下标: s10,#include #include using namespace std;int main() string s1 = cat ,s2,s3; s2 = s1; s3.assign(jump ); cout s2 s3 endl; s1 += s3; cout s1 endl; s1.append(and yell); cout s1 endl; s10 = h; cout s1 endl; return 0;,37,比较string,pare(s2);比较字符串s1与s2,当s1等于s2时,返回0;当s1大于s2时返回正值,否则返回负值,字符串的部分比较 pare(beg1,len1,s2,beg2,len2); beg1和len1指示s1参与比较的开始字符的下标与长度,beg2和len2指示s2参与比较的开始字符的下标与长度,运算符:!= =,38,例:string的比较: 字符串的排序,#include #include using namespace std;int main() string names = Li Hua,He XiaoMing,Zhang Li, Sun Fei,Chen Bao; string s; int i,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+)cout name i = namesi endl;return 0;,39,子串:substr(),s.substr(beg,len); beg指定子串的开始下标,len指定读取的字符数,string s = C+ program design; cout s.substr(4,7) = 0) alphabet.replace(x,1,;); x = alphabet.find(,x+1);cout alphabet endl;return 0;,41,插入:insert(),s1.insert(n,s2);,例:string s1 = cat jump; string s2 = dog ; s1.insert(4,s2); s1.insert(4,and ); cout s1 endl;,42,转换成C语言式的char*型字符串:data() c_str() copy(),char * ptr=s.data(); /char * ptr=s.c_str(); s.copy(buffer,n,begin);,#include #include using namespace std;int main()string s = String Object;const char *ptr1;ptr1 = s.data();int len = s.length();char *ptr2 = new charlen+1;s.copy(ptr2,len,0); ptr2len = 0;cout s endl; cout ptr1 endl;cout ptr2 endl;delete ptr2;return 0;,43,从文件中输入一行字符:getline(),getline(in,str,ch);,其中:in为输入流对象 str为string类对象 ch为结束输入的字符,默认为n,例:string s; getline(cin,s,n); 从键盘输入一行字符(以回车结束),存入s中,44,例:从文件中输入一行数据,#include #include #include using namespace std;int main() string line; ifstream input(input.txt,ios:in);while(1) getline(input,line); if(input.eof() break;/一行数据已存入line中,可对其处理,此处只将其输出 cout line y?x:y; void main() int a,b; cin a b; cout max(a,b) endl; ,60,例:内联函数,*注意 .若inline不在函数名第一次出现时指定,则编译器把该函数做为普通函数对待 .内联函数的函数体应尽可能简洁,否则会增加程序的体积 .内联函数中不能包含复杂的流程控制语句,否则inline关键字将不会起作用,该函数将成为普通函数 .inline函数不能递归,也不能包含静态变量,inline int isnumber(char);void main() char c; int n; n=0; while(c=getchar()!=n) if (isnumber(c) n+; cout n= n =0 ,61,.带缺省实参值的函数 声明或定义函数的同时,可对函数的某些参数进行初始化,该初始化的值称做缺省实参值。调用该函数时,可传递少于形参数目的参数,对缺少实参值的参数,函数使用缺省的实参值,.声明或定义形式: 类型名 函数名(参数类型1 参数名1=缺省值1, ,参数类型2 参数名n=缺省值n) 例:void showchar(char c,int tim

温馨提示

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

评论

0/150

提交评论