面向对象程序设计综合习题(2)及答案
一、选择题:
1. 若用数组名作为函数调用的实参,传递给形参的是()。
A. 数组的首地址B. 数组中第一个元素的值
C. 数组全部元素的值D. 数组元素的个数
2. 采用重载函数的目的是()。
A. 实现共享B. 减少空间
C. 提高速度D. 使用方便,提高可读性
3. 下面的标识符中,()是文件级作用域。
A. 函数形参 B.语句标号 C.外部静态类标识符 D.自动类标识符
4. 当#include后面的文件名用双引号括起来时,寻找被包含文件的方式是()。
A. 直接按系统设定的标准方式搜索目录
B. 先在源程序所在目录搜索,再按系统设定的标准方式搜索目录
C. 仅仅搜索源程序所在目录
D. 搜索当前逻辑盘上的所有目录
5. 在下面存储类中,()的对象不是局部变量。
A. 外部静态类 B. 自动类 C. 函数形参D. 寄存器类
6. 预处理命令在程序中都是以()符号开头的。
A. * B. # C. & D. @
7. 用new运算符创建一个含10个元素的一维整型数组的正确语句是()。
A. int *p=new a[10]; B. int *p=new float[10];
C. int *p=new int[10];D. int *p=new int[10]={1,2,3,4,5}
8. 假定变量m定义为“int m=7;”,则定义变量p的正确语句为( )。
A. int p=&m; B. int *p=&m; C. int &p=*m; D. int *p=m;
9. 关于void 指针,下列说法正确的是( )。
A. void 指针就是未指向任何数据的指针
B. void 指针就是已定义而未初始化的指针
C. 指向任何类型数据的指针可直接赋值给一个void 指针
D. void 指针值可直接赋给一个非void 指针
10. 假定p是具有double类型的指针变量,则表达式++p使p的值(以字节为单位)增加( )。
A. 1B. 4C. sizeof(double)D. sizeof(p)
11. 定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为( )。
A. int *p=new int[30];B. int *p=new int(30);
C. int *p=new [30]; D. *p=new int[30];
12. 假定有“struct BOOK{char title[40]; float price;}; BOOK *book=new BOOK;”,则正确的语句为( )。
A. strcpy(book->title,”Wang Tao”); B. strcpy(book.title,”Wang Tao”);
C. strcpy(*book.title,”Wang Tao”); D. strcpy((*book)->title,”Wang Tao”);
13. 下列对引用的陈述中不正确的是( )。
A. 每一个引用都是其所引用对象的别名,因此必须初始化
B. 形式上针对引用的操作实际上作用于它所引用的对象
C. 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行
D. 不需要单独为引用分配存储空间
14. 假定指针变量p定义为“int *p=new int(100);”,要释放p所指向的动态内存,应使用语句()。
A. delete p; B. delete *p; C. delete &p; D. delete []p;
15. 关于消息,下列说法中不正确的是( )。
A. 发送消息的对象请求服务,接受消息的对象提供服务
B. 消息的发送者必须了解消息的接收者如何相应消息
C. 在C++中,消息的发送具体体现为对接收消息的对象的某个函数的调用
D. 每个对象只能接收某些特定格式的消息
16. 软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的()。
A. 可维护性B. 可复用性C. 兼容性D. 正确性
17. 软件产品准确执行软件需求规格说明书中所规定的任务的能力叫做软件的()。
A. 可维护性B. 可复用性C. 兼容性D. 正确性
二、填空题
1. 作为语句标号使用的C++保留字case和defaule只能用于________语句的定义体中。
2. 当在程序中执行到________语句时,将结束本层循环类语句或switch语句的执行。
3.在程序执行完________函数调用后,将结束整个程序的执行过程,返回到C++集成开发窗口。
4. 存储字符’a’和字符串”a”分别需要占用________和________个字节。
5. 字符串”a://xxk//数据”的长度为________。
6. 一个二维字符数组a[10][20]能够存储________个字符串,每个字符串的长度至多为________。
7. 若需要把一个字符串”aaa”赋值到字符数组a中,则需要执行________函数的调用来实现。
8. 如果一个函数只允许同一程序中的函数调用,则应在该函数定义前加上__________C++保留字。
9. 在函数模板的参数中,用class修饰的参数称为__________参数。
10. 如果一个函数定义中使用了__________修饰,则该函数不允许被其它文件中的函数调用。
11.调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的__________。
12. C++程序运行时的内存空间可以分成全局数据区,堆区,栈区和__________。
13. 若二维数组a有m列,设a[0][0]位于数组的第一个位置上,则计算任一元素a[i][j]在数组中位置序号的公式为____________。
14. 一个指针类型的对象占用内存的________个字节的存储空间。
15. 假定一个数据对象为int*类型,则指向该对象的指针类型为_______。
16.假定p所指对象的值为25,p+1所指对象的值为42,则*++p的值为________。
17.假定p所指对象的值为25,p+1所指对象的值为42,则执行*(p++)或*p++运算后,p所指对象的值为________。
18. 一个数组的数组名实际上是指向该数组________元素的指针,并且在任何时候都不允许________它。
三、程序填空:
1. 从键盘上输入一个正整数,然后把它转换成的二进制数的每一位存放到一维数组中,最后输出该二进制数。注意二进制数的存放是按照从低位到高位的次序进行的。
#include <iostream.h>
void main()
{
int x;
cout<<"输入一个整数:";
cin>>x;
int a[20],k=0,r;
do {
r=x%2;
a[k++]=r;
x=___(1)___;
} while(___(2)___);
for(--k;k>=0;k--) ___(3)___;
cout<<endl;
}
(1) (2) (3)
2. 对按从小到大排列的有序数组a[n]进行二分查找x的算法,若查找成功返回该元素下标,否则返回-1。
int BinarySearch(int a[],int x)
{
int low=0, high=N-1; //定义并初始化区间下界和上界变量
int mid; //定义保存中点元素下标的变量
while(low<=high) {
mid=___(1)___;
if(x==a[mid]) ___(2)___;
else if(x<a[mid]) high=mid-1;
else ___(3)___;
}
return -1;
}
(1) (2) (3)
3. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序正好相反。
void f6(NODE*& L, int table[], int n)
{
L=NULL;
if(n<=0) return;
int i=0;
NODE* p;
while(___(1)___) {
p=new NODE;
p->data=___(2)___;
p->next=L;
___(3)___;
i++;
}
}
(1) (2) (3)
四、写出程序运行结果
1. #include<iostream.h>
const int T=6;
void main()
{
int i,j;
for(i=1;i<=T;i+=2)
for(j=2;j<=T;j+=2) {
if(i+j<T) cout<<’+’;
else cout<<’*’;
}
}
2. #include<iomanip.h>
const int N=3;
void main()
{
int a[N][N]={{7,-5,3},{2,8,-6},{1,-4,-2}};
int b[N][N]={{3,6,-9},{2,-8,3},{5,-2,-7}};
int i,j,c[N][N];
for(i=0;i<N;i++) //计算矩阵C
for(j=0;j<N;j++)
c[i][j]=a[i][j]+b[i][j];
for(i=0;i<N;i++) { //输出矩阵C
for(j=0;j<N;j++)
cout<<setw(5)<<c[i][j];
cout<<endl;
}
}
3. #include<iostream.h>
void f2(int& x, int& y)
{
int z=x; x=y; y=z;
}
void f3(int* x, int* y)
{
int z=*x; *x=*y; *y=z;
}
void main()
{
int x=10,y=26;
cout<<"x,y="<<x<<", "<<y<<endl;
f2(x,y);
cout<<"x,y="<<x<<", "<<y<<endl;
f3(&x,&y);
cout<<"x,y="<<x<<", "<<y<<endl;
x++; y--;
f2(y,x);
cout<<"x,y="<<x<<", "<<y<<endl;
}
五、指出程序或函数的功能
1. #include<iostream.h>
void main()
{
int i,p=1,s=0;
int N;
cout<<"输入一个正整数:";
cin>>N;
for(i=1;i<=N;i++) {
p*=i;
s+=p;
}
cout<<s<<endl;
}
2. void fun5(char* a, const char* b)
{
while(*b) *a++=*b++;
*a=0;
}
六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误。
1. 下面是一个类的定义,存在着3处语法错误,请指出错误行的行号并改正。
class CE { //1行
private: //2行
int a,b;//3行
int getmin() {return (a<b? a:b);} //4行
public //5行
int c; //6行
void SetValue(int x1,int x2, int x3) { //7行
a=x1; b=x2; c=x3; //8行
}; //9行
int GetMin(); //10行
}; //11行
int GetMin() { //12行
int d=getmin(); //13行
return (d<c? d:c); //14行
} //16行
错误行的行号为______、________和________。
分别改正为____________________、________________和___________________。
七、编程:
1. 按照下面函数原型语句编写一个递归函数计算出数组a中n个元素的平方和并返回。
int f(int a[],int n);
2. 根据下面类中MaxMin 函数成员的原型和注释写出它的类外定义。
class AA {
int* a;
int n;
int MS;
public:
void InitAA(int aa[], int nn, int ms) {
if(nn>ms) {cout<<"Error!"<<endl; exit(1);}
MS=ms;
n=nn;
a=new int[MS];
for(int i=0; i<MS; i++) a[i]=aa[i];
}
int MaxMin(int& x, int& y); //从数组a的前n个元素中求出
//最大值和最小值,并分别由引用参数x和y带回,
//同时若n大于0则返回1,否则返回0。
};
上一页12下一页 |
下一篇:暂无