面向对象程序设计形成性考核册作业二
一、选择题:
1. 若用数组名作为函数调用的实参,传递给形参的是( A )。
A. 数组的首地址 B. 数组中第一个元素的值
C. 数组全部元素的值 D. 数组元素的个数
2. 采用重载函数的目的是( D )。
A. 实现共享 B. 减少空间
C. 提高速度 D. 使用方便,提高可读性
3. 下面的标识符中,( C )是文件级作用域。
A. 函数形参 B.语句标号 C.外部静态类标识符 D.自动类标识符
4. 当#include后面的文件名用双引号括起来时,寻找被包含文件的方式是( B )。
A. 直接按系统设定的标准方式搜索目录
B. 先在源程序所在目录搜索,再按系统设定的标准方式搜索目录
C. 仅仅搜索源程序所在目录
D. 搜索当前逻辑盘上的所有目录
5. 在下面存储类中,( A )的对象不是局部变量。
A. 外部静态类 B. 自动类 C. 函数形参 D. 寄存器类
6. 预处理命令在程序中都是以( B )符号开头的。
A. * B. # C. & D. @
7. 用new运算符创建一个含10个元素的一维整型数组的正确语句是( C )。
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的正确语句为( B )。
A. int p=&m; B. int *p=&m; C. int &p=*m; D. int *p=m;
9. 关于void 指针,下列说法正确的是( C )。
A. void 指针就是未指向任何数据的指针
B. void 指针就是已定义而未初始化的指针
C. 指向任何类型数据的指针可直接赋值给一个void 指针
D. void 指针值可直接赋给一个非void 指针
10. 假定p是具有double类型的指针变量,则表达式++p使p的值(以字节为单位)增加(C )。
A. 1 B. 4 C. sizeof(double) D. sizeof(p)
11. 定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为( A )。
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 )。
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. 下列对引用的陈述中不正确的是( C )。
A. 每一个引用都是其所引用对象的别名,因此必须初始化
B. 形式上针对引用的操作实际上作用于它所引用的对象
C. 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行
D. 不需要单独为引用分配存储空间
14. 假定指针变量p定义为"int *p=new int(100);",要释放p所指向的动态内存,应使用语句( A )。
A. delete p; B. delete *p; C. delete &p; D. delete []p;
15. 关于消息,下列说法中不正确的是( B )。
A. 发送消息的对象请求服务,接受消息的对象提供服务
B. 消息的发送者必须了解消息的接收者如何相应消息
C. 在C++中,消息的发送具体体现为对接收消息的对象的某个函数的调用
D. 每个对象只能接收某些特定格式的消息
16. 软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的( A )。
A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性
17. 软件产品准确执行软件需求规格说明书中所规定的任务的能力叫做软件的( D )。
A. 可维护性 B. 可复用性 C. 兼容性 D. 正确性
二、填空题
1. 作为语句标号使用的C++保留字case和defaule只能用于__switch______语句的定义体中。
2. 当在程序中执行到__break______语句时,将结束本层循环类语句或switch语句的执行。
3.在程序执行完_主(或main)_______函数调用后,将结束整个程序的执行过程,返回到C++集成开发窗口。
4. 存储字符'a'和字符串"a"分别需要占用___1_____和____2____个字节。
5. 字符串"a://xxk//数据"的长度为__11______。
6. 一个二维字符数组a[10][20]能够存储___10_____个字符串,每个字符串的长度至多为___19_____。
7. 若需要把一个字符串"aaa"赋值到字符数组a中,则需要执行__strcpy______函数的调用来实现。
8. 如果一个函数只允许同一程序中的函数调用,则应在该函数定义前加上__static________C++保留字。
9. 在函数模板的参数中,用class修饰的参数称为__虚拟类型(或类型)________参数。
10. 如果一个函数定义中使用了____ static ______修饰,则该函数不允许被其它文件中的函数调用。
11.调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的__ __头文件______。
12. C++程序运行时的内存空间可以分成全局数据区,堆区,栈区和__代码区(程序区)________。
13. 若二维数组a有m列,设a[0][0]位于数组的第一个位置上,则计算任一元素a[i][j]在数组中位置序号的公式为__i*m+j+1(从1开始算起,若从0开始则为:i*m+j)__________。
14. 一个指针类型的对象占用内存的___4_____个字节的存储空间。
15. 假定一个数据对象为int*类型,则指向该对象的指针类型为__int**_____。
16.假定p所指对象的值为25,p+1所指对象的值为42,则*p++的值为__25______。
17.假定p所指对象的值为25,p+1所指对象的值为42,则执行*(p++)或*p++运算后,p所指对象的值为__42______。
18. 一个数组的数组名实际上是指向该数组___首_____元素的指针,并且在任何时候都不允许__修改______它。
三、程序填空:
1. 从键盘上输入一个正整数,然后把它转换成的二进制数的每一位存放到一维数组中,最后输出该二进制数。注意二进制数的存放是按照从低位到高位的次序进行的。
#include
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<
(1) x/2 (2) x或x!=0 (3) cout< 2. 对按从小到大排列的有序数组a[n]进行二分查找x的算法,若查找成功返回该元素下标,否则返回-1。
int BinarySearch(int a[],int N,int x) //不增加int N将会提示N未声明
{
int low=0, high=N-1; //定义并初始化区间下界和上界变量
int mid; //定义保存中点元素下标的变量
while(low<=high) {
mid=___(1)___;//假定要找的数正好是下界和上界的中间
if(x==a[mid]) ___(2)___;//如正好找到这个数就输出其下标
else if(x else ___(3)___; //要找的数比中间的大则在后半段中找
}
return -1;//找不到返回-1
}
(1) (low+high)/2 (2) return mid (3) low=mid+1
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) i
1. #include
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
}
}
程序运行结果为:
++*+*****Press any key to continue
2. #include
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
for(i=0;i
}
程序运行结果为:
10 1 -6
4 0 -3
6 -6 -9
Press any key to continue
3. #include
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="<
cout<<"x,y="<
cout<<"x,y="<
f2(y,x);
cout<<"x,y="<
程序运行结果为:
x,y=10, 26
x,y=26, 10
x,y=10, 26
x,y=25, 11
Press any key to continue
五、指出程序或函数的功能
1. #include
void main()
{
int i,p=1,s=0;
int N;
cout<<"输入一个正整数:";
cin>>N;
for(i=1;i<=N;i++) {
p*=i;
s+=p;
}
cout< }
功能为:计算并输出的值,其中N值由键盘输入。
2. void fun5(char* a, const char* b)
{
while(*b) *a++=*b++;
*a=0;
}
功能为:实现字符串系统函数strcpy的功能,把b所指的字符串拷贝到a所指的字符数组空间中。
六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误。
1. 下面是一个类的定义,存在着3处语法错误,请指出错误行的行号并改正。
class CE { //1行
private: //2行
int a,b; //3行
int getmin() {return (a 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
错误行的行号为__5___、___9____和___12___。
分别改正为___ public:________、____}_____和___ int CE::GetMin(){_____。
七、编程:
1. 按照下面函数原型语句编写一个递归函数计算出数组a中n个元素的平方和并返回。
int f(int a[],int n);
编写的求平方和函数如下:
int f(int a[],int n)
{
if(n==0) return 0;
else return a[n-1]*a[n-1]+f(a,n-1);
}
2.按照函数原型语句"void p(int n);"编写一个递归函数显示如下图形,此图形是n=5的情况。
1
22
333
444
555
显示如上图形的递归函数如下:
#include
void p(int n)
{
if(n!=0) {
p(n-1);
for(int i=0; i
}
3. 根据下面类中MaxMin 函数成员的原型和注释写出它的类外定义。
#include
#include
class AA {
int* a;
int n;
int MS;
public:
void InitAA(int aa[], int nn, int ms) {
if(nn>ms) {cout<<"Error!"<
n=nn;
a=new int[MS];
for(int i=0; i
int MaxMin(int& x, int& y); //从数组a的前n个元素中求出
//最大值和最小值,并分别由引用参数x和y带回,
//同时若n大于0则返回1,否则返回0。
};
类外定义如下:
int AA::MaxMin(int& x, int& y)
{
int mx,my;
mx=my=a[0];
for(int i=1; i
if(a[i]
x=mx; y=my;
if(n>0) return 1; else return 0;
}
下一篇:暂无