《c++复习2006-12》由会员分享,可在线阅读,更多相关《c++复习2006-12(42页珍藏版)》请在金锄头文库上搜索。
1、一、语法一、语法标识符:标识符: 由字母、数字和下划线三种字符组成由字母、数字和下划线三种字符组成,且必须以字母或下划线开头。且必须以字母或下划线开头。关键字不能作为用户定义的标识符。关键字不能作为用户定义的标识符。用户定义标识符:用户定义标识符: 合法: char2 _abc a3 P1不合法: int pi break 3a a+b class public常量:常量:合法: n 102 t 72 不合法: ABC 1.2e0.5 M 编译预处理命令文件包含: #include当调用系统提供的资源时,需使用该命令.如,在调用库函数时,使用的文件包含命令如下:字符串处理函数字符串处理函数需使
2、用需使用 #include “string.h”strlen(str) 如:如:strlen(“ nabcd ”)的结果为的结果为5(不包含对(不包含对0的统的统计)计)strlwr(str)strupr(str)strcpy(str1,str2) 如:如:char s130=“abcd”;strcpy(s1+2,“123”);couts1; 输出结果为:ab123strcat(str1,str2)strcmp(str1,str2)需使用需使用 #include “stdio.h”gets、puts()需使用需使用 #include “math.h”sqrt、fabs需使用需使用 #inclu
3、de “stdlib.h”rand符号常量的定义符号常量的定义:用用 #define 命令命令如如: #define N 10等价于等价于: const int N=10运算符和表达式运算符和表达式:结合性及优先级结合性及优先级 例例: (1) x*=x-3 x=x*(x-3) 若初始情况下若初始情况下x=5,则执行上述运算后则执行上述运算后x=? (2) x=0?a+:b+ 若已知若已知a=4,b=3,x=5 则则a、b? (3)若已知若已知int a5=0,2,4,6,8,*p=a; 设设a的首地址为的首地址为1000,则则: 执行执行*p+后后 表达式的值为表达式的值为0,p的值为的值为
4、1004 执行执行+*p后后 表达式的值为表达式的值为1,p的值为的值为1000 执行执行 *+p后后 表达式的值为表达式的值为2,p的值为的值为1004对操作数的要求对操作数的要求 (1) (i+j)+, 3+ () +,- 变量变量 (2) a%b a,b必须为整型必须为整型 12右边表达式作为一个整体出现结果的类型结果的类型 int n,s=0; for(n=1;n=10;n+) s+=1/n; 上述结果为上述结果为1,若要得到正确结果,应用如下形式:,若要得到正确结果,应用如下形式: s+=1.0/n 或:或:s+=1/(double)n用逻辑表达式表达某个命题用逻辑表达式表达某个命题
5、 如如: ch9 ch是非数字字符是非数字字符 x=0&xc; 若输入若输入how do you do 则则c的值为的值为how gets(c)则c的值为:how do you do 改为void main() char ch=b, s=“abcde”; coutch+2; / 输出输出 100 (d的的ASCII码码) ch=ch+2; / 输出输出 d cout*(s+2); / 输出输出 c couts+2 / 输出输出 cde cout依据其后表达式类依据其后表达式类型决定输出内容型决定输出内容语句语句: if(条件表达式条件表达式) 几种等价关系几种等价关系 if(x) 依据依据x的
6、类型不同,分别等价于如下形式:的类型不同,分别等价于如下形式: if(x!=0) if(x!=0) if(x!=NULL)那么那么if(!x)对应的等价关系呢对应的等价关系呢?switch语句语句switch(a%5)case 0: couta+; case 1: cout+a; case 2: couta-; case 3: cout-a;若若a=2,则输出:则输出:2 0char a=A; switch(a)case A: couta-1; case B: couta+1; case C: couta+; default: cout-a;循环循环:(1)do _while 先执行后判断先执
7、行后判断,至少执行一次至少执行一次 for ,while 先判断后执行先判断后执行,可能一次也不执行可能一次也不执行 for循环条件中常使用逗号表达式循环条件中常使用逗号表达式void main()int i; for(i=0;i5;i+=2); couti;x=2;while(x)coutxendl; 执行次数执行次数:无限次无限次 x=x-3;int k=3; while(k=0) k+; for(int k=1;k= =3;k+);6注意区分空循环注意区分空循环执行次数执行次数0(2)break语句语句 x=0; for(j=4;j=6;j+) if(j%2)break; x+=j; c
8、outx;4退出退出switch语句或本层循环,语句或本层循环,在双重循环中使用时,注意退在双重循环中使用时,注意退出的是哪一层。出的是哪一层。数组数组避免下面错误:避免下面错误:int n=10,anchar s5=“This is a book;char s10;s = I am fine;1、数组必须定义长度、数组必须定义长度,且长度不能用变量且长度不能用变量;2、不能越界、不能越界;3、数组名是地址常量,不可被、数组名是地址常量,不可被赋值赋值4、只有字符数组可整体操作、只有字符数组可整体操作数组名做函数形参时,一维数组省略长度说明,二维数组省略第一维的长度说明。如:void sort
9、(int x ,int n) void fun(char 10,int n)二维数组的输入 、输出、元素的赋值12 3 45 657 8 9函数函数定义定义: 函数头的末尾无分号函数头的末尾无分号若函数类型为非若函数类型为非void 类型,则函数中应有类型,则函数中应有return语句语句返回同类型返回同类型的数据。的数据。参数一一说明类型参数一一说明类型调用调用: 以语句的形式调用(函数类型为以语句的形式调用(函数类型为void)以表达式形式调用(函数类型非以表达式形式调用(函数类型非void)说明说明:函数定义在后,调用在前时需要。形式同函数头部。函数定义在后,调用在前时需要。形式同函数头
10、部。参数传递参数传递: 值参数值参数单向传递单向传递. 实参:变量或表达式。实参:变量或表达式。 形参:只能是变量。形参:只能是变量。 如有函数原型说明:如有函数原型说明:void fun(int x, int y) 则函数调用:则函数调用:fun(a, 5) fun(a+b, a-b) 都是允许的。都是允许的。 地址参数地址参数参数本身单向传递,但指针变量所指内容或数参数本身单向传递,但指针变量所指内容或数 组元素的改变是双向的组元素的改变是双向的 实参:变量地址、数组名或有明确指向的指针变量。实参:变量地址、数组名或有明确指向的指针变量。 形参:指针变量或数组名。形参:指针变量或数组名。引
11、用参数引用参数形参的改变影响实参。形参的改变影响实参。 实参:变量。实参:变量。 形参:变量的引用。形参:变量的引用。注意形参和实参写法:若有函数:void fun(int *p, int &q)则相应的函数调用语句:void main()int a,b;fun(&a, b);指针变量做形参指针变量做形参变量的引用做形参变量的引用做形参变量的地址做实参变量的地址做实参变量做实参变量做实参参数缺省参数缺省:void fun(int i, int j, int k, int m=3,int n=4) 假设函数调用语句为:假设函数调用语句为: fun(1,2); /错误,至少应有三个实参错误,至少应
12、有三个实参fun(10,20,30, ,50); /错误,只能从左至右匹配错误,只能从左至右匹配函数重载要求:参数个数不同参数类型不同函数名相同函数名相同变量的作用域和存储类别变量的作用域和存储类别静态变量只初始化一次静态变量只初始化一次,而动态变量每调用一次函数而动态变量每调用一次函数,便便初始化一次。初始化一次。 void test() int i=0;static int j=0; i+;j+; coutijendl; void main() int i; test(); test(); i=1,j=1i=1,j=2当全局变量和局部变量同名时当全局变量和局部变量同名时,局部变量起作用局部
13、变量起作用 int m=10; void a(int n) n=15/n;m=m/2; main() int n=3; a(n); printf(n=%d,m=%dn,n,m); n=3,m=5void cube(int x)x=x*x*x;void main()int x=5;cube(x); coutxendl; void cube(int *x)*x=(*x)*(*x)*(*x); void main()int x=5;cube(&x); coutxendl; void cube(int x) x=x*x*x; return(x);void main()int x=5; x=cube(x
14、); coutxendl;void int x=5;void cube( )x=x*x*x; void main()cube(); coutxendl; 例:例:分析下面程序分析下面程序传值调用结果为5传址调用结果为125虽为传值调用,但返回值赋值给x,故结果为125无参函数,使用的全局变量,故结果为125#include iostream.hvoid cube(int &x) x=x*x*x; void main()int x=5; cube(x); coutxendl; 引用调用结果为125指针指针运算:加减一个整数运算:加减一个整数 两同类型指针变量相减两同类型指针变量相减 int *p
15、,*q;若已知若已知p=1000, q=1004 则则 : q-p的值为的值为(1004-1000)/4=1 p+2的值为的值为1000+4*2=1008int a=3,*p=&a,*q,&b=a;q=new int(6); / *q的值为的值为6delete p; () delete q;p是指向变量a的指针b是变量a的引用指针和数组指针和数组 若: int a5=1,3,5,7,9,*p=a+1; 则:则:*p+1的值为的值为4 *(p+1)的值为的值为5例:例:分析下面程序分析下面程序 #include “stdio.h”void f(float *p1,float *p2,float
16、*s) s=new float; *s=*p1+*p2; void main() float a=1.0, b=2.0,*s=&a; f(&a,&b,s); cout*sendl; 1.0形参的形参的指向已变,与实参指向已变,与实参不再指向相同的内容不再指向相同的内容返回指针值的函数返回指针值的函数求一维数组求一维数组a中的最大值。中的最大值。int a8=45,6,35,-12,100,11,3,-40;void main()int *p,_(1)_; p=max( ); cout*p;int *max( ) /函数的返回值为指针函数的返回值为指针int i,k=0; int t=a0; f
17、or(i=1;i8;i+) if(tai) t=ai; k=i; return(_(2)_);*max()&ak函数定义在调用之后函数定义在调用之后故需函数说明故需函数说明#include iostream.hvoid maxmin(int a,int n,int *p ,int *q)int i,max=a0,min=a0; for(i=1;imax)max=ai; if (ain; for (i=0;iai; maxmin(a,n,&max,&min); coutmax= max min= minscore=78; strcpy(p-name,”li si”); st1=st;(结构变量之
18、间可整体赋值)结构变量之间可整体赋值)I/O流类流类打开文件的方式:打开文件的方式:创建流类对象的同时打开文件创建流类对象的同时打开文件 ofstreamofstream outfile(abc.datoutfile(abc.dat););fstreamfstream outfile(abc.datoutfile(abc.dat, , ios:outios:out););先创建流类对象、再打开文件先创建流类对象、再打开文件ofstreamofstreamoutfileoutfile; ; outfile.open(abc.datoutfile.open(abc.dat););几个读写成员函数几
19、个读写成员函数ifstreamofstreamfstreamget、getline、put、write、readchar s10=“abcdefg”; cout.write(s,2).put(a); 文件打开时,默认文件打开时,默认的模式为文本文件的模式为文本文件二进制文件需显式二进制文件需显式地打开:地打开:ios:binary面向对象程序设计基础面向对象程序设计基础三个特性三个特性封装性继承性多态性类定义形式:类定义形式:l包括成员函数的两种实现方式l数据成员、成员函数通常的访问权限l类体中不允许对数据成员初始化访问权限访问权限public: 可以被外部程序访问private:只能被该类的
20、成员函数访问protected: 能被该类和派生类的成员函数访问。对象的成员表示形式对象的成员表示形式数据成员:数据成员: 或:或:-成员函数:成员函数: () 或:或:-()类定义及对象的引用方法类定义及对象的引用方法:#include class Cpointprivate: int X,Y; public: void set(int x,int y) X=x; Y=y; void print();void Cpoint:print() coutXset(4,6); p2-print(); 对象初始化对象初始化构造函数和析构函数的特点构造函数和析构函数的特点缺省构造函数自动生成的条件缺省构
21、造函数自动生成的条件派生类的继承关系,派生类的继承关系,如:如:在公有继承中,基类的私有成员将成为其派生类的什么成员?在公有继承中,基类的私有成员将成为其派生类的什么成员? 派生类的定义形式、继承关系、构造函数派生类的定义形式、继承关系、构造函数虚函数和抽象类的概念虚函数和抽象类的概念二、算法二、算法 1.求级数和求级数和通常求级数部分和可通过如下步骤实现通常求级数部分和可通过如下步骤实现 和和=0;通项;通项=第一项第一项while(通项尚未足够小通项尚未足够小)和和=和和+通项;通项; 通项通项=f(通项通项);描述通项的变化,通常需多条语句或项数未达到要求根据给出公式求级数部分和 如如:
22、 :计算计算sin(x)sin(x)的值,的值,公式为:公式为: 当第当第n n项的绝对值小于项的绝对值小于1010-5-5时结束。时结束。sinx=0; t=x; i=1;while(fabs(t)=1e-5) sinx=sinx+t; t= -t*x*x/(i+1)*(i+2); i=i+2; 求级数和的应用问题如:一球从10米高度落下并反弹,且每次反弹的高度为下落的一半,问第四次落地时共经过多少米?#include iostream.hvoid main()float n,s=0,h=10; s=s+h; /第一次落地时经过的距离.因从高空落下和以后各次不同故特殊处理. for(n=2;
23、n=4;n+) /第二次到第四次的处理过程. h=h/2; /反弹高度 s=s+2*h; coutsendl; 2. 素数素数 (1) int isprime(int m) int i; for(i=2;m%i!=0;i+);/注意此处分号不能少注意此处分号不能少 return(i= =m); (2) #include “math.h” . for(i=2;i=sqrt(m);i+) if(m%i= =0)break; if(i= =k+1) . else .3. 最大公约数和最小公倍数最大公约数和最小公倍数 int gcd(int m,int n)int h; while(h=m%n) m=
24、n;n=h; return (n); 也可以从定义出发求解最大公约数也可以从定义出发求解最大公约数(程序略程序略)还可以用辗转相减的方法求解最大公约数还可以用辗转相减的方法求解最大公约数(程序略程序略)4. 判断回文判断回文(1)判断字符串是不是回文串.方法是构造一个原串的逆序串,再和原串比较,若相同则是回文串.注意字符串处理函数的正确使用.#include “stdio.h”#include “string.h”#include “iostream.h”void main() char s80,*p=s,ch,s180; int i,j=0;gets(s);strcpy(s1,s); /先先
25、将原串复制到另一字符串中保存起来将原串复制到另一字符串中保存起来,注意两参数的类型注意两参数的类型j=strlen(s); for(i=0;ij/2;i+) ch=si; si=sj-i-1; sj-i-1=ch; if(strcmp(s,s1)=0)/注意两字符串比较一定要通过调用该函数注意两字符串比较一定要通过调用该函数,两参数为两参数为 字符指针或字符数组名字符指针或字符数组名 cout“yes”endl;else cout“no”endl; 5.数组数组(1)求极值求极值(包括最大最小值及其下标包括最大最小值及其下标)求最大值求最大值max=a0; for(k=1;kmax)max=a
26、k;求最大值的位置求最大值的位置(即下标即下标) int fun(int a ,int n)int imax,k; imax=0; for(k=1;kaimax)/注意是元素之间比较注意是元素之间比较,imax为最大下为最大下标标imax=k; /注意替换的是最大下标注意替换的是最大下标,而不是元而不是元素素 return(imax);(2)排序排序冒泡法冒泡法: for(i=0;in-1;i+)/*从小到大排序从小到大排序*/for(j=0;jaj+1) temp=aj;aj=aj+1;aj+1=temp;选择法选择法: for(i=0;in-1;i+) k=i;for(j=i;jn;j+)
27、 if(akaj)k=j; if(i=k)w=ai;ai=ak;ak=w; (3)插入、删除插入、删除(程序略,请参阅教材及习题程序略,请参阅教材及习题)注意数组不同移动方向情况下循环控制变量的变化情况注意数组不同移动方向情况下循环控制变量的变化情况(4)二分法查找二分法查找在由小到大排列的在由小到大排列的N个元素组成的数组中查找个元素组成的数组中查找x,主要实现部分如下主要实现部分如下: . bot=0;top=N; mid=(bot+top)/2; while(botamid) bot=mid+1; else top=mid-1; mid=(bot+top)/2; if( bottop )
28、 coutnot found.n; else coutamid=amidendl; . 6. 字符串处理字符串处理 (1) 求长度求长度long len(char s)long i=0; while(si!=0)i+; return i;上述函数相当于库函数上述函数相当于库函数strlen 的功能的功能 (2) 复制复制完全复制完全复制:void copy_string(char *from,char *to)/两参数也可以为两参数也可以为字符数组名字符数组名while(*from!=0) *to+=*from+; *to=0; 上述函数相当于库函数上述函数相当于库函数strcpy的功能的功能 复制前复制前n个字符组成的子串个字符组成的子串 for(k=0;k=A&skx; while(si!=0&si!=x) i+; if(si=x) for(j=i;sj!=0;j+) sj=sj+1;