C/C++综合测试题(三)

又刷了一套题

 

这些题都是百度、阿里巴巴、腾讯、网易、新浪等公司的面试原题,有一定的难度,不过确实相当有水平,可以通过做题来查漏补缺。

 

1.补充下面函数代码: 

如果两段内存重叠,用memcpy函数可能会导致行为未定义。 而memmove函数能够避免这种问题,下面是一种实现方式,请补充代码。

#include <iostream>
using namespace std;
void* memmove(void* str1,const void* str2,size_t n)
{
    char* pStr1= (char*) str1;
    const char* pStr2=(const char*)str2;
    if  ( ) {
        for(size_t i=0;i!=n;++i){
            *(pStr1++)=*(pStr2++);
        }
    }
    else{
        pStr1+=n-1;
        pStr2+=n-1;
        for(size_t i=0;i!=n;++i){
            *(pStr1--)=*(pStr2--);
        }
    }
    return ( );
}



A.    pStr1<pStr2 str1

B.    pStr1+n< pStr2 str2

C.   pStr1+n< pStr2 || pStr2+n<pStr1 str2

D.   pStr2+n<pStr1 str1

 


答案:A

 

只要pStr1的地址在pStr2的前面,甚至是,pStr1的起始地址和pStr2一样。

如下语句

for(size_t i=0;i!=n;++i){
      *(pStr1++)=*(pStr2++);

就可以保证pStr2在被覆盖前,将值copypStr1。

最后返回非constStr1。



2.int x[6][4],(*p)[4];p=x; *(p+2)指向哪里?

A. x[0][1]

B. x[0][2]

C. x[1][0]

D. x[2][0]



 


答案:D

int  (*p)[4]是一个int型的数组指针,p=x,即为,p指向x[6][4]的首地址,p=&x[0][0]

*(p)=x[0][0]*(p+2)=x[0+2][0]



 

3.下面有关C++中为什么用模板类的原因,描述错误的是?

A. 可用来创建动态增长和减小的数据结构

B. 它是类型无关的,因此具有很高的可复用性

C. 它运行时检查数据类型,保证了类型安全

D. 它是平台无关的,可移植性

 



答案:C

注意,模板类不能在运行时检查数据类型,运行时检查是多态的特性



4.

int func(int a)
{
    int b;
    switch (a)
    {
        case 1: b = 30;
        case 2: b = 20;
        case 3: b = 16;
        default: b = 0;
    }
    return b;
}


func(1)= ?

A.30

B.20

C.16

D.0



 

答案:D

没有break语句,所以一直向下执行,执行到b=0结束

 


5.

class A
{
        int a;
        short b;
        int c;
        char d;
};
class B
{
        double a;
        short b;
        int c;
        char d;
};

32位机器上用gcc编译以上代码,求sizeof(A),sizeof(B)分别是多少。

A. 12 16

B. 12 12

C. 16 24

D. 16 20

 



答案:C

copy别人的,人家写的非常好

根据以下条件进行计算:
1  结构体的大小等于结构体内最大成员大小的整数倍
2、  结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说double型成员相对于结构体的首地址的地址偏移量应该是8的倍数。
3、  为了满足规则1和2编译器会在结构体成员之后进行字节填充!

A中,a占4个字节,b本应占2个字节,但由于c占4个字节,为了满足条件2,b多占用2个字节,为了满足条件1,d占用4个字节,一共16个字节。
B中,a占8个字节,b占2个字节,但由于c占4个字节,为了满足条件2,b多占用2个字节,
即abc共占用8+4+4=16个字节,
为了满足条件1,d将占用8个字节,一共24个字节。

 



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

A. 封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏

B. 继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展

C. 隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了

D. 覆盖是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同

 

 


答案:D

D说的明明是函数重载好不好。。。。

 

 


7.下面有关c++线程安全,说法错误的是?

A.线程安全问题都是由全局变量及静态变量引起的

B.若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全

C. c++标准库里面的string保证是线程安全的

D. POSIX线程标准要求C标准库中的大多数函数具备线程安全性




答案:C

 

C++标准库出现的时候,C++还没有线程的概念,所以string不能保证是线程安全的

 

 

8.以下程序的输出是

class Base
{
public:
	Base(int j): i(j)  {}
	virtual~Base() {}
	void func1()
	{
		i *= 10;
		func2();
	}
	int getValue()
	{
		return  i;
	}
protected:
	virtual void func2()
	{
		i++;
	}
protected:
	int i;
};
class Child: public Base
{
public:
	Child(int j): Base(j) {}
	void func1()
	{
		i *= 100;
		func2();
	}
protected:
	void func2()
	{
		i += 2;
	}
};
int main()
{
	Base * pb = new Child(1);
	pb->func1();
	cout << pb->getValue() << endl;
	delete pb;
}


A. 11

B. 101

C. 12

D. 102





答案:C

func1不是虚函数,func2是虚函数,所以

pb->func1();

调用的是Base类的func1和Child类的func2




9.下面对静态数据成员的描述中,正确的是?

A. 静态数据成员可以在类体内进行初始化

B.静态数据成员不可以被类的对象调用

C.静态数据成员不受private控制符的作用

D.静态数据成员可以直接用类名调用




答案:D

A中,const static类型可以在类体内进行初始化

 

10.#include<file.h> #include "file.h"的区别?

A.    前者首先从当前工作路径搜寻并引用file.h,而后者首先从Standard Library的路径寻找和引用file.h

B.    前者首先从StandardLibrary的路径寻找和引用file.h,而后者首先从当前工作路径搜寻并引用file.h

C.   两者都是首先从StandardLibrary的路径寻找和引用file.h

D.   两者都是首先从当前工作路径搜寻并引用file.h




答案:B





  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 编写大学C期末考试题库的程序是一个相对较复杂的任务。首先,我们需要设计一个数据结构来存储问题和答案。这个数据结构可以是一个数组,每个元素包含问题和答案的相关信息,如题目内容、选项、正确答案等。 接下来,我们需要编写程序来实现题库的功能。可以创建一个菜单界面,让用户选择题目的添加、删除、修改和查询等操作。对于添加题目,用户可以输入题目的具体信息,然后将其存储在题库中。删除题目需要用户输入题目的编号或其他能够唯一标识题目的信息,然后将其从题库中删除。修改题目需要用户输入要修改的题目编号或其他信息,然后可以选择修改题目的内容、选项或正确答案等。查询题目可以根据关键词或其他条件来搜索题库,找到相关的题目并显示出来。这些功能的实现需要合理运用C语言提供的数据结构和算法。 此外,考虑到C语言对数据的处理能力和功能的限制,可以使用文件来保存题库的数据。通过文件的读写操作,可以将题库的内容保存在磁盘上,下次运行程序时可以从文件中加载数据。 此程序的实现涉及到C语言的基本语法、数据结构和文件操作等方面的知识。需要编写供用户交互的界面,以及相应的操作代码。同时,为了程序的健壮性和可维护性,需要进行充分的错误处理和异常处理,保证程序能够正确地运行,并且在出现错误时给用户以合适的提示。 总之,编写一个大学C期末考试题库的程序是一个综合运用C语言知识的任务,需要设计合适的数据结构,实现各种功能的代码,保证程序的稳定性和可维护性。 ### 回答2: 大学C期末考试题库编写程序题是一个具有挑战性的任务,需要遵循一定的步骤和规范来完成。以下是一种可能的实施方案: 首先,我们需要明确题库的内容和题型。题库可以包含多个不同的题型,如选择题、填空题、判断题、编程题等。根据每种题型的要求和特点,确定相应的数据结构和算法用以存储和操作题目信息。 在编写程序之前,首先需要进行题目的数据收集。可以通过各种途径收集题目,包括教材、网络资源、教师出题以及同学们的反馈等。确保题目的质量和难度适中,且涵盖了所学的知识点。 根据题目的特点,选择合适的数据结构和算法进行存储和操作。对于选择题和判断题,可以使用数组或链表来表示题目和选项,并根据用户的选择来判断答案是否正确。对于填空题,可以使用字符串或数组来存储答案,并与用户输入的答案进行比较。对于编程题,可以使用字符串或文本文件来存储题目描述和测试用例。 在实现这些数据结构和算法时,需要考虑到程序的效率和可维护性。可以使用适当的数据结构和算法来优化程序的运行时间和空间复杂度,并添加必要的注释和文档来解释程序的逻辑和使用方法。 最后,还需要设计一个用户界面来展示题目和接收用户的答案。可以使用图形界面(GUI)或命令行界面(CLI)来实现,具体取决于使用的编程语言和平台。 总结起来,大学C期末考试题库编写程序题需要明确题目要求、收集题目数据、选择合适的数据结构和算法、实现功能和界面,并考虑到程序的效率和可维护性。通过遵循这些步骤和规范,可以成功地完成题库编写程序题的任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值