您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > 大学C++期末复习资料
考试内容(1)第1~9章内容,大致占70%(2)第10~12,14章内容,大致占30%复习:注重①上机手册中的★各章实验、练习册、算法总结、考试样题一定要做!!!!②教材中的★第10章开始的各章习题(除编程题)③教材例子说明:教材以及实验手册中的打*部分不考。文件操作必考:第14章(掌握实验中的后3题即可)编程题:面向过程和面向对象部分的编程题都有。编程题以实验手册中做过的题目为主。(30分左右,2题面向过程题,1题面向对象题)。面向过程部分复习要点:0.C++程序的开发过程。编辑、编译、连接、执行1.合法关键字、合法用户标识符2.各种常数形式3.各种表达式的计算(如逗号表达式、逻辑、整除、整数求余等)逻辑运算优化问题4.前后缀++,--5.if语句的语义(else的匹配问题)6.switch的语义(与break连用)7.循环与break,continue,意义8.函数原型声明,函数调用,函数的返回值9.函数的声明原则:调用前必须有声明特别:若函数有缺省值,则声明时给出缺省值,定义时就不能给了intfun(intx=1,inty=2);//函数原型声明,给出参数的缺省值voidmain(){……}intfun(intx,inty);//函数定义,不能给参数的缺省值{…}10.带有缺省值的函数,函数定义时形参缺省值只能从右端向左连续给出,调用时实参值从左向右连续给出。voidfun(inta,intb=0,intc=5){…}//函数定义fun(x,y)//函数调用函数调用时,实参从左侧连续给出。实参与形参的结合是从左至右顺序进行的,第1个实参必然与第1个形参结合,第2个实参必然与第2个形参结合,……。因此指定默认值的参数必须放在形参表列中的最右端,否则出错。例如以下函数定义:voidf1(inta=0,intb,intc=6){…}//错误voidf1(inta,intb=0,intc=6){…}//正确voidf1(inta,intb,intc=6){…}//正确11.静态变量、全局变量、局部变量(例子)程序输出为:__________intfun(intk){//静态变量,第一次到达该语句时分配存储空间,并初始化一次staticintm=1;//再次进入时,仍然保留前一次退出该函数时的值intn=2;m=k+m+n++;returnm;}voidmain(){for(inti=0;i3;i++)//一次循环,i的值增加2coutfun(i++)'\t';cout'\n';}答案:3712.递归(如何解决?)画图,每层调用均画出(例子)程序输出为___________#includeiostream.hvoidfunc(charc){coutc;if(c'3')func(c+1);coutc;}voidmain(){func('0');coutendl;}答案:0123321013.宏代换:简单代换14.函数重载概念数名相同,但参数个数或类型不同,是一种静态多态,编译时确定函数调用关系。(还有一种动态多态未讲)注意:面向对象部分,const也作为重载函数的依据:(未讲)阅读例11.9const参与区分重载函数。15.内联函数与普通函数的区别内联函数运行时不发生函数调用,编译时,编译器在函数调用处,插入被调函数的处理代码,以空间换时间,提高程序执行的效率。(1)一般函数的定义前加inline关键字(2)类体内定义的成员函数,默认是内联函数。在类体外定义成员函数,默认是外联函数。若欲在类体外定义内联函数,要加inline关键字(3)一般将功能简单、需经常调用的函数定义为内联函数。内联函数内部实现简单,不能有复杂的循环语句。16.函数参数的形式,同样适用于面向对象部分的成员函数a)普通变量做参数:实参和形参是不同的变量,形参是局部动态变量b)指针做参数:实参指针值赋给形参指针变量(参数单向传递)c)引用做参数:实参与形参是同一个变量,形参变化实参也变化(例子)#includeiostream.hvoidswap1(intv1,intv2)//1v1和v2的变化不影响实参{inttmp=v2;v2=v1;v1=tmp;}voidswap2(int*v1,int*v2)//2v1和v2自身的变化不影响实参{但*v1的变化,影响v1指向的量int*tmp=v2;v2=v1;v1=tmp;}voidswap3(int*v1,int*v2)//3*v1和*v2的变化影响它们指向的量{inttmp=*v2;*v2=*v1;*v1=tmp;}voidswap4(int&v1,int&v2)//4v1和v2的变化影响实参{inttmp=v2;v2=v1;v1=tmp;}voidmain(){intv1=10,v2=20;swap1(v1,v2);coutv1','v2endl;输出:10,20swap2(&v1,&v2);coutv1','v2endl;输出:10,20swap3(&v1,&v2);coutv1','v2endl;输出:20,10swap4(v1,v2);coutv1','v2endl;输出:10,20}举例(来自练习册中)#includeiostream.h(画图)voidfun(float*p1,float*p2,float*s)//s是局部指针{s=newfloat;//注意:此语句后,s已不指向a[0]*s=*p1+*(p2++);}voidmain(){floata[2]={1.1,2.2};floatb[2]={10.0,20.0},*s=a;fun(a,b,s);cout(*s)endl;}程序输出为:?例子:以下程序的运行结果是:________________.#includeiostream.hintf(inta,int*b,intc){a=*b;*b=c;c=a;returnc;}voidmain(){intx,y,z;x=10;y=100;z=0;z=f(x,&y,z);coutx','y','z;}输出:10,0,100例子:已知函数的原型是:voidf(int*a,long&b);变量v1、v2的定义是intv1;longv2;正确的调用语句是____。A)f(v1,&v2)B)f(v1,v2)C)f(&v1,v2)D)f(&v1,&v2)!!!以上原理适用于任意数据类型(包括结构体类型、类类型)17.一维数组的定义、做函数参数(参数的意义和形式)一维函数名做实参:注意形参的写法和意义(形参是元素指针变量)访问数组的各种方式!intfsum(int*b,intn)//或intb[10]{inti,s=0;for(i=0;in;i++)s+=b[i];//s+=*(b+i);return(s);}//在被调函数中可以:b++intfsum(intb[],intn){inti,s=0;for(i=0;in;i++)s+=(*b++);return(s);}voidmain(void){inta[15]={1,2,3……14,15};intshead,stail;shead=fsum(a,10);//第1次调用,注意实参只能写数组名stail=fsum(&a[5],10);//第2次调用coutshead‘,’stailendl;}例子:有如下定义:inta[5]={2,4,6,8,10},*p=a;下列表达式中不能得到数值4的是________A)*(a+2)B)a[1]C)*(p+1)D)*p+2;例子:有以下程序#includeiostream.hvoidmain(){inti,s=0,t[]={1,2,3,4,5,6,7,8,9};for(i=0;i9;i+=2)s+=*(t+i);couts;}程序执行后的输出结果是________A)45B)20C)25D)36例子:下列程序的运行结果是:_____________#includeiostream.hvoidmain()学生自己看{charp[]={36974388},*p1=p;inti=0,num=0;while(*(p1+i)!='\0'){if((*(p1+i)-'0')%2)num=10*num+(*(p1+i)-'0')/2;i++;}coutnum;}18.字符串指针的含义(指针空间,串空间,*p的含义)char*p,s[20];p=s;p=p+i;¾p[i]通过指针访问字符数组中的字符¾p通过指针访问一维字符数组整体,它代表一个串¾*p通过指针访问当前指向的元素(一个字符)coutp;输出的是p指向的字符串,而不是地址cout*p;输出的是p指向的当前字符注意:输出字符型指针的含义,输出非字符型(如整型)指针的含义chars[20]=abc;inta[20]={3,5};couts;输出abccouta;输出地址值couts+1;输出bccouta+1;输出地址值cout*s;输出acout*a;输出3字符串处理函数的参数为字符指针(即地址)例:chars1[10]=123,s2[10]=abc;strcpy(s1+2,s2+1);couts1;//输出12bccouts1+1;//输出2bccoutstrlen(s1+1);//输出3strcpy(s1,w123);strcpy(s2,erw123);coutstrcmp(s1+1,s2+3);//输出0C++规定,输出char*类型的指针,就是输出字符串,char*代表字符串。而输出其他类型的指针(如int*),则输出的是地址值。题目:有以下程序voidmain(){char*s={ABC};注意:字母A的ASCII码值为65。do{cout*s%10;s++;}while(*s);}程序运行后的输出结果是________A)5670B)567C)656667D)ABC例:#includeiostream.h#includestring.hvoidswap(char*s1,char*s2){chart;t=*s1;*s1=*s2;*s2=t;}voidmain(){chars1[]=BD,s2[]=BC,s3[]=AB;if(strcmp(s1,s2)0)swap(s1,s2);if(strcmp(s2,s3)0)swap(s2,s3);if(strcmp(s1,s2)0)swap(s1,s2);couts1endl;//第一行输出ADcouts2endl;//第二行输出BCcouts3endl;//第三行输出BB}19.字符串处理函数见实验手册算法总结要求:会自己编写字符串处理函数,如my_strlen,my_strcpy等20.三类const指针inta,b;①指向常量的指针,目的是保护它所指向的量constint*p1;或intconst*p1;*p=...×②指针常量,目的是让指针的指向固定int*constp=&a;//p是指针常量,固定指向ap=...×③指向常量的指针常量constint*constp=&a;//注意有两个const即p=...×*p=...×例子:有定义:inta=78,c=18;constint*p=&a;则以下不能正确执行的语句是:A)p=&c;B)*p=25;C)a=10;D)c=8;面向对象部分复习1.面向对象编程的三大特点(各特点的用处)z封装性(数据安全)z继承和派生(软件重用)z多态性(灵活性)未讲,但要知道2.类的成员的访问特性private,protected,public(1)在本类中,通过成员函数、通过本类对象能直接访问哪些成员?(2)在不同派生方式的派生类中,通过成员函数能直接访问基类的哪些成员?(3)通过派生类对象能直接访问基类的哪些成员?3.结
本文标题:大学C++期末复习资料
链接地址:https://www.777doc.com/doc-7027580 .html