当前位置: 首页 > news >正文

【C++笔试强训】第十一天

🎇C++笔试强训


  • 博客主页:一起去看日落吗
  • 分享博主的C++刷题日常,大家一起学习
  • 博主的能力有限,出现错误希望大家不吝赐教
  • 分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光 🌞。

在这里插入图片描述

💦 🔥


选择题

💦第一题

关于内联函数说法错误的是()

A 不是任何一个函数都可定义成内联函数
B 内联函数的函数体内不能含有复杂的结构控制语句
C 递归函数可以被用来作为内联函数
D 内联函数一般适合于只有1~5行语句的小函数

关于内联函数我们提过很多次了

A 内联函数是有要求的,所以A正确
B 内联函数不可以太复杂,B正确
C 递归不可以做内联
D 内联函数建议不要太长,C++官方文档建议1-5行

这道题的答案是C


💦第二题

以下不是double compare(int,int)的重载函数的是()

A int compare(double,double)
B double compare(double,double)
C double compare(double,int)
D int compare(int,int)

关于函数重载,函数名要一样,参数列表要求不一样,和返回值类型没有关系

这道题答案是D


💦第三题

假定有类AB,有相应的构造函数定义,能正确执行

AB a(4),b(5),c[3],*p[2]={&a,&b};

语句,请问执行完此语句后共调用该类的构造函数次数为___

A 5
B 4
C 3
D 9

创建ab各调用一次,创建数组c包含3个对象调用3次,p是个指针数组,存放的是指针,所以p不会调用构造函数

这道题的答案是A


💦第四题

下列关于赋值运算符“=”重载的叙述中,正确的是

A 赋值运算符只能作为类的成员函数重载
B 默认的赋值运算符实现了“深层复制”功能
C 重载的赋值运算符函数有两个本类对象作为形参
D 如果己经定义了复制拷贝构造函数,就不能重载赋值运算符

如果用户在类中没有显示定义赋值运算符重载时,编译器自动生成一份——按照浅拷贝方式实现的

A 赋值运算符重载如果重载成普通的成员函数编译器会报错,编译无法通过
B 默认的赋值运算符是编译器自动生成的,按照浅拷贝实现,错误
C 赋值运算符重载只可以放一个类型,前面有一个隐藏的this,错误
D 拷贝构造和重载赋值运算符是两个函数,不冲突,错误

这道题的答案是A


💦第五题

下列有关静态成员函数的描述中,正确的是:

A 静态数据成员(非const类型)可以在类体内初始化
B 静态数据成员不可以被类对象调用
C 静态数据成员不受private控制符作用
D 静态数据成员可以直接用类名调用

A 静态成员是所有类共享的,所以就不可以在类内初始化
B 可以通过类名+作用域的方式访问
C 静态成员如果是类的成员都要受控制符访问
D 静态数据成员可以直接用类名调用,一般更推荐类名+作用域访问

这道题的答案是D


💦第六题

若PAT是一个类,则程序运行时,语句“PAT(*ad)[3];”调用PAT的构造函数的次数是()

A 2
B 3
C 0
D 1

ad是一个数组指针,是一个指针,该指针将来只能指向PAT类型的3个连续的空间,没有创建对象,所以不会调用构造函数

这道题的答案是C


💦第七题

下面对析构函数的正确描述是()

A 系统不能提供默认的析构函数
B 析构函数必须由用户定义
C 析构函数没有参数
D 析构函数可以设置默认参数

请添加图片描述

A 系统会提供默认析构
B 析构函数可以由系统提供默认的
C 析构函数没有参数,如果有参数编译器会报错,(所以析构函数不能重载)
D 析构函数没有参数,无法设置默认值

这道题的答案是C


💦第八题

关于以下代码,哪个说法是正确的()

myClass::foo(){
	delete this;
}
..
void func(){
	myClass *a = new myClass();
	a->foo();
}

A 它会引起栈溢出
B 都不正确
C 它不能编译
D 它会引起段错误

delete this 代表把当前对象销毁掉

func里面为a new新空间,然后用a指向foo,然后将a对象销毁掉,所以代码没有任何问题

这道题的答案是B


💦第九题

哪种说法是错误的()?

A 构造函数可以有形参
B 析构函数可以有形参
C 构造函数无任何函数类型
D 析构函数无任何函数类型

A 构造函数可以有形参,在类中可能有多个成员变量
B 析构函数没有参数
CD 析构函数和构造函数无任何参数类型

这道题的答案是B


💦第十题

有如下模板定义:

template <class T>
T fun(T x,T y){
	return x*x+y*y;
}

在下列对fun的调用中,错误的是()

A fun(1, 2)
B fun(1.0, 2)
C fun(2.0, 1.0)
D fun(1, 2.0)

fun在实例化时,其传递的两个参数的类型必须要一致,如果不一致的话需要显示实例化

请添加图片描述

这道题的答案是B


编程题

🔥第一题

链接:最近的公共祖先

请添加图片描述

  • 题目解析

最近公共祖先表示距离两个节点最近的公共父节点,这道题考察二叉树。

  • 解题思路

题目所描述的满二叉树如下: 1 / \ 2 3 / \ / \ 4 5 6 7 上述树中子节点与父节点之间的关系为root = child / 2所以如果a != b,就让其中的较大数除以2, 如此循环直到a == b 即是原来两个数的最近公共祖先 比如: 2和7的最近公共祖先:7/2 = 3 —> 3/2 = 1, 2/2 = 1, 得到1为它们的公共祖先

  • 代码演示:
class LCA {
public:
    int getLCA(int a, int b) {
        // write code here
        while(a != b)
        {
            if(a > b)
                a /= 2;
            else
                b /= 2;
        }
        return b;
    }
};

🔥第二题

链接:求最大连续bit数

请添加图片描述

  • 题目解析

这道题考察位运算

  • 解题思路

根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) & 1。如果1连续,则计数累加,如果不连续,则从0开始计数。

  • 代码演示:
#include <iostream>
using namespace std;

int main() {
    int n;
    while (cin >> n) {
        int count = 0, maxcount = 0;
        //如果测试用例是-1时无法通过,以为右移动会补符号位
        // while (n) {
        //     if (n & 1) {
        //         count++;
        //         maxcount = max(count, maxcount);
        //     } else {
        //         count = 0;
        //     }
        //     n = n >> 1;
        // }

        //此时的解决方法是将1往左移,不改变n
        for(int i = 0;i < 32;i++)
        {
            if(n &(1 << i))
            {
                count++;
                maxcount = max(count,maxcount);
            }
            else
                count = 0;
        }

        cout << maxcount << endl;
    }
    return 0;
}



相关文章:

  • [Linux打怪升级之路]-vim编辑器(看就能马上操作噢)
  • 睿智的目标检测61——Keras搭建YoloV7目标检测平台
  • DM8: 达梦数据库生成100以内2位数加减法
  • 《数据结构》(六)八大排序(上)
  • 几道简单的Linux驱动相关面试题,你看你会几题?
  • libusb系列-004-Qt下使用libusb库
  • vue的简单学习
  • Arduino基础知识
  • 【入门4】数组——蛇形方阵
  • web自动化测试——入门篇01
  • 探索云原生技术之容器编排引擎-Kubernetes/K8S详解(5)
  • 软考中级(软件设计师)——面向对象程序设计(C++Java二选一的题15分-目标3分)
  • 《JavaSE-第十四章》之文件(一)
  • 【C++】命名空间输入输出缺省参数函数重载
  • C++ STL速成
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • exif信息对照
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript设计模式系列一:工厂模式
  • React16时代,该用什么姿势写 React ?
  • React系列之 Redux 架构模式
  • Spring核心 Bean的高级装配
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 闭包--闭包作用之保存(一)
  • 检测对象或数组
  • 聊聊sentinel的DegradeSlot
  • 目录与文件属性:编写ls
  • 如何合理的规划jvm性能调优
  • 在Mac OS X上安装 Ruby运行环境
  • 《天龙八部3D》Unity技术方案揭秘
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • #if和#ifdef区别
  • (2)MFC+openGL单文档框架glFrame
  • (2022 CVPR) Unbiased Teacher v2
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (六)vue-router+UI组件库
  • (三) diretfbrc详解
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .Net 6.0 处理跨域的方式
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET程序员迈向卓越的必由之路
  • @Autowired标签与 @Resource标签 的区别
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [Android] Amazon 的 android 音视频开发文档
  • [android] 手机卫士黑名单功能(ListView优化)
  • [codevs1288] 埃及分数