🎇C++笔试强训
- 博客主页:一起去看日落吗
- 分享博主的C++刷题日常,大家一起学习
博主的能力有限,出现错误希望大家不吝赐教
- 分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光 🌞。
💦 🔥
在()情况下适宜采用 inline 定义内联函数
A 函数体含有循环语句
B 函数体含有递归语句
C 函数代码少、频繁调用
D 函数代码多,不常调用
这道题主要是考验内联函数,我们需要知道其概念,特性,和作用
A B 函数体内有循环和递归语句,所以肯定不建议用,错误
D 如果代码比较长,即使用inline修饰,编译器也不会把其当内联函数
这道题的答案是C
在 C++ 语言中,对函数参数默认值描述正确的是()
A 函数带默认值的参数只能有一个
B 一个函数的参数若有多个,则参数默认值的设定可以不连续
C 函数参数必须设定默认值
D 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值
这道题是考察缺省参数
A 说法错误,不止一个
B 必须连续
C 不一定,看情况
D 对的,从右往左依次给出
这道题的答案是D
下面关于类定义的说法中,正确的是:
A 类定义中包括数据成员和函数成员的声明
B 类成员的缺省访问权限是保护的
C 数据成员必须被声明为私有的
D 成员函数只能在类体外进行定义
这道题主要考察类定义的理解
A 选项的说法是正确的
B
C 并不是必须,只是建议将成员变量设置为private,将成员函数设置为public
D 错误的,并不受限制
这道题的答案是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
这道题是在构造函数体中给成员变量进行赋值
这道题的答案是D
下列关于构造函数的描述正确的是?
A 构造函数可以声明返回类型
B 构造函数不可以用private修饰
C 构造函数必须与类名相同
D 构造函数不能带参数
这道题是考察构造函数,我们需要搞懂概念,特性,调用场景,编译器生成的默认构造函数
A 构造函数是没有返回值的,不可以声明返回类型
B 一般情况下构造函数的权限都是public,因为在类外创建对象时,编译器要调用构造函数,但也有特殊情况
单例模式:一个类只能创建一个对象,这时候会将构造函数设置为private,所以错误
C 这个是概念当中提到的,正确
D 构造函数也是个函数,也是看情况来定,可以带参数
这道题的答案是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
这道题的答案是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+b
这道题需要注意的点是运算符重载
如果将运算符重载成类的成员函数,形参个数要比该运算符需要的参数个数少1,因为成员函数含有隐藏的this指针
A 可以,3和3是整形,+号本身就可以支持
B 如果类中有单个参数的构造函数,该构造函数具有类型转换的作用,b1 + ¥ 的3 编译器在编译代码节点,回调用单参构造函数将3转换为BigNumber的对象
C 是两个BigNumber对象,也可以
D 3不是BigNumber类型的对象,错误
这道题的答案是D
下面有关友元函数与成员函数的区别,描述错误的是?
A 友元函数可以让本类和友元类对象调用
B 友元函数和类的成员函数都可以访问类的私有成员变量或者是成员函数
C 类的成员函数是属于类的,调用的时候是通过指针this调用的
D 友元函数是有关键字friend修饰,调用的时候也是通过指针this调用的
这道题考验的是友元函数和类的成员函数
D 友元函数不是类的成员函数,所以没有this指针
这道题的答案是D
对于以下代码,说法正确的是()
char * p = new char[100];
A p 和 new出来的内存都在栈上
B p 和 new出来的内存都在堆上
C p在栈上 new出来的在堆上
D p在堆上 new出来的在栈上
这道题的语句应该是在函数体中的
这道题的答案是C
类模板的使用实际上是类模板实例化成一个具体的__________。
A 类
B 函数
C 模板类
D 对象
我们来初步定义一个类模版
类模版在使用的时候也需要初始化——》SeqList < int > s1
编译器在编译代码时,看到用户对类模版实例化之后,编译器才会将类模版按照具体的类型,生成一个具体的类出来
这道题的答案是A
链接:Fibonacci数列
本题是对于Fibonacci数列的一个考察,Fibonacci数列的性质是第一项和第二项都为1,后面的项形成递归:
F(n) = F(n - 1) + F(n - 2)。
本题可以通过先找到距离N最近的两个Fibonacci数,这两个数分别取自距离N的最近的左边一个数L和右边一个数R,然后通过min(N - L, R - N)找到最小步数。
#include
using namespace std;
int main()
{
int f,f1 = 0,f2 = 1;
int N;
cin >> N;
int left = 0,right = 0;
while(1)
{
f = f1 + f2;
f1 = f2;
f2 = f;
if(f < N)
{
left = f;//左边的fib
}
else
{
right = f;//右边的fib
break;
}
}
cout << min(N-left,right-N) << endl;
return 0;
}
链接:合法括号序列判断
本题考查的是对栈的应用
用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,如果没有,则说明不匹配。
class Parenthesis {
public:
bool chkParenthesis(string A, int n) {
// write code here
stack<char> sc;
for(auto ch : A)
{
switch(ch)
{
case '(':
sc.push(ch);
break;
case ')':
if(sc.empty())
return false;//多出右半边
sc.pop();
break;
default:
return false;//遇到非括号字符
}
}
return sc.empty();//多出左半边
}
};