【笔试强训】Day 7

简介: 【笔试强训】Day 7

🌈选择题


在()情况下适宜采用 inline 定义内联函数

A 函数体含有循环语句

B 函数体含有递归语句

C 函数代码少、频繁调用

D 函数代码多,不常调用


复习一下内联函数


在编译阶段,会将内联函数展开 —— 将函数调用替换成函数体

少了函数调用参数压栈以及建立栈帧的开销,可以提高效率

注意:inline是一个建议性的关键字 —— 具体情况看编译器,由编译器决定

一般是:没有循环、没有递归、函数体不长

答案选C


在 C++ 语言中,对函数参数默认值描述正确的是()

A 函数带默认值的参数只能有一个

B 一个函数的参数若有多个,则参数默认值的设定可以不连续

C 函数参数必须设定默认值

D 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值


缺省参数:备胎的存在

可以全缺省,也可以半缺省:半缺省的默认值必须从右往左依次给出

void f(int a, int b = 20, int c = 10) —— 编译成功

答案选D


下面关于类定义的说法中,正确的是:

A 类定义中包括数据成员和函数成员的声明

B 类成员的缺省访问权限是保护的

C 数据成员必须被声明为私有的

D 成员函数只能在类体外进行定义


类的两种定义:


将声明和成员函数的定义全部放在类中

类中放成员变量和成员函数的声明,成员函数的定义可以放在.cpp中,注意成员函数名前必须添加类名::

类成员的缺省访问权限是私有的(private),数据成员被声明成私有是错误的;成员函数也可以在类中定义


答案选A


假定一个类的构造函数为A(int aa,int bb){a=aa–;b=a*bb;},则执行A x(4,5);语句后,x.a和x.b的值分别为()

A 20和5

B 3和15

C 5和4

D 4和20


a=aa–;是先赋值再–,所以a还是等于4;bb是5,所以4*5 = 20

答案选D


下列关于构造函数的描述正确的是?


A 构造函数可以声明返回类型

B 构造函数不可以用private修饰

C 构造函数必须与类名相同

D 构造函数不能带参数


复习一下:


构造函数没有返回值,必须和类名相同,且不能带参数

一般情况下,构造函数权限都是public,因此在类外创建对象时,编译器要调用构造函数(特殊情况:单例模式 —— 一个类只能创建一个对象,将构造函数设置为private)

答案选C


有一个类A,其数据成员如下:


class A {
...
private:
  int a;
public:
  const int b;
  float* &c;
  static const char* d;
  static double* e;
};


则构造函数中,成员变量一定要通过初始化列表来初始化的是:______。

A a b c

B b c

C b c d e

D b c d

E b

F c


初始化列表位置才是真正的初始化,构造函数体中(是赋值)也会回到初始化列表

初始化列表中:只对类中非静态的成员变量进行初始化(静态的是大家共有的,放在类外)

必须在初始化列表中初始化的有

1️⃣const修饰的成员变量

2️⃣引用类型的成员变量

3️⃣类类型对象,该类没有默认的构造函数

答案选B


C++ 中,有如下类模板定义:


template<class T> class BigNumber{
  long n;
public:
  BigNumber(T i) :n(i) {}
  BigNumber operator+(BigNumber b) {
  return BigNumber(n + b.n);
  }
};


已知 b1, b2 是 BigNumber 的两个对象,则下列表达式中错误的是()

A 3+3

B b1+3

C b1+b2

D 3+b1


运算符重载成类的成员函数,形参个数要比该运算符需要的参数少一个

因为:成员函数隐含了this指针

A:内置类型直接相加是可以的;

B:b1+3;+是对两个BigNumber的对象相加的。

如果类中具有单个参数的构造函数,该构造函数具有类型转换的作用

b1+3;编译器在编译代码节点,会调用单参构造函数将3转换成BigNumber的对象

D:第一个参数一定要是BigNumber的对象,因为是this

答案选D


下面有关友元函数与成员函数的区别,描述错误的是?

A 友元函数可以让本类和友元类对象调用

B 友元函数和类的成员函数都可以访问类的私有成员变量或者是成员函数

C 类的成员函数是属于类的,调用的时候是通过指针this调用的

D 友元函数是有关键字friend修饰,调用的时候也是通过指针this调用的


友元函数:不是类的成员函数,没有this指针,在友元函数内部可以访问类中私有的成员

成员函数:具有隐藏的this,通过对象来调用

答案选D


对于以下代码,说法正确的是()


char * p = new char[100];


A p 和 new出来的内存都在栈上

B p 和 new出来的内存都在堆上

C p在栈上 new出来的在堆上

D p在堆上 new出来的在栈上


new:C++中用来从动态申请空间,默认情况下,new底层调用的是 operator new ——》 malloc ,所以申请的空间在堆上

指针p在全局作用域中在数据段中,若在函数体中则是在栈上

答案选C


类模板的使用实际上是类模板实例化成一个具体的__________。

A 类

B 函数

C 模板类

D 对象


这个当然是实例化成具体的类!


答案选A


🌈编程题


1️⃣合法括号序列判断

题目地址: 传送


0a2653c851af460fa595bd959398a8f1.png


匹配不成功


当前字符不是括号字符

括号匹配不完整

1️⃣多出了左半边:

2️⃣多出了右半边:

解题思路:


遍历字符串,遇到左括号就入栈,遇到右括号则查看栈中是否有对应的左括号

若没有,栈为空,则表示多出了右括号,匹配不完整

有,出栈,匹配一个完整的括号 遍历完毕后如果栈不为空,则是多出了左括号

2d65d23f6d4748949b924e4057485923.png


class Parenthesis {
public:
    bool chkParenthesis(string A, int n) {
        stack<char> arr;
        for(auto ch : A)
        {
            if(ch == '(')
            {
                arr.push(ch);
            }
            else if(ch == ')')
            {
                if(arr.empty())
                {
                    return false;
                }
                arr.pop();
            }
            else
            {
                return false;//不是括号字符返回false
            }
        }
        return arr.empty();
    }
};


2️⃣Fibonacci数列

题目地址:传送


4cebaac233b3433da32a72337a77fc60.png


题目思路:


找到两个距离N最近的两个fib数

left(小于N),right(大于N)

最近的距离是:min(N - left , right - N)

#include <iostream>

using namespace std;


int main() {
    int a = 0, b = 1, c;
    int N, left=0, right=0;
    cin >> N;
    while(1)
    {
        c = a + b;
        a = b;
        b = c;
        //通过不断循环找到了左边最小的fib数
        if(c < N)
        {
            left = c;//左边的fib数
        }
        else
        {
            right = c;//右边的fib数
            break;
        }
    }
   cout << min(N - left , right - N) <<endl;
   return 0;
}
相关文章
|
5月前
|
监控 数据可视化 测试技术
API性能监控:关键指标与实用工具
监控API接口性能对保障其稳定性和效率至关重要。常用方法包括:关注响应时间、吞吐量、正常运行时间、错误率及资源使用率等关键指标;通过日志分析、性能监控工具(如New Relic、Datadog APM)、实时警报和用户行为分析优化性能;借助压力测试评估负载能力。推荐工具如Assertible、SmartBear、Moesif等,可简化监控流程并提供详细报告。综合运用这些方法与工具,能有效确保API的高效稳定运行。
807 1
|
6月前
|
机器学习/深度学习 算法 测试技术
DeepSeek-R1-0528:小更新大升级
今天,DeepSeek R1 开源发布了其“小版本”升级——DeepSeek-R1-0528。
864 23
DeepSeek-R1-0528:小更新大升级
|
消息中间件 Java Spring
SpringBoot实现RabbitMQ的广播交换机(SpringAMQP 实现Fanout广播交换机)
SpringBoot实现RabbitMQ的广播交换机(SpringAMQP 实现Fanout广播交换机)
277 2
|
搜索推荐 前端开发 数据可视化
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
本文介绍了一个基于Python协同过滤算法的旅游景点推荐系统,该系统采用Django框架、MySQL数据库、Bootstrap前端和echarts数据可视化技术,旨在为用户提供个性化的旅游推荐服务,提升用户体验和旅游市场增长。
1686 9
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
|
机器学习/深度学习 人工智能 算法
AIGC在自动化新时代中重塑RPA
【1月更文挑战第21天】AIGC在自动化新时代中重塑RPA
400 7
AIGC在自动化新时代中重塑RPA
|
机器学习/深度学习 数据采集 传感器
深度学习之智能交通信号控制
基于深度学习的智能交通信号控制是交通管理领域的一项创新技术,旨在提高交通流量的效率,减少拥堵和排放,并改善交通安全。通过深度学习技术,交通信号控制系统可以实时分析交通数据,优化信号配时和调度,从而实现智能化的交通管理。
395 2
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
SQL 关系型数据库 数据库
在 Postgres 中使用 Exists
【8月更文挑战第11天】
375 0
|
存储 缓存 调度
【项目日记(三)】内存池的整体框架设计
【项目日记(三)】内存池的整体框架设计
|
机器学习/深度学习 数据可视化 Python
No module named 'tensorboardX' 如何解决
【5月更文挑战第27天】No module named 'tensorboardX' 如何解决
1323 0