• 每日刷题-6


    目录

    一、选择题

    二、算法题

    1.Fibonacci数列

    2.合法括号序列判断


    一、选择题

    1、

    解析:内联函数是一种可以提高函数执行效率的方法,它的原理是编译时在函数调用点直接展开函数体的代码,从而避免了函数调用的开销。

    但是,内联函数也有一些限制和缺点,比如:

    • 内联函数不能包含复杂的结构控制语句,例如循环语句和 switch 语句,否则会导致代码膨胀和效率降低。
    • 内联函数不能是直接递归函数,即自己内部还调用自己的函数,否则会造成无限循环或栈溢出。
    • 内联函数的定义必须出现在内联函数第一次被调用之前,否则编译器无法展开函数体。
    • 内联函数只是对编译器的一个建议,编译器可以根据函数的复杂度和调用频率来决定是否真正进行内联。

    因此,适宜采用内联函数的情况是:函数代码少、频繁调用,并且没有复杂的流程控制和递归调用。这样可以最大程度地利用内联函数的优势,提高程序的运行速度。答案选C。

    2、

    解析:缺省参数(默认参数):在声明和定义函数时,可以给函数的参数带上一个默认值;在调用函数时,如果用户没有传递实参,则使用定义时所给的默认值,如果用户传递了实参,就使用用户传递的实参。
    全缺省参数:每个参数都有默认值;
    半缺省参数:部分参数具有默认值,并且默认值必须从右往左依次给出,例如:

    void f(int a, int b = 20, int c = 10)编译成功 
    void f(int a = 10, int b, int c = 20)编译失败。答案为D。

    3、

    解析:类定义2种方式:
    1、可以将声明和成员函数的定义全部放在类中
    2、类中只放成员变量和成员函数的声明,成员函数的定义可以放在.cpp文件中定义,注意:成员函数名前必须添加类名
    class:默认访问权限private;struct:默认的访问权限public
    建议:将成员变量设置为private将成员函数设置为public。答案为A。

    4、

    解析:构造函数的特点有以下几点:

    • 构造函数的名称必须与类名相同,区分大小写;
    • 构造函数没有返回值,也不能用void修饰
    • 构造函数可以用任何访问修饰符(public、protected和private)修饰;
    • 构造函数不能用static、final、abstract和synchronized等关键字修饰;
    • 构造函数不能被覆写(override);
    • 构造函数可以被重载(overload),以参数的个数、类型及顺序区分;重载意味着一个类里可以有多个构造函数,构造函数1可以调用构造函数2完成对象初始化,通过this关键字:this(参数1,参数2…)实现;答案为C。

    5、

    解析:一般来说,使用初始化列表比在构造函数内部赋值更高效,因为初始化列表可以直接调用成员变量的构造函数,而不需要先调用默认构造函数再进行赋值。而且,有些情况下必须使用初始化
    (1)常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面
    (2)引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面
    (3)没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数或其他合适的构造函数初始化。答案选B。

    6、

    解析:如果将运算符符重载成类的成员函数,形参个数要比该运算符需要的参数个数少1,因为成员函数具有隐藏的this指针。如果类中具有单个参数的构造函数,该构造函数具有类型转换的作用,对于B选项,编译器在编译代码节点,会调用单参构造函数将3转换为BigNumber的对象
    但是D选项第一个参数不是对象,没有this指针,所以错误,

     

    7、

    解析:友元函数是C++中的一种特殊函数,它具有访问类中私有成员的权限,即使该函数不是类的成员函数。友元函数可以在类内部声明为友元或在类外部声明为友元。
    D是错误的,友元函数是有关键字friend修饰,但是调用的时候不是通过指针this调用的,因为友元函数不属于任何类没有this指针。
     

    二、算法题

    1.Fibonacci数列

    解析:找到两个斐波那契数,使得F[i]<=n<=fF[i+1],然后计算n到两个数之间的距离。

    代码:

    1. #include
    2. using namespace std;
    3. int main() {
    4. int n;
    5. while(cin>>n)
    6. {
    7. int f0=0,f1=1,f2=1;
    8. int step=0;
    9. while(n>f2)
    10. {
    11. f0=f1;
    12. f1=f2;
    13. f2=f1+f0;
    14. }
    15. step=(f2-n)<(n-f1)?(f2-n):(n-f1);
    16. cout<
    17. }
    18. }

    2.合法括号序列判断

    解析:本题考察对栈的应用。用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,如果没有,则说明不匹配。当把字符串遍历完全之后,检查栈是否为空,为空则说明是合法括号序列。

    代码:

    1. class Parenthesis {
    2. public:
    3. bool chkParenthesis(string A, int n) {
    4. stack<char> sc;
    5. for (auto ele : A) {
    6. switch (ele) {
    7. case '(':
    8. sc.push(ele);
    9. break;
    10. case ')': {
    11. if (sc.empty() || sc.top() != '(')
    12. return false;
    13. else
    14. sc.pop();
    15. }
    16. break;
    17. default:
    18. return false;
    19. }
    20. }
    21. return true;
    22. }
    23. };

  • 相关阅读:
    【LeetCode:1402. 做菜顺序 | 动态规划 + 贪心】
    virtualbox7 虚拟机与宿主机互传文件、共享u盘
    如何使用ESP8266微控制器和Nextion显示器为Home Assistant展示温度传感器和互联网天气预报
    3分钟从零解读Transformer的Encoder
    20220802NOI模拟赛--考后总结
    uniapp通过ip获取其地址:
    为什么 Intent 不能传递大数据
    ppt模版免费下载网站大全
    【[SCOI2005] 互不侵犯】【状压DP(含概念讲解)】
    基于FPGA的图像拉普拉斯变换实现,包括tb测试文件和MATLAB辅助验证
  • 原文地址:https://blog.csdn.net/weixin_65592314/article/details/132864915