【C++笔试强训】第九天 约定不等于承诺〃 2024-04-20 06:11 75阅读 0赞 > **?C++笔试强训** > > -------------------- > > * **博客主页:**[一起去看日落吗][Link 1] > * **分享博主的C++刷题日常,大家一起学习** > * **`博主的能力有限,出现错误希望大家不吝赐教`** > * **分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光** ?。 > > -------------------- > > ![在这里插入图片描述][047d8ad26e314dc7bc7aa19a6ce9ccb0.jpeg_pic_center] ? ? -------------------- ## 选择题 ## ### ?第一题 ### 某函数申明如下() void Func(int &nVal1); 有int a,下面使用正确的为: A Func(a) B Func(&a) C Func(\*a) D Func(&(\*a)) 因为是int类型的,所以直接排除CD,所以直接传递int类型的变量就可以了,所以选A > **`这道题的答案是A`** -------------------- ### ?第二题 ### ClassA *pclassa=new ClassA[5]; delete pclassa; C++语言中,类ClassA的构造函数和析构函数的执行次数分别为() A 5,1 B 1,1 C 5,5 D 1,5 这道题考察了new和delete ![请添加图片描述][c97dedb4f5d14b36903ce4410f427c74.png] 这里要开辟5个数据,所以要构造五次,这里的delete pclassa,所以只会调用一次 但是这道题delete不匹配,有可能会崩溃 > **`这道题的答案是A`** -------------------- ### ?第三题 ### 动态内存分配(C语言中malloc,C++中的new)得到的存储区属于内存中的: A 静态区 B 堆(heap) C 栈(stack) D 堆栈 E 内核内存 F 不确定 这道题一眼看过去就是堆,malloc的空间是自己的,肯定是在堆上,new是可以重载的,有可能不在堆上,默认情况是在堆上 > **`这道题的答案是B`** -------------------- ### ?第四题 ### 下列静态数据成员的特性中,错误的是() A 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域符号 B 说明静态数据成员时前边要加关键字static来修饰 C 静态数据成员在类体外进行初始化 D 静态数据成员不是所有对象所共有的 静态成员变量:所有对象共享的,并不属于具体的某个对象——在类中声明,然后需要在类外单独进行定义,一定不能在构造函数初始化列表的位置初始化——在类外访问静态成员变量时:对象.静态成员变量 || 类名::静态成员变量 A 选项 —— 类名::静态成员变量 B 选项 没加static是普通成员变量,加了就是静态成员变量 C 选项 只能在类外初始化,在程序运行的时候就构造好了 D 选项 静态成员变量最大的特性是所有对象共享的 > **`这道题的答案是D`** -------------------- ### ?第五题 ### 用class关键字定义的类,其成员默认的访问属性为() A private B protected C public D 无定义 class类默认的访问属性是私有的 —— private > **`这道题的答案是A`** -------------------- ### ?第六题 ### 在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是 ( )。 A 无操作数的运算符 B 二元运算符 C 前缀一元运算符 D 后缀一元运算符 一元运算符:该元素只需要一个参数 例如 :-- ++ 每个非静态的成员函数都有一个隐藏的this指针,因为参数表中没有任何参数,所以AB直接排除 ![请添加图片描述][2cd2e1b9f3154e9a81ea7ced0b5e0c46.png] 第一个是前置++,第二个是后置++ > **`这道题的答案是C`** -------------------- ### ?第七题 ### 有如下程序: #include<iostream> using namespace std; class MyClass{ public: MyClass(int i=0){ cout<<1;} MyClass(const MyClass&x){ cout<<2;} MyClass& operator=(const MyClass&x){ cout<<3; return*this;} ~MyClass(){ cout<<4;} }; 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 obj(1)和obj(2)是直接调用构造函数,obg(obj(1))直接调用拷贝构造,所以这里会打印112,然后就是return 0,然后就会调用析构函数,先创建的后释放,然后会打印444 > **`这道题的答案是B`** -------------------- ### ?第八题 ### 下面有关c++静态数据成员,说法正确的是() A 不能在类内初始化 B 不能被类的对象调用 C 不能受private修饰符的作用 D 可以直接用类名调用 这道题又是考察静态的数据成员 静态成员变量:所有对象共享的,并不属于具体的某个对象——在类中声明,然后需要在类外单独进行定义,一定不能在构造函数初始化列表的位置初始化——在类外访问静态成员变量时:对象.静态成员变量 || 类名::静态成员变量 A const类型可以在类内初始化 B 打点和类名加作用域访问 C 可以受private修饰 > **`这道题的答案是D`** -------------------- ### ?第九题 ### 在C++中,为了让某个类只能通过new来创建(即如果直接创建对象,编译器将报错),应该() A 将构造函数设为私有 B 将析构函数设为私有 C 将构造函数和析构函数均设为私有 D 没有办法能做到 ![请添加图片描述][5491c125c7994344bad2b96aa05a506a.png] 如果将构造函数设置为私有的无法实现第二步,所以不行,但是可以将析构函数设置为私有的,如果想要调用析构怎么办呢? ![请添加图片描述][214a516737124a9295e1fe17454bf8a8.png] > **`这道题的答案是B`** -------------------- ### ?第十题 ### 下列的模板声明中,其中几个是正确的() 1)template 2)template<T1,T2> 3)template<class T1,T2> 4)template<class T1,class T2> 5)template<typename T1,T2> 6)template<typename T1,typename T2> 7)template<class T1,typename T2> 8)<typename T1,class T2> A 2 B 3 C 4 D 5 这道题是对模版进行考察的 ![请添加图片描述][9ffb2241a66c46b3a5166a9fa4ff0398.png] 从图可以得知 1,2,3,5,8是错误的 4,6,7是正确的 > **`这道题的答案是B`** -------------------- ## 编程题 ## ### ?第一题 ### 链接:[另类加法][Link 2] ![在这里插入图片描述][8611095b1ede427a9178d1b6f213788f.png_pic_center] * 题目解析 本题的意思是自己实现加法,不适用现成的运算符,考察大家对于运算符的灵活运用 * 解题思路: 本题可以通过位运算实现,具体实现如下: 两个数求和,其实就是 求和后当前位的数据+两个数求和的进位 **例如:** 1 + 2; 00000001 + 00000010 求和后当前位的数据: 00000011 ; 求和后的进位数据: 没有进位,则 00000000 两者相加,则得到: 00000011 就是3 2 + 2; 00000010 + 00000010 求和后当前位的数据: 00000000, 1和1进位后当前为变成0了 求和后进位的数据: 00000100, 两个1求和后进位了 相加后得到: 00000100 就是4 求和后当前位的数据:简便的计算方法就是两个数进行异或 00000001 ^ 00000010 -> 00000011 求和后进位的数据:简便的计算方法就是两个数相与后左移一位 (00000010 & 00000010) << 1 所以这道题使用递归更加容易理解 * 代码演示 class UnusualAdd { public: int addAB(int A, int B) { // write code here if(A == 0) return B; if(B == 0) return A; int sum = A ^ B;//不考虑进位时候相加的结构 int ret = (A&B) << 1;//计算进位的数据 return addAB(sum, ret); } }; -------------------- ### ?第二题 ### 链接:[走方格的方案数][Link 3] ![在这里插入图片描述][3e06bf6682f848b98a6112e4105e516d.png_pic_center] * 题目解析 本题为求取路径总数的题目,一般可以通过递归求解,对于复杂的问题,可以通过动态规划求解。此题比较简单,可以通过递归解答。 * 解题思路 ### | 1 | 2 | 3 | ### ### | 4 | 5 | 6 | ### ### | 7 | 8 | 9 | ### 1. 对于上面的n*m(3*3)的格子,有两种情况 a. 如果n或者m为1,则只有一行或者一列,从左上角走到右下角的路径数为n + m 比如: 1 \* 1格子,可以先向下走,再向右走,到达右下角;或者先向右走, 再向下走,到达右下角,共两条,即 1 + 1 = 2,对于1 \* m和 n \* m的 情况同学们自己画一下 b. 如果n,m都大于1,那么走到\[n\]\[m\]格子的右下角只有两条路径, <1>: 从\[n - 1\]\[m\]格子的右下角向下走,到达 <2>: 从\[n\]\[m - 1\]格子的右下角向右走,到达 所以走到\[n\]\[m\]格子的右下角的数量为\[n-1\]\[m\] + \[n\]\[m - 1\],可以通过递归实现,情况a为递归的终止条件。 * 代码演示: #include <iostream> using namespace std; int pathnum(int n,int m) { if(n == 0 || m == 0) return 1; return pathnum(n-1,m) + pathnum(n, m-1); } int main() { int n,m; while(cin >> n >> m) cout << pathnum(n, m) << endl; return 0; } -------------------- [Link 1]: https://blog.csdn.net/m0_60338933?type=blog [047d8ad26e314dc7bc7aa19a6ce9ccb0.jpeg_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/eb6b6194faa141df86a3edc72b75d0d1.jpeg [c97dedb4f5d14b36903ce4410f427c74.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/b5805d7bb4144a689efba83d8ad761e2.png [2cd2e1b9f3154e9a81ea7ced0b5e0c46.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/5008f84559fa48639865debbb560efae.png [5491c125c7994344bad2b96aa05a506a.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/e127dfd305fc4684baeff4821a3ab2dd.png [214a516737124a9295e1fe17454bf8a8.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/f6893b1bf5ec4efb9fdd4efcdc2b4192.png [9ffb2241a66c46b3a5166a9fa4ff0398.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/f1e2adc5bad44810bf644eeaa4eca4c4.png [Link 2]: https://www.nowcoder.com/practice/e7e0d226f1e84ba7ab8b28efc6e1aebc?tpId=8&&tqId=11065&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking [8611095b1ede427a9178d1b6f213788f.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/c8864fdd1c0e4503b47c5f78241be5f0.png [Link 3]: https://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b?tpId=37&&tqId=21314&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking [3e06bf6682f848b98a6112e4105e516d.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/af36d25b091d49f0b3ec8809c2f29697.png
还没有评论,来说两句吧...