笔试强训48天——day17

一. 单选

1. 假设A为抽象类,下列声明()是正确的

A int fun(A);
B A Obj;
C A fun(int);
D A *p;

正确答案:D

抽象类不能实例化对象
建立相对应类型的指针,并不是实例化对象

 

2. 虚函数可不可以重载为内联?

A 可以
B 不可以
C 语法错误

正确答案:B

 

3. 下面有关虚函数的描述,说法错误的是?

A 虚函数的作用是实现了继承性
B 虚函数的作用就是实现“动态联编”,也就是在程序的运行阶段动态地选择合适的成员函数
C 和类的静态成员函数与非类的成员函数相比,虚函数的效率较低
D 要正确的实现虚函数,只能用一个基类的指针或者引用来指向派生类对象
正确答案:A

继承主要的目的是实现多态——虚函数,反之是不成立的

 

4.下面这个代码输出的是()

#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(500);
vector<int>::iterator itor;
for(itor=array.begin();itor!=array.end();itor++)
{
if(*itor==300)
{
itor=array.erase(itor);
}
} f
or(itor=array.begin();itor!=array.end();itor++)
{
cout<<*itor<<"";
}
return 0;
} 

A 100 300 300 300 300 500
B 100 300 300 300 500
C 100 300 300 500
D 100 300
正确答案:C

不会删除所有的300
迭代器会接受删除之后的的位置,然后++就会跳过两个300

 

5. 在 C++ 中,用于实现动态多态性的是( )。

A 内联函数
B 重载函数
C 模板函数
D 虚函数

正确答案:D

 

6. 调用一成员函数时, 使用动态联编的情况是()

A 通过对象调用一虚函数
B 通过指针或引用调用一虚函数
C 通过对象调用静态函数
D 通过指针或应用调用一静态函数

正确答案:B

 

7. 下面有关继承、多态、组合的描述,说法错误的是?

A 封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对
不可信的进行信息隐藏
B 继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展
C 隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了
D 覆盖是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同

正确答案:D

《高质量C++编程》第七章 重载、隐藏、覆盖
覆盖必须达到三同——虚函数重写

 

8. “引用”与多态的关系?

A 两者没有关系
B 引用可以作为产生多态效果的手段
C 一个基类的引用不可以指向它的派生类实例
D 以上都不正确

正确答案:B

多态必须通过父类的指针或引用调用虚函数

 

9. 下面这段程序的输出是什么?

class A{
public:
A(){p();}
virtual void p(){print("A")}
virtual ~A(){p();}
};
class B:public A{
public:
B(){p();}
void p(){print("B")}
~B(){p();}
};
int main(int, char**){
A* a=new B();
delete a;
} 

A AABB
B BBAA
C ABAB
D ABBA
正确答案:D

先构造的后析构

 

10. 以下代码的运行结果为()

class Base {
public:
Base() {
echo();
} v
irtual void echo() {
printf("Base");
}
};
class Derived:public Base {
public:
Derived() {
echo();
} v
irtual void echo() {
printf("Derived");
}
};
int main() {
Base* base = new Derived();
base->echo();
return 0;
} 

A DerivedDerivedDerived
B DerivedBaseDerived
C BaseDerivedBase
D BaseDerivedDerived
正确答案:D

new子类先构造父类,再构造子类: BaseDerived
虚函数重写调子类:Derived

 

 

二. 编程

1.杨辉三角的变形

链接

以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数、左上角数和右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。
求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3,输入2则输出-1。

输入描述:
输入一个int整数
输出描述:
输出返回的int值

示例1:
输入
4 输

3

根据规律:
偶数在左半部分
{-1,-1,2,3,2,4,2,3,2,4,…}

正确答案:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    int n;
    while(cin>> n)
    {
        if(n<=2)
        cout<<-1<<endl;
        else if(n%4 == 1 || n%4 == 3)
        cout<<2<<endl;
        else if(n%4 == 2)
        cout<<4<<endl;
        else
        cout<<3<<endl;
    }
 return 0;
}

另一种写法:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    int n;
    int a[] = {4,2,3,2};
    while(cin>> n)
    {
        int ret = -1;
        if(n>2){
            ret = a[(n-2)%4];
        }
        cout<<ret<<endl;

        
    }
 return 0;
}

 

2. 计算某字符出现次数

链接

写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)

输入描述:
第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字符。
输出描述:
输出输入字符串中含有该字符的个数。(不区分大小写字母)

示例1:
输入
ABCabc
A
输出
2

正确答案:
C语言

#include <stdio.h>
#include <string.h>
int main()
{
char str[1003] = { 0 };
//gets函数获取一行数据,因为会连带最后的换行一起获取,所以不用担心遗留的换行对后续输入造成影响
gets(str);
char find;
scanf("%c", &find);//捕捉要查找的字符
int count[128] = { 0 };//用于记录每个字符出现次数
int len = strlen(str);//获取字符串实际长度
for (int i = 0; i < len; i++) {
count[str[i]] += 1; //对应字符的位置计数+1
} int res = count[find];
if (find >= 'A' && find <= 'Z') {//如果是A-Z需要将a-z对应的计数加上
res += count[find + 32];
} else if (find >= 'a' && find <= 'z') {//如果是a-z需要将A-Z对应的计数加上
res += count[find - 32];
} printf("%d\n", res);
return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hey pear!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值