【C++笔试强训】第十二天 ゝ一世哀愁。 2024-04-20 06:13 46阅读 0赞 > **?C++笔试强训** > > -------------------- > > * **博客主页:**[一起去看日落吗][Link 1] > * **分享博主的C++刷题日常,大家一起学习** > * **`博主的能力有限,出现错误希望大家不吝赐教`** > * **分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光** ?。 > > -------------------- > > ![在这里插入图片描述][047d8ad26e314dc7bc7aa19a6ce9ccb0.jpeg_pic_center] ? ? -------------------- ## 选择题 ## ### ?第一题 ### 引用和指针,下面说法不正确的是() A 引用和指针在声明后都有自己的内存空间 B 引用必须在声明时初始化,而指针不用 C 引用声明后,引用的对象不可改变,对象的值可以改变,非const指针可以随时改变指向的对象以及 对象的值 D 空值NULL不能引用,而指针可以指向NULL 指针是C语言的概念,引用是C++新增的概念 ![请添加图片描述][3e3e1218f2d04a9aaf2c5bd24f311b95.png] A 引用不会开辟新空间,错误 B 引用是别名,所以必须要知道是谁的别名,所以必须初始化,指针建议指向空但不是非要指向空 C 引用声明后,引用的对象不可改变,可以改变对象的值,如果是const类型就不行,题目说明不严谨 D 如果是const修饰,引用可以为空,但是没有任何意义,一般不会这样使用 > **`这道题的答案是A`** -------------------- ### ?第二题 ### 下列哪一个是析构函数的特征() A 析构函数定义只能在类体内 B 一个类中只能定义一个析构函数 C 析构函数名与类名不同 D 析构函数可以有一个或多个参数 析构函数是对象销毁时编译器自动调用,将对象占用的所有资源消耗,和构造函数作用相反,析构函数无参数无返回值 A 析构函数可以在类中也可以在类外定义,在类外加上域名限定符也行 B 析构函数无参数无法重载,只能有一个 C 胡说八道 D 析构函数无参数 > **`这道题的答案是B`** -------------------- ### ?第三题 ### 若要对data类中重载的加法运算符成员函数进行声明,下列选项中正确的是? A Data operator+(Data); B Data operator(Data); C operator+(Data,Data); D Data+(Data); 对成员函数重载,+号具有左右两个,只需要给一个就行,因为有隐藏的this B D格式错误,C参数有两个,错误 > **`这道题的答案是A`** -------------------- ### ?第四题 ### 若MyClass是一个类名,其有如下语句序列: MyClass c1,*c2; MyClass *c3=new MyClass; MyClass &c4=c1; 上面的语句序列调用构造函数个数是( )。 A 1 B 2 C 3 D 4 只有创建对象才会调用构造函数 c1是一个对象,调用一次,c2是指针,不调用,c3new了一个对象,调用了构造函数在创建对象之后初始化,c4是c1的别名,没有创建对象 总共创建了两个对象,调用了两次构造函数 > **`这道题的答案是B`** -------------------- ### ?第五题 ### 下面关于类和对象的描述中,错误的是: A 类就是C语言中的结构体类型,对象就是C语言中的结构体变量 B 类和对象之间的关系是抽象和具体的关系 C 对象是类的实例,一个对象必须属于一个已知的类 D 类是具有共同行为的若干对象的统一描述体 ![请添加图片描述][8376c195ce9a49cb8c133b4fb73f4ce2.png] A 类就是类,和C语言结构体有区别,结构体里面只能放数据,不能放函数,而类可以放函数和变量,所以有本质区别 B 抽象指的是对一个事物的认知过程 C 对象是类的实例,一个对象必须属于一个已知的类,类是用来描述对象的 D 类是具有共同行为的若干对象的统一描述体 > **`这道题的答案是A`** -------------------- ### ?第六题 ### 下列关于类和对象的叙述中,错误的是() A 一个类只能有一个对象 B 对象是类的具体实例 C 类是对某一类对象的抽象 D 类和对象的关系是一种数据类型与变量的关系 A 单例模式:一个类只能创建一个对象,讲法太特殊 B 对象是类的具体体现 C 类就是根据对象的共性抽离出来的,用来描述对象 D 讲法没错 > **`这道题的答案是A`** -------------------- ### ?第七题 ### 如果有一个类是 myClass , 关于下面代码正确描述的是: myClass::~myClass(){ delete this; this = NULL; } A 正确,我们避免了内存泄漏 B 它会导致栈溢出 C 无法编译通过 D 这是不正确的,它没有释放任何成员变量。 这是一个析构函数,这个代码肯定无法通过编译,这个代码有好几个错误 ![请添加图片描述][a2ea64a6a93b4c9689f1a6da70c30567.png] > **`这道题的答案是C`** -------------------- ### ?第八题 ### 请问以下说法,哪个是正确的: A 每个类都有一个无参数的构造函数。 B 每个类都有一个拷贝构造的函数。 C 每个类能有多个构造函数。 D 每个类能有多个析构函数。 A 说法太绝对,在类中如果用户没有显示任何构造函数,则编译器会生成一个无参的构造函数,但是用户一旦定义,则编译器不再生成 B 拷贝构造函数也是如果用户没有显示任何构造函数,则编译器会生成一个默认的拷贝构造,一旦用户显示定义,则编译器不再生成,但是有些类是不需要拷贝构造的,用户可以只声明但不定义,编译器也不会自动生成,A(A&)= delete 可以删除默认拷贝构造 C 每个类能有多个构造函数 D 每个类只能有一个析构 ![请添加图片描述][a8c6cb5457084cdc87c9112dd7c2a8de.png] > **`这道题的答案是C`** -------------------- ### ?第九题 ### 下面程序段包含4个函数,其中具有隐含this指针的是() int f1(); class T { public:static int f2(); private:friend int f3(); protect:int f4(); }; A f1 B f2 C f3 D f4 类中每个**非静态成员函数**中都有一个隐藏的this指针参数 f1不是成员函数,没有,f2是静态,也没有,f3是友元函数,友元函数不是类的成员函数,所以友元函数也没有this指针,也不会受访问限定符的限制,f4是非静态成员函数 > **`这道题的答案是D`** -------------------- ### ?第十题 ### C++中关于堆和栈的说法,哪个是错误的() A 堆的大小仅受操作系统的限制,栈的大小一般较小 B 在堆上频繁的调用new/delete容易产生内存碎片,栈没有这个问题 C 堆和栈都可以静态分配 D 堆和栈都可以动态分配 堆的大小仅受操作系统的限制,栈的大小一般较小,栈如果方法结束会被自动回收,不受限制,堆都是动态分配,而栈可以静态或者动态 ![请添加图片描述][ae480d69f0df43fdaf6ec55c592fe024.png] > **`这道题的答案是C`** -------------------- ## 编程题 ## ### ?第一题 ### 链接:[二进制插入][Link 2] ![请添加图片描述][e8f16ba41bda410590a55424e07d4c8e.png] * 题目解析 主要考察位运算 * 解题思路 i j m:1024:100000000 00 n:19 : 10011 要把n的二进制值插入m的第j位到第i位,只需要把n先左移j位,然后再进行或运算(|)即可。 m: 10000000000 n: 00001001100 10001001100 * 代码演示 class BinInsert { public: int binInsert(int n, int m, int j, int i) { // write code here //方法1,取每个位赋值插入 // for(int k = 0;k <= i - j;k++) // { // n |= ((m >> k) & 1) << (j+k); // } // return n; //方法2,只需左移j位然后整体相或可以得到 return n | (m << j); } }; -------------------- ### ?第二题 ### 链接:[查找组成一个偶数最接近的两个素数][Link 3] ![请添加图片描述][fbd14d68ab574cbaa048b3578f25691b.png] * 解题思路 本题首先需要判断素数,素数表示除过1和本身,不能被其它数整除。通过循环遍历来判断一个数是否为素数。最近的两个素数应该从最中间的位置开始向两边查找。 * 代码演示 #include <iostream> #include <cmath> using namespace std; bool is_prime(int n) { for(int i = 2;i <= sqrt(n);i++) { if(n %i == 0) return false; } return true; } int main() { int num; while(cin >> num) { for(int i = num / 2;i >= 0;i--) { if(is_prime(i) && is_prime(num - i)) { cout << i << endl << num - i << endl; break; } } } 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/e5c787ec0d744552b53e845d4ffefccb.jpeg [3e3e1218f2d04a9aaf2c5bd24f311b95.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/17a4452f4478402ca5435c7026bf3822.png [8376c195ce9a49cb8c133b4fb73f4ce2.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/790432540a384587ba33e90ed8f539dd.png [a2ea64a6a93b4c9689f1a6da70c30567.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/7266e1e1a273479a892dad1bee6ef21c.png [a8c6cb5457084cdc87c9112dd7c2a8de.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/f4f345c4dc0c4a39a15b78592782700a.png [ae480d69f0df43fdaf6ec55c592fe024.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/f41e65306d8d4eb7a4e69626531c64d9.png [Link 2]: https://www.nowcoder.com/practice/30c1674ad5694b3f8f0bc2de6f005490?tpId=8&&tqId=11019&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking [e8f16ba41bda410590a55424e07d4c8e.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/50a7f49f90154ece9a1c9243387fce18.png [Link 3]: https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9?tpId=37&&tqId=21283&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking [fbd14d68ab574cbaa048b3578f25691b.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/29870e552f1b497a8e2c98d90f9a11bd.png
还没有评论,来说两句吧...