⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c++测试4-5.txt

📁 C++例子 此例子是课后练习
💻 TXT
字号:
一. 单选题 (共29题,共93分)  
1. 在C++程序中,访问内存的方法包括:( ) (3分) 
 A.寻址访问、调用访问  
 B.以上都不包括  
 C.引用访问、传址访问  
 D.直接访问、间接访问  

2. a[3][4]是一个int型二维数组,下列关于数组名a的说法中,不正确的为:( ) (3分) 
 A.数组名a是一个指针,它表示数组的起始地址  
 B.数组名a是一个二级指针,它指向一个一维数组  
 C.数组名a指向a[0][0]  
 D.数组名a指向a[0]  

3. 已知:类A是一个组合类,它包含有类B的对象作为成员对象,下面给出这两个类的定义:
class B
{
   public:
       B(int,int);
   private:
       int x;
       int y;
};
B::B(int a,int b)
{
   x=a;
   y=b;
}
class A
{
   public:
       A(int,int,float);
   private:
       B obj;
       float r;
};
那么A的构造函数的定义为:( ) (4分) 
 A. A::A(int a,int b,float c)
{
   obj.x=a;
   obj.y=b;
   r=c;
}  
 B. A::A(int a,int b,float c): obj(a,b)
{
   r=c;
}  
 C. A::A(int a,int b,float c)
{
   x=a;
   y=b;
   r=c;
}  
 D. A::A(int a,int b,float c): B(a,b)
{
   r=c;
}  

4. 长方形rectangle类的定义如下:
class rectangle
{
   public:
    rectangle(float w=1,float h=1);
   private:
    float width;
    float height;
}; 
现在定义该类的一个对象r,下面定义语句不正确的为:( ) (3分) 
 A.rectangle r;  
 B.rectangle r();  
 C.rectangle r(2);  
 D.rectangle r(2,2);  

5. 下面定义语句的描述中,不正确的是:( ) (3分) 
 A.int a[4][4]; —— a为int型的一级指针  
 B.float (*p)[4]; —— p为指向一维数组的指针  
 C.int **p; —— p为int型的二级指针  
 D.float *p[4]; —— p为长度为4的指针数组  

6. 分析下面关于构造函数和析构函数的陈述,判断正确的为:( )
陈述1:构造函数是用来完成对象的初始化工作,它会在定义对象时被自动调用
陈述2:析构函数是用来完成对象消亡前的清理工作,它会在对象消亡前被自动调用 (3分) 
 A.陈述1不正确,陈述2正确  
 B.两个陈述都正确  
 C.两个陈述都不正确  
 D.陈述1正确,陈述2不正确  

7. 分析下面关于析构函数的陈述,判断正确的为:( )
陈述1:析构函数不能被重载,一个类只能有一个析构函数
陈述2:析构函数名与类名相同,它的访问属性为private (3分) 
 A.两个陈述都正确  
 B.陈述1正确,陈述2不正确  
 C.两个陈述都不正确  
 D.陈述1不正确,陈述2正确  

8. 分析下面程序:
#include <iostream.h>
class point
{
   public:
    point(float,float);
   private:
    float x=0.0;
    float y;
};
point::point(float a,float b)
{
   x=a;
   y=b;
   cout<<"x="<<x<<"的构造函数被调用"<<endl;
}
int main()
{
   point p(2.3,4.5);
   return 0;
}
判断结果正确的是:( ) (3分) 
 A.编译失败,由于属性x不能在定义的同时被初始化  
 B.编译成功,执行没有输出  
 C.编译成功,执行输出:x=2.3的构造函数被调用  
 D.编译成功,执行输出:x=0.0的构造函数被调用  

9. 下面给出四个字符串定义语句,其中会导致编译错误的为:( ) (3分) 
 A.char str[6]="hello";  
 B.char str[6]="123456";  
 C.char *p="abc123";  
 D.string str("ABC");  
 
10. 已知:int a[10] , *p=a,以下等价关系不正确的为:( ) (3分) 
 A.a[i]==(*a)+i  
 B.a[i]==*(p+i)  
 C.a[i]==*(a+i)  
 D.a==&a[0]  
 
11. d[5]是一个double型的一维数组,已知数组的起始地址为0x11AA2304,那么第3个元素的地址为:( ) (4分) 
 A.0x11AA2306  
 B.0x11AA2314  
 C.0x11AA2307  
 D.0x11AA2320  
 
12. 下面定义二维数组的语句,哪个不正确?( ) (3分) 
 A.int a[2][3] = {1,2,3,4,5,6};  
 B.int a[2][3] = {{1},{3}};  
 C.int a[2][3] = {{1,2,3},{4,5,6}};  
 D.int a[][] = {{1,2,3,4,5,6},{1,2,3,4,5,6},{1,2,3,4,5,6}};  
 
13. 下列关于类成员访问属性的说法中,正确的是:( ) (3分) 
 A.默认访问属性为:friendly  
 B.默认访问属性为:public  
 C.默认访问属性为:protected  
 D.默认访问属性为:private  

14. 下面四组选项中,哪一项不完全属于面向对象的要素:( ) (3分) 
 A.对象、类、消息  
 B.对象、消息、多态  
 C.结构体、对象、数组  
 D.类、消息、继承  

15. 分析以下程序:
   #include<iostream.h>
   #include<string.h>
   int main()
   {
       char str1[20]="ADF";
       char str2[20]="aff&&";
       cout<<"strcat(str1,str2)="<<strcat(str1,str2)<<endl;
       cout<<"strcpy(str1,str2)="<<strcpy(str1,str2)<<endl;    
       return 0;
   }
   其运行结果为:( ) (3分) 
 A.strcat(str1,str2)=ADF
strcpy(str1,str2)=aff&&ADF  
 B.strcat(str1,str2)=aff&&
strcpy(str1,str2)=ADFaff&&  
 C.strcat(str1,str2)=ADFaff&&
strcpy(str1,str2)=aff&&  
 D.strcat(str1,str2)=aff&&ADF
strcpy(str1,str2)=ADF  

16. 以下程序应用了函数的三种调用方式,
   #include <iostream.h>    
   int main()
   {
       void change(int a,int &b,int *c);
       int a=3,b=4,c=5;
       change(a,b,&c);
       cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;        
       return 0;
   }
   void change(int a,int &b,int *c)
   {
       a++;
       b++;
       (*c)++;
   }
   其运行结果为:( ) (4分) 
 A.a=4,b=5,c=6  
 B.a=3,b=5,c=6  
 C.a=3,b=5,c=5  
 D.a=4,b=5,c=5  

17. a[8]是一个int型的一维数组,以下关于它的说法中,不正确的是:( ) (3分) 
 A.数组的长度为8,表示它可以存储8个int型变量  
 B.数组a所占的内存空间为32个字节  
 C.数组名a表示第一个元素a[1]的地址  
 D.数组名a表示数组在内存的起始地址  

18. a[5][5]是一个int型二维数组,对元素a[2][3]的访问方法不包括:( ) (4分) 
 A.*&(a[2][3])  
 B.**(a+2+3)  
 C.*(*(a+2)+3)  
 D.*(a[2]+3)  
 
19. 下面给出两个关于一维数组赋初值的陈述:
   陈述1:如果对数组的全体元素赋初值,则可以省略数组长度
   陈述2:如果只对数组的部分元素赋初值,则也可以省略数组长度
   以下选项中判断正确的为:( ) (3分) 
 A.两个陈述都不正确  
 B.陈述1正确,陈述2不正确  
 C.陈述1不正确,陈述2正确  
 D.两个陈述都正确  

20. 判断以下关于成员函数的两个陈述,判断正确的是:( )
陈述1:成员函数只可以在类内部定义,否则会产生编译错误
陈述2:如果成员函数在类内部定义,编译时自动会成为内联函数 (3分) 
 A.陈述1不正确,陈述2正确  
 B.陈述1正确,陈述2不正确  
 C.两个陈述都不正确  
 D.两个陈述都正确  

21. 下列关于计算机内存的说法中,不正确的为:( ) (3分) 
 A.内存是以字节为单位来存储数据的  
 B.计算机给每个字节的内存空间分配一个编号,也就是所谓的内存地址  
 C.内存地址是连续的十六进制整数  
 D.一个内存空间可以有多个地址  

22. 下面关于成员函数的说法中,正确的是:( ) (3分) 
 A.成员函数不允许重载  
 B.成员函数的访问属性只能是public  
 C.成员函数不允许有默认形参值  
 D.成员函数既可以定义在类内部,又可以定义在类外部  

23. 分析以下程序:
   #include<iostream.h>
   #include<string.h>
   int main()
   {
       char str1[20]="ADF";
       char str2[20]="aff&&";
       cout<<"strlen(str1)="<<strlen(str1)<<endl;
       cout<<"strcmp(str1,str2)="<<strcmp(str1,str2)<<endl;        
       return 0;
   }
   其运行结果为:( ) (3分) 
 A.strlen(str1)=4
strcmp(str1,str2)=-1  
 B.strlen(str1)=3
strcmp(str1,str2)=1  
 C.strlen(str1)=4
strcmp(str1,str2)=1  
 D.strlen(str1)=3
strcmp(str1,str2)=-1  

24. 点point类的定义语句如下:
   class point
   {
       public:
           point(float a=0,float b=0);
       private:
           float x;
           float y;
   }
   下面选项中定义point对象数组的语句,错误的为:( ) (3分) 
 A.point p[3];  
 B.point p[3]={1,2,3};  
 C.point p[3]={point(1,2),3,point(2,4)};  
 D.point p[3]={point(1,2), ,point(2,4)};  

25. 已知p是一个double型的指针变量,则sizeof(p)的值为:( ) (3分) 
 A.4  
 B.1  
 C.8  
 D.以上都不正确  

26. 分析以下程序:
   #include <iostream.h>
   int main()
   {
       int add(int a[5]);
       int b[5]={1,2,3,4,5};
       cout<<add(b)<<endl;
       return 0;
   }
   int add(int a[5])
   {
       int s=0;
       int i;
       for(i=0;i<5;i++)
       {
           s=s+a[i];
       }
       return s;
   }
   其运行结果为:( ) (4分) 
 A.运行输出:15  
 B.运行输出:10  
 C.数组越界,导致编译失败  
 D.运行没有输出  

27. a[3][4]是一个int型二维数组,已知a[0][0]的地址为0x11220000,则a[1][2]的地址为:( ) (4分) 
 A.0x11220024  
 B.0x11220018  
 C.0x11220006  
 D.0x11220012  

28. 分析下面两个陈述,判断正确的是:( )
陈述1:面向对象程序设计比面向过程程序设计的可重用性好
陈述2:面向对象程序设计比面向过程程序设计的可扩充性好 (3分) 
 A.两个陈述都不正确  
 B.陈述1正确,陈述2不正确  
 C.陈述1不正确,陈述2正确  
 D.两个陈述都正确  

29. 下列关于构造函数的陈述中,不正确的为:( ) (3分) 
 A.构造函数不能被重载,一个类只能有一个构造函数  
 B.构造函数是用来完成对象的初始化工作  
 C.构造函数无返回值,也不能把void写在构造函数名前面  
 D.构造函数名与类名相同  

 
 
 
 二. 判断题 (共6题,共7分)  
1. 在C++语言中,new运算符是用于动态内存分配的 (1分) 

2. 定义组合类的对象时,成员对象的构造函数比组合类的构造函数先调用 (1分) 

3. 在C++语言中,同一个数组内的元素可以是不同类型的数据 (1分) 

4. 面向对象程序设计方法,使得数据和操作数据的方法结合在一个类里面,因此能减少需要传递的参数,从而简化函数调用。 (2分) 

5. 编译预处理是指系统在程序执行前对程序所做的一些工作 (1分) 

6. 成员函数既可以在类内部声明,又可以在类外部声明 (1分) 

 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -