网站做推广要备案吗,多语种网站建设公司,文字网站居中,购物网站开发英文文献目录
一、选择题
二、编程题
三、选择题题解
四、编程题题解 一、选择题
1、某函数申明如下#xff08;#xff09;
void Func(int nVal1); A. Func(a) B. Func(a) C. Func(*a) D. Func((*a)) 2、C语言中#xff0c;类ClassA的构造函数和析构函数的执行…目录
一、选择题
二、编程题
三、选择题题解
四、编程题题解 一、选择题
1、某函数申明如下
void Func(int nVal1); A. Func(a) B. Func(a) C. Func(*a) D. Func((*a)) 2、C语言中类ClassA的构造函数和析构函数的执行次数分别为
ClassA *pclassanew ClassA[5];
delete pclassa; A. 5,1 B. 1,1 C. 5,5 D. 1,5 3、动态内存分配C语言中mallocC中的new得到的存储区属于内存中的 A. 静态区 B. 堆heap C. 栈stack D. 堆栈 E. 内核内存 F. 不确定 4、下列静态数据成员的特性中错误的是 A. 引用静态数据成员时要在静态数据成员名前加和作用域符号 B. 说明静态数据成员时前边要加关键字static来修饰 C. 静态数据成员在类体外进行初始化 D. 静态数据成员不是所有对象所共有的 5、用class关键字定义的类其成员默认的访问属性为 A. private B. protected C. public D. 无定义 6、在重载一个运算符为成员函数时其参数表中没有任何参数这说明该运算符是 。 A. 无操作数的运算符 B. 二元运算符 C. 前缀一元运算符 D. 后缀一元运算符 7、有如下程序运行时的输出结果是
#includeiostream
using namespace std;
class MyClass
{public:MyClass(int i0){cout1;}MyClass(const MyClassx){cout2;}MyClass operator(const MyClassx){cout3; return*this;}~MyClass(){cout4;}
};
int main()
{MyClass obj1(1),obj2(2),obj3(obj1);return 0;
}A. 121,444 B. 112,444 C. 11,114,444 D. 11,314,445 E. 11,314,444 8、下面有关c静态数据成员说法正确的是 A. 不能在类内初始化 B. 不能被类的对象调用 C. 不能受private修饰符的作用 D. 可以直接用类名调用 9、在C中为了让某个类只能通过new来创建即如果直接创建对象编译器将报错应该 A. 将构造函数设为私有 B. 将析构函数设为私有 C. 将构造函数和析构函数均设为私有 D. 没有办法能做到 10、下列的模板声明中其中几个是正确的
1)template
2)templateT1,T2
3)templateclass T1,T2
4)templateclass T1,class T2
5)templatetypename T1,T2
6)templatetypename T1,typename T2
7)templateclass T1,typename T2
8)typename T1,class T2 A. 2 B. 3 C. 4 D. 5 二、编程题
1、另类加法 题目链接 2、走方格的方案数 题目链接 三、选择题题解
1、某函数声明如下
void Func(int nVal1); A. Func(a) B. Func(a) C. Func(*a) D. Func((*a)) 正确答案A 题解 我们观察函数是引用因此我们传参时以一种类似 “传值” 的方式传参即可底层是传指针我们前面早已介绍过
2、C语言中类ClassA的构造函数和析构函数的执行次数分别为
ClassA *pclassanew ClassA[5];
delete pclassa; A. 5,1 B. 1,1 C. 5,5 D. 1,5 正确答案A 题解 注意题目new一个对象时用了 [ ] 因此首先会创建5个classA对象的空间然后再调用5次构造函数而delete时由于没有方括号因此只会调用一次析构函数然后再所释放其空间因此只调用一次析构
3、动态内存分配C语言中mallocC中的new得到的存储区属于内存中的 A. 静态区 B. 堆heap C. 栈stack D. 堆栈 E. 内核内存 F. 不确定 正确答案B 题解 动态内存分配申请的空间来自于堆概念题
4、下列静态数据成员的特性中错误的是 A. 引用静态数据成员时要在静态数据成员名前加和作用域符号 B. 说明静态数据成员时前边要加关键字static来修饰 C. 静态数据成员在类体外进行初始化 D. 静态数据成员不是所有对象所共有的 正确答案D 题解 静态成员变量属于这个类的所有对象并不属于某个具体的对象选D错误
5、用class关键字定义的类其成员默认的访问属性为 A. private B. protected C. public D. 无定义 正确答案A 题解 class的成员默认访问权限为private默认继承权限也为privatestruct的成员默认访问权限为public默认继承权限也为public
6、在重载一个运算符为成员函数时其参数表中没有任何参数这说明该运算符是 。 A. 无操作数的运算符 B. 二元运算符 C. 前缀一元运算符 D. 后缀一元运算符 正确答案C 题解 当重载运算符为成员函数时若其中没有任何参数由于其是类的成员函数故会传this指针故应该为前缀一元运算符若给参数int则为后缀一元操作符
7、有如下程序运行时的输出结果是
#includeiostream
using namespace std;
class MyClass
{public:MyClass(int i0){cout1;}MyClass(const MyClassx){cout2;}MyClass operator(const MyClassx){cout3; return*this;}~MyClass(){cout4;}
};
int main()
{MyClass obj1(1),obj2(2),obj3(obj1);return 0;
}A. 121,444 B. 112,444 C. 11,114,444 D. 11,314,445 E. 11,314,444 正确答案B 题解 分别创建3个对象对象1和对象2使用的是构造函数对象3是用拷贝构造进行初始化因此会打印112接着析构三个对象打印444
8、下面有关c静态数据成员说法正确的是 A. 不能在类内初始化 B. 不能被类的对象调用 C. 不能受private修饰符的作用 D. 可以直接用类名调用 正确答案D 题解 A选项对于普通静态数据成员确实只能再类内声明再类外进行定义而const 修饰的静态整型家族数据成员可以在类内定义这是一种特殊语法B选项可以被类的对象调用C选项可以被private修饰D选项正确
9、在C中为了让某个类只能通过new来创建即如果直接创建对象编译器将报错应该 A. 将构造函数设为私有 B. 将析构函数设为私有 C. 将构造函数和析构函数均设为私有 D. 没有办法能做到 正确答案B 题解 假设我们将构造函数私有由于构造函数私有确实不能直接创建对象了但是我们也不能通过new构造对象了因此new主要分为两步1、申请空间2、调用构造进行初始化因此A错误B选项当我们将析构函数私有后由于只能在类内调用析构而我们一般创建的对象在出作用域时调用析构由于无法调用析构因此编译器也不允许我们直接构造对象但由于构造并没有被封我们可以通过new构造对象然后如果我们需要析构这个对象我们需要实现一个公有的方法在这个公有的方法里调用析构然后我们通过这个公有的方法进行析构故B正确
10、下列的模板声明中其中几个是正确的
1)template
2)templateT1,T2
3)templateclass T1,T2
4)templateclass T1,class T2
5)templatetypename T1,T2
6)templatetypename T1,typename T2
7)templateclass T1,typename T2
8)typename T1,class T2 A. 2 B. 3 C. 4 D. 5 正确答案B 题解 根据语法每个类型参数前都必须由class或者typename可以混用故467都正确选B
四、编程题题解
1、另类加法 题解我们利用异或的不进位加法特性进行解题具体如下 我们得到了非进位的加法后的结果那我们如何得到加法的进位呢首先我们要清楚二进制的进位是两个二进制位都为1相加后往后一位进1你是否联想到了什么我们是否可以通过两个数相与之后在使用左移运算符向左移动一位这不就得到了我们的进位吗 即 进位的数 A B 1 我们将进位的值与不进位相加的值进行相加不就是结果的值吗用或运算符但是这个结果也是不准确的因为我们要考虑连续进位的情况因此有了以下代码 class UnusualAdd
{
public:int addAB(int A, int B) {// 可能会出现连续进位的情况while(B){int tmp (A B) 1; // 进位的值A ^ B; // 不进位相加后的值B tmp;}return A;}
};
2、走方格的方案数 题解本题主要使用动态规划的思路进行解题具体如下 有了以上的思路具体我们还是来看代码是如何实现的如下所示 #include iostream
#include vector
using namespace std;int main()
{int n, m;cin n m;// 注意这里多开一个空间因为题目给的是网格数vectorvectorint dp(n 1, vectorint(m 1, 0));// 注意这里也必须都是小于等于for(int i 0; i n; i){for(int j 0; j m; j){if(i 0 || j 0){dp[i][j] 1;}else {dp[i][j] dp[i - 1][j] dp[i][j - 1];}}}cout dp[n][m] endl;return 0;
}