C++ 课程作业 客观题整理(错题)

C的编程知识温习
1.下列while 循环的次数是(D)【正确答案: A】。
while ( int i=0 )
i–;
A 0
B 1
C 5
D 无限

解析:因为i=0所以判定为false。我一开始以为int i=0就是一个语句这个语句执行的结果是true,但是当我试着自己写了下代码发现只要int i=x; 这个x不是0就都是true

2.类型修饰符unsigned 修饰(A)【正确答案: D】类型是错误的。
A char
B int
C long int
D float

解析:unsigned只能修饰整型

3.已知:int a,*pa=&a;输出指针pa十进制的地址值的方法是(A)【正确答案: D】.
A cout< B cout<<*pa;
C cout<<&pa;
D cout<
解析:pa里面存的是地址,但他自己也是一个变量,也占空间,有自己的地址,&pa就是他的地址,因为要十进制,所以c不行c的话会输出16进制

4.下列表达式中,( C )【正确答案: D】是非法的。已知:int a=5;float b=5.5;
A a%3+b
B b*b&&++a
C (a>b)+(int(b)%2)
D —— —— ——a+b(为了正确显示,方便读题特意写成“—— —— ——”)

解析:D选项“—— —— ——”会有歧义

5.下列表达式中,A【正确答案: D】是合法的。已知:double m=3.2;int n=3;
A m<<2
B (m+n)|n
C !m*=n
D m=5,n=3.1,m+n

解析:A:位移只能操作整数,B:位或运算符也只能操作整数,C :*=赋值运算符左边要是变量

类与对象—构造函数、拷贝构造函数和析构函数

在下面的类定义中,错误的语句是( )
class sample
{
public:
sample( int val); //①
~sample(); //②
private:
int a=2. 5; //③
sample(); //④
};
D【正确答案: C】
A ①②③④
B ②
C ③④
D ①②③

解析:构造函数可以是私有的,c++中不允许成员变量在声明的时候初始化

数据的共享与保护

1.有以下程序:
#include
using namespace std;
class A
{
public:
static int a;
void init() {a=1;}
A(int a=2)
{
init ();
a++;
}
};
int A::a=0;
A obj;
int main()
{
cout< return 0;
}
运行时输出的结果是( B)【正确答案: B】
A 0
B 1
C 2
D 3

解析:构造函数A(int a=2)中的a是另外一个参数,a只是一个形参名与本类中的静态成员a不是同一个,因此创建A的对象时调用构造函数对成员a起作用的只有init()函数。

2.下面对静态数据成员的描述中,正确的是
D【正确答案: D】
A 静态数据成员可以在类体内进行初始化
B 静态数据成员不可以被类的对象调用
C 静态数据成员不受private控制符的作用
D 静态数据成员可以直接用类名访问

解析:A:静态成员只能在类外初始化,然后对静态数据成员进行操作时,静态数据成员的变化是累加的,即其他对静态数据成员的操作都会保留。C:私有静态数据成员是不可以被直接调用的,但是私有变量在类内可以直接访问

3.由于常对象不能被更更新,因此(A)【正确答案: A】
A 通过常对象只能调用它的常成员函数
B 通过常对象只能调用静态成员函数
C 常对象的成员都是常成员
D 通过常对象可以调用任何不改变对象值的成员函数
(单纯Mark一下,加深印象)

4.有以下类定义:
class Test{
public:
Test(){a=0;c=0;}//①
int f(int a)const{this->a=a;}//②
static int g(){return a;}//③
void h(int b){Test::b=b;}//④
private:
int a;
static int b;
const int c;
};
int Test::b=0;
在标注号码的行中,能被正确编译的是(D)【正确答案: D】
A ①
B ②
C ③
D ④

解析:① c 为常成员数据,不能把c=0 写到构造函数体内,必须通过初始化列表获取初值,即Test()c(0){a=0;}
② 常成员函数修饰的是this 指针所指向的内存空间,a不可以改变
③静态成员函数只能调用静态成员变量

5.下列对友元关系的叙述正确的是A【正确答案: D】
A 不能继承
B 是类与类的关系
C 一个类的成员函数与另一个类的关系
D 提高程序的运行效率

解析:A 不能绝对地说,友元不能继承。因为在继承过程中,友元对基类的成员是可以访问的,对派生类的成员不能访问。所以这个说法太绝对。

6.有一个int 型变量,在程序中使用频度很高,最好定义它为D【正确答案: A】。
A register
B auto
C extern
D static
解析:一般情况下,变量的值是存储在内存中的,CPU 每次使用数据都要从内存中读取。如果有一些变量使用非常频繁,从内存中读取就会消耗很多时间,例如 for 循环中的增量控制。为了解决这个问题,可以将使用频繁的变量放在CPU的通用寄存器中,这样使用该变量时就不必访问内存,直接从寄存器中读取,大大提高程序的运行效率。

数组指针与字符串

1.执行下列程序:
char a[200];
cin. getline(a, 200,’ ‘);cout< 若输人abed 1234↙ ,则输出(D)【正确答案: A】
A abed
B abed 1234
C 1234
D 输出乱码或出错

解析:cin. getline(a, 200,’ ');表示读入一行,上限200个,遇到空格就停止读取,存到数组a中。

2.定义charp="abcd"能输出p的值(“abcd”. 地址)的是(B)【正确答案: D】
A cout<<&p;
B cout< C cout<<(char
)p;
D cout<§;

解析:cout<

3.下列说明中,const char ptr;ptr应该是B【正确答案: C】.
A 指向字符常量的指针
B 指向字符的常量指针
C 指向字符串常量的指针
D 指向字符串的常量指针

解析:常量指针就是指向常量的指针,上面那个题的p就是常量指针,指向常量"abcd"。D想表达的是指向字符串的指针常量,const char是常量指针和指针常量char* const区分。*ptr这个指针本身不是常量,虽然他是指向常量的,但是本身的指向可以改变(p的内容可以改变),他本身不是常量。本题出的有点歧义

4.定义“int a;int *pa=&a;”,在下列输出式中,结果不是pa的值(a的地址)的是(A)【正确答案: B】
A cout< B cout<<(char *)pa;
C cout<<(void *)pa;
D cout<<(int )pa;

解析:B char将导致cout将其看作字符串,以字符串的方式输出

5.下列定义中,B【正确答案: B】是定义指向数组的指针p.
A int *p[5]
B int (*p)[5]
C (int *)p[5]
D int *p[]

解析:除了C其余选项都是指针数组

6.已知一个类A,(C)【正确答案: C】是指向类A成员函数的指针.假如类有三个公有成员:void f1(int),void f2(int)和int a.
A A *p
B int A::*pc=&A::a
C void A::*pa()
D A *pp
(单纯Mark)

7.下列关于对象数组的描述中,C【正确答案: D】是错误的.
A 对象数组的下标是从0开始的
B 对象数组的数组名是一个常量指针
C 对象数组的每个元素是同一个类的对象
D 对象数组只能赋初值,而不能再赋值

解析:肯定是可以再赋值的,只不过在赋值的时候一定要为对象的数据成员分别赋值

多态性
1.关于动态联编的下列描述中,B【正确答案: D】是错误的.
A 动态联编是以虚函数为基础的
B 动态联编是在运行时确定所调用的函数代码的
C 动态联编调用函数操作是用指向对象的指针或是对象的引用
D 动态联编是在编译时确定操作函数的
解析:动态联编一直到程序运行时才能确定调用哪个函数。没有虚函数不能够实现动态联编,调用虚函数操作的是指向对象的指针或者对象的引用。

2.class Animal {
public:
virtual void Name()=0;
};
class Koala : public Animal {
public:
void Name(){/函数体略/}
};
关于上述类定义,下列描述中错误的是B【正确答案: D】
A. 类Koala是类Animal的派生类
B.类Koala中的Name函数是一个虚函数
C. 类Animal中的Name函数是一个纯虚函数
D.语句“Animal a;”能够建立类Animal的一个对象a

解析:Animal中只有一个纯虚函数,是抽象类,抽象类不能生成对象

你可能感兴趣的:(C++ 课程作业 客观题整理(错题))