C++语言程序设计期末复习提要
第一部分 各章复习要求
下面按照主教材各章次序给出每章的具体复习要求,供同学们进行期末复习时参考。
第一章 C++语言概述
本章重点掌握的内容
1.程序、程序文件和函数的概念及其相互之间的关系。
2.函数的定义格式和作用,主函数的特殊地位和作用。每个函数包含函数头和函数体两个部分,函数体就是由一对花括号括起来的复合语句,函数头就是函数体之前的部分。
3.C++基本语句和复合语句的语法格式。每条基本语句以分号作为结束符,每个复合语句是用一对花括号括起来的语句序列,其中的每一条语句仍可以是复合语句。
4.#include命令的作用,C++系统编译程序对其处理的过程;头文件的文件名格式、在程序中的使用方法和作用。
5.程序中两种注释标记的写法和作用。
6.利用标准输出流对象cout和插入操作符<<向标准输出设备—-显示器屏幕输出表达式的值,利用标准输入流对象cin和提取操作符>>从键盘向内存变量输入值。注意:当从键盘输入多个数据时,各数据之间只能用空格或回车符作为分隔符,当向屏幕输出每个数据时,将紧接着上一次显示位置之后显示出来。
7.对于C++源程序文件名、编译后生成的目标文件名和连接后生成的可执行文件名,其系统给定的扩展名分别是什么?C++系统的编译程序和连接程序分别实现什么功能?
对于本章的其余内容均作一般了解。
第二章 基本数据类型和表达式
本章重点掌握的内容
1.C++数据类型的分类:整型类(字符、布尔、枚举等类型归于此类)、实型类、指针类、数组类(字符串归于此类)、复合类(包括结构、联合和类类型)等。
2.各种整数类型的关键字表示,存储空间的大小和值域范围。若不特别指明,均认为int类型的大小为4个字节,即每个整型数据占有4个字节的存储空间。
3. 整型变量的定义和初始化,十进制整型常量的表示。
4. 字符类型的关键字表示,存储中间的大小和值域范围。字符型常量的表示,回车、换行、单引号、双引号、反斜线、空字符(即ASCII代码为0的字符)等特殊字符的表示。
5. 字符型变量的定义和初始化,字符型与整型的关系。
6. 枚举的概念,枚举类型的定义,枚举变量的定义和初始化,枚举常量与整型常量的对应关系。
7. 各种实数类型的关键字表示,存储空间的大小和有效位数。
8. 单精度和双精度实数的定点表示和浮点(科学)表示,实型变量的定义和初始化。
9.加、减、乘、除、取余、赋值、增1、减1、取数据存储长度等算术运算符的表示、含义、运算对象个数和运算优先级。
10.关系运算符的定义和关系表达式的计算,逻辑运算符的定义与逻辑表达式的计算,系统给定的逻辑(布尔)类型的定义,逻辑常量false和true与整型常量的对应关系,逻辑变量的定义和使用,求任意表达式对应逻辑值的方法。
11.typedef语句格式及功能。
一般掌握的内容
1.整型常量的八进制和十六进制表示。
2. 符号常量和常值变量的定义和初始化,它们之间的区别。
3. 位操作符、复合赋值操作符的含义与使用。
4.不同数据类型之间的强制转换。
5.相反条件、等价条件、永真条件的含义,条件操作符和逗号操作符的含义及运算过程。
对于本章的其余内容均作一般了解。
第三章 C++程序的流程控制
本章重点掌握的内容
1.程序或程序模块的三种基本结构,每种结构的执行过程。
2. 简单if语句、带else子句的if语句、多分支结构的if语句的定义格式、执行过程和在处理问题中的具体应用。
3.switch语句的定义格式、执行过程和在处理问题中的具体应用。
4. if语句与switch语句之间的功能比较,if语句与switch语句之间的转换,但有时if语句无法或很难转换为switch语句。
5.for循环、while循环和do…while循环的定义格式、执行过程和在处理问题中的具体应用。
6. 三种循环结构之间的比较及其相互转换。
7. break语句在switch语句和在各种循环语句中的作用,continue语句在各种循环语句中的作用。
8. goto语句和return语句的定义格式和功能。
第四章 数 组
本章重点掌握的内容
1. —维数组的含义、定义格式及初始化格式。
2. 数组长度、数组元素、元素下标的含义,访问数组元素的语法格式,下标运算符的操作对象和操作结果。
3.数组元素的下标变化范围,数组元素所占存储空间大小和整个数组所占存储空间大小的计算,各元素对应存储空间的排列情况,每个元素的存储地址的计算。
4.利用一维数组存储数据,按元素值的升序或降序排列,按给定条件或功能对数组元素依次进行访问和处理。
5.一维数组的含义、定义格式及初始化格式。
6.二维数组的行数和列数的概念,数组长度(即所含元素个数)的计算。
7.访问二维数组元素的语法格式,每个下标运算符的操作对象和操作结果。第一个下标运算符的操作结果为对应的一维数组,第二个下标运算符的操作结果为该一维数组中的对应元素。
8.二维数组中的所有元素在存储空间中的排列情况,每个元素的存储地址的计算。
9.利用二维数组存储矩阵数据,按给定条件或功能对数组元素依次进行访问和处理。
10.字符串常量的定义格式,字符串的存储格式。
11. —维字符数组、二维字符数组与字符串之间的关系,—维字符数组与二维字符数组的初始化。
12. strlen,strcpy,strcmp,strcat等字符串函数的声明格式及功能,利用提取和插入操作符输入和输出字符串的语法格式。
13.利用typedef语句定义数组类型。
对于本章的其余内容均作一般掌握。
第五章 C++函数
本章重点掌握的内容
1. 函数的声明格式与定义格式。一个函数的返回值类型又称为函数类型,它可以为已经存在的任何一种类型或引用、函数名可以为任何一个合法的标识符,形式参数表包含有对每个形参变量的说明,函数体是一个复合语句。
2. 函数调用表达式的语法格式及执行过程。函数调用中的实在参数表包含有若干个表达式,其个数通常与对应的形参表中的形参个数相同。函数调用时,首先把实在参数表中每个实参的值对应传送给形参表中的每个形参变量,接着执行其函数体,当函数体执行结束或 执行return语句后就返回到调用表达式的位置,在原函数中继续向下执行。
3.当函数调用不返回值(即被调用的函数为void类型)时,调用表达式只能作为单独的语句出现,否则,当函数调用返回一个值时,调用表达式既可以单独作为一条语句出现,也可以作为表达式中的一个数据项出现。
4.函数定义中的形参变量是作用于该函数的局部变量,当函数被调用时才临时为它分配存储空间,当函数执行结束后将自动由系统回收掉。
5. 一个函数只有先被声明或定义后,才能被调用。函数声明语句与函数定义中的函数头基本相同,所不同的是:声明语句必须以分号结束,形参表中可以为任意形参名或者根本不给出。
6.形参为一维数组或二维数组时的说明格式以及对应实参的语法规则。函数调用中的把实参数组传送给形参数组的操作只是传送实参数组所对应的存储空间的首地址,因此,形参数组和实参数组对应的是同一块数组空间,访问任一数组中的元素都是在这块数组空间上 进行的,或者说,访问形参数组中的元素也就是访问实参数组中的元素。
7. 变量的作用域的概念和含义。在函数外部定义的常量(包括符号常量和常值变量)或变量具有全局作用城,若全局变量没有被显式初始化,则将被系统隐含初始化为0。若在定义变量(包括定义常值变量在内)的语句或定义的函数之前加上static关键字,则它们只能为本程序文件所使用,否则能够为整个程序中的所有文件所使用。在函数中任一个花括号内定义的变量称为局部变量,其作用城从定义位置起到对应的右花括号位置,当离开其作用域后,所分配的存储空间将自动被系统回收掉。局部变量未被初始化时,其值是不确定的。当然无论是全局变量还是局部变量,都必须遵循先定义后使用的原则。
8.函数模板(又称模板函数)的定义格式及其作用。函数模板的实例化,实例化与已有函数定义之间的优先关系。
一般掌握的内容
1. 函数的递归调用的概念和递归函数的具体执行过程。
2. 头文件在程序文件中的位置和作用。
3. 函数声明或定义中可选参数的使用,对应的函数调用的格式及执行过程。
4. 内联函数的定义与作用。
5.函数重载的概念。函数名相同,但对应形参表不同的一组函数称为重载函数。参数表不同是指参数个数不同或在个数相同的情况下至少有一个参数对应类型不同。
6.由static修饰的局部变量的特性。特性之一是:若未被初始化,则隐含初始化为0;特性之二是:当离开所定义的作用域后,该变量所对应的存储空间依然存在,不会被系统收回,以后再调用该函数时可继续访问它。
对于本章的其余内容均作一般了解。
第六章 指针、引用和动态空间管理
本章重点掌握的内容
1.指针的概念,指针变量的定义和初始化。
2. 指针赋值(=)、取对象(变量)地址(&)、访问指针所指对象(*)、指针比较(==、!=、>、< 等)、指针算术运算(+、-、+=等)、指针增1或减1(++、–)、指针类型转换等操作的含义、优先级及其应用。 3.数组名是指针常量,其值为该数组空间的首地址,或者说指向该数组空间的开始位置。函数定义中的数组形参是同类型指针形参的等价表示,其数组名是指针变量而不是常量。 4.利用指针方式而非下标方式访问一维数组(含字符数组)中的元素,一维数组元素的下标访问方式与指针访问方式之间转换。 5.一级指针(即带有一个星号定义的指针)作为函数参数和返回类型的应用。 6.引用的概念,引用变量的定义和初始化,引用作为函数参数和返回类型的应用。 7. new和delete操作符的含义及作用,动态对象或动态数组的建立与释放。动态分配空间将持续存在,随时可被指向它的指针所访问,直到使用delete操作符释放它为止。 一般掌握的内容: 1 指针常量的两种定义格式和含义。 2.指针表达式的副作用。 3. 利用指针方式而非下标方式访问二维数组中的元素,二维数组元素的下标访问方式与指针访问方式之间转换。 对于本章的其余内容均作一般了解。 第七章 结构与联合 本章重点掌握的内容 l. 结构的概念,结构类型的定义格式,结构类型的声明(即不完整定义)格式。 2. 结构对象(变量)的各种定义格式和初始化,结构大小的计算,结构对象和结构数组对象的动态分配和初始化。 3. 结构赋值,结构成员的直接访问和间接访问,利用结构数组保存和处理数据。 4. 结构和结构指针(含结构数组)作为函数参数利返回值类型的具体应用。 一般掌握的内容有: 1. 链表的概念,链表中结点的结构,链表的建立、遍历、查找和释放等操作的算法。 2.操作符重载的概念,对结构类型进行算术、关系、输入和输出等操作符重载的函数定义格式,调用操作符重载函数的格式。 3. 联合的概念,联合类型的定义格式,联合对象的定义和初始化,联合的存储结构及大小的计算,匿名(无名)联合的特点。 第八章 类与对象 本章重点掌握的内容 l. 类的概念,类类型的定义格式,类成员的三种访问权限的具体含义,类与结构的异同。类成员在该类成员函数中的访问方法(即直接使用类成员名)和在类外其他函数中的访问方法(即必须使用对象名限定)。 2.this指针的含义,类成员函数在类中声明或定义的格式,类成员函数在类外定义的格式,内联成员函数的定义格式,类类型大小的计算和类对象的存储结构。 3. 构造函数和析构函数的定义格式、调用时机和作用;构造函数的分类:无参构造函数、带参构造函数和拷贝构造函数;构造函数中初始化表的定义格式及作用。 4. 类的继承的概念,派生类(即带基类的类)的定义格式,对基类的三种不同继承方式的特点,对基类数据成员的初始化方法,类区分符的使用格式及作用。 5.类对象成员的初始化方法,派生类构造函数和析构函数被执行的过程。 一般掌握的内容 1.类成员函数的重载和操作符重载函数。注意:在类中定义操作符重载函数时,其第一个操作对象隐含为this指针所指向的对象,参数表中出现的是第二个操作对象。 2.赋值重载函数的定义格式、调用时机及作用。 3. 友元函数和友元类的概念,在一个类中对友元函数和友元类的声明格式,在类中引入友元的优缺点。 4. 静态数据成员的含义、声明格式、类外定义和初始化格式、访问方法。 5. 模板类的定义格式与模板类的实例化,利用模板类定义对象的语法格式。 对于本章的其余内容均作一般了解。 第九章 C++ 流 本章重点掌握的内容 1. C++流类系列中各流类之间的继承关系,iostream.h、fstream.h、strstrea.h、iomanip.h等头文件的组成及作用。 2.预定义标准输人流和输出流对象cin、cout和ceer的含义,在输入和输出流类中重载的提取和插入操作符函数的声明格式,以及调用它们的格式。 3. I/O操纵符dec、oct、hex、ws、endl、ends、setw(int)等的控制功能。 4. 文件的概念,字符文件和字节文件的存储格式,文件访问位置指针、文件结束标记、文件缓冲区、文件流对象(简称文件流)等的含义,文件流的定义、打开文件、关闭文件等语句的格式及作用,每一种文件打开方式的含义。 5. 使用插入操作符和put(char)成员函数向字符文件输出数据,使用提取操作符和get()、get(char &)、getline(char *,int,char)等成员函数从字符文件中读取数据。 一般掌握的内容 1.使用read(char *,int)和write(const char *,int)成员函数访问字节文件,使用seekg(long,seek-dir)和seekp(long,seek-dir)成员函数移动文件指针,使用dellg()和tellp()成员函数返 回文件指针位置。 2. ios流类中定义的bad()、eof()、fail()、clear()、fill()、precision(int)、setf()、unsetf(long)、width(int)等成员函数的声明格式及作用,I/O操纵符setiosflags(long)、resetiosflags(long)、setfill(int)、setprecision(int)等的调用格式及作用。 3.字符串流类对象的定义和使用。 对于本章的其余内容均作一般了解。 第二部分 期末考试题型示例 一、单选题 1.当需要把一个带初始化的变量重新定义为常量时,则应在该语句的前面加上关键字 。 A. static B. const C. continue D. extern 2.假定一个字符串的长度为n,则定义存储该字符串的字符数组的长度至少为 。 A.n-1 B.n C. n+1 D.n+2 3.假定AB为一个类,则 为该类的拷贝构造函数的声明。 A.AB(AB x) B. AB(AB&) C.AB(AB *) D. AB&(AB & x) 4.当需要打开A盘上的以xxk.dat文件用于输入时,则定义文件流对象的语句为 。 A.fstream fin(“A:xxk.dat”) B.ofstream fin(“A:xxk.dat”) C.ifstream fin(“A:xxk.dat”,ios::app) D.ifstream fin(“A:xxk.dat”,ios::nocreate) 二、填空题 1. 一个数组元素a[i]对应的指针访问方式为 。 2.假定p是一个指针,在取出p所指对象的值后使p自动增1的表达式为 。 3.X>1 && y!=2的相反条件为 。
4. 假定用户没有给一个名为AB的类定义构造函数,则系统为其隐含定义的构造函数为 。
三、指出函数或程序的功能
1. int AB(int *a , int n){
int x=a[0];
for (int i=1; i<n; i++)
if (a[i]<x) x=a[i];
return x;
}
2. template
void AC(Type &x , Type &y ) {
Type a=x;
x=y ; y=a ; }
四、程序运行结果
1. # include
class A {
int a , b ;
public :
A( ) { a=b=0; }
A( int aa , int bb ) : a(aa),b(bb) {
cout <<”a=”<<a<<”,”<<”b=”<<b<<endl;
}
~A( ){cout <<”Destructor!”<<endl; }
};
void main() {
A x , y(2 , 3);
}
2. # include
int AD(int a[] , int n) {
int x=1;
for (int i=0; i<n; i++)
x*=a[i];
return x;
}
void main() {
int a[]={ 2, 8, 6, 5};
cout <<AD(a , 4)<<endl;
}
五、程序填空
1. class A {
int * a;
int n;
public :
A(int nn=0):n(nn){
if (n==0) a=0;
else a= ; // 分配长度为n的动态数组
}
void Seta(int * aa) {
for (int i=0; i<n; i++) a[i]=aa[i];
}
// 定义析构造函数,释放动态数组空间
};
2. void AE(Student a[] , int n) {
// 按学号的升序排列数组a[n]中的元素
int k;
for (int i=1; i<n; i++) {
k=i-1;
for (int j=i; j<n; j++)
if (strcmp(a[j].num , a[k].num<0) ;
Student x=a[i-1];
; ;
}
}
六、编写函数或程序
1.编写一个函数,返回三个整数形参中的最大值。
2.编写一个函数,统计出整数文件 a:xc.dat 中的数据个数。
第三部分 示例解答
一、单选题
1. B 2. C 3. B 4. D
二、填空题
1. *(a+i) 2. *p++ 3. x<=1 || y==0 4. AB( ){ }
三、指出函数或程序的功能
1. 返回指针p所指向的具有n个元素的数组中的最小值。
2. 模板函数,交换两个引用形参x和y的值。
四、程序运行结果
1. a=2 , b=3
Destructor!
Destructor!
2. 480
五、程序填空
1. new int [n ]
~A( ) { delete []a; }
2.k=j;
a[i-1]=a[k];
a[k]=x;
六、编写函数或程序
1. int AF(int a , int b , int c) {
if (a<b) a=b;
if (a<c) a=c;
return a;
}
3.int AG( ) {
ifstream fin(“a:xc.dat”,ios::nocreate);
if (!fin) {
serr <<”文件不存在!”<<endl; exit(1); } int x, c=0; while (fin >>x ) c++;
return c;
}