每日刷题-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到两个数之间的距离。

代码:

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int n;
    while(cin>>n)
    {
        int f0=0,f1=1,f2=1;
        int step=0;
        while(n>f2)
        {
            f0=f1;
            f1=f2;
            f2=f1+f0;
        }
       step=(f2-n)<(n-f1)?(f2-n):(n-f1);
       cout<<step;

    }
}

2.合法括号序列判断

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

代码:

cpp 复制代码
class Parenthesis {
  public:
    bool chkParenthesis(string A, int n) {
        stack<char> sc;
        for (auto ele : A) {
            switch (ele) {
                case '(':
                    sc.push(ele);
                    break;
                case ')': {
                        if (sc.empty() || sc.top() != '(')
                            return false;
                        else
                            sc.pop();
                    }
                    break;
                default:
                    return false;
            }
        }
        return true;
    }
};
相关推荐
xrgs_shz5 分钟前
MATLAB的数据类型和各类数据类型转化示例
开发语言·数据结构·matlab
独正己身6 分钟前
代码随想录day4
数据结构·c++·算法
我不是代码教父3 小时前
[原创](Modern C++)现代C++的关键性概念: 流格式化
c++·字符串格式化·流格式化·cout格式化
利刃大大3 小时前
【回溯+剪枝】找出所有子集的异或总和再求和 && 全排列Ⅱ
c++·算法·深度优先·剪枝
子燕若水3 小时前
mac 手工安装OpenSSL 3.4.0
c++
*TQK*3 小时前
ZZNUOJ(C/C++)基础练习1041——1050(详解版)
c语言·c++·编程知识点
Rachela_z4 小时前
代码随想录算法训练营第十四天| 二叉树2
数据结构·算法
细嗅蔷薇@4 小时前
迪杰斯特拉(Dijkstra)算法
数据结构·算法
追求源于热爱!4 小时前
记5(一元逻辑回归+线性分类器+多元逻辑回归
算法·机器学习·逻辑回归
ElseWhereR4 小时前
C++ 写一个简单的加减法计算器
开发语言·c++·算法