C语言/C++/数据结构牛客网刷题20200305

C语言

为了提高程序的运行速度,在函数中对于整型或指针可以使用()型的变量。

  • auto

  • register

  • static

  • extern

正确答案: B   你的答案: A (错误)

auto 变量类型推演,

register 建议编译器将该变量放入cpu,

static 静态变量,

extern 声明变量,常用于多文件需要使用同一变量时

通常情况下,变量的值是存取于内存之中,若使用CPU的寄存器,将局部变量值直接放于寄存器中,其存取速度远远高于对内存的存取速度,因此,使用cpu的寄存器可提高执行速率

若有说明: int a[][4]={0,0};则下面不正确的叙述是()。

  • 数组 a 的每个元素都可得到初值0
  • 二维数组 a 的第一维大小为1
  • 因为二维数组 a 中第二维大小的值除经初值个数的商为1,故数组 a 的行数为1
  • 有元素 a[0][0]和 a[0][1]可得到初值0,其余元素均得不到初值0

正确答案: D   你的答案: B (错误)

定义一个二维数组,这个数组的每一行有四个元素,一般行数是可以省略的 电脑会根据你的初始化自动计算行数。‘因为初始化只给了两个元素 所以行数为1’

 

请指出以下程序的错误:

void GetMemory(char **p, int num)
{
    if(NULL==p && num<=0)//1

        return;
    *p=(char*)malloc(num); 
    return;
}
void main(void){
    char *str=NULL;
    GetMemory(&str,80); //2
    if(NULL!=str){
        strcpy(&str,"hello"); //3
        printf(str);
    }
    return true; //4
}
  • 1

  • 2

  • 3

  • 4

正确答案: A C D   你的答案: A D (错误)

if(NULL==p && num<=0)//1  应该为 if(NULL==p || num<=0)
 strcpy(&str,"hello"); //3   应为 strcpy(str,"hello"); 
 return true; //4   与void冲突

下列哪些代码会调用一个DLL的 DllMain 函数

  • LoadLibraray(&quot;A.dll&quot;)

  • GetModuleHandle(0,&quot;A.dll&quot;,&amp;hDLL)

  • LoadLibraryEx(&quot;A.dll&quot;, NULL, LOAD_LIBRARY_AS_DATAFILE);

  • FreeLibrary(hDLL)

正确答案: A B D   你的答案: B C D (错误)

 

 

C++

下列运算符中,( )运算符在 C++ 中不能被重载。

  • &&

  • []

  • ::

  • new

正确答案: C   你的答案: C (正确)

类属关系运算符”.“、成员指针运算符”.*“、作用域运算符”::“、sizeof运算符和三目运算符”?:“以外,C++中的所有运算符都可以重载

关于SEH和c++异常处理,选项中说法错误的是(    )

  • SHE主要包括终止(finally)处理和异常(exception)处理,这些都是有操作系统实现的。

  • C++异常处理try catch可以捕获程序中所有的异常,比如下面这样的代码:int *p=0x0;*p=100;只要你给他加上try catch就可以轻松处理

  • c++中也可以使用SHE,比如这样:class A { public:     A(){};     ~A(){};     void test(){}; }; int _tmain(int argc, _TCHAR* argv[]) {     __try{ A a; a.test();} __except(1){} }

正确答案: A   你的答案: C (错误)

SEH主要包括:

  • Per-Thread类型SEH(也称为线程异常处理),用来监视某线程代码是否发生异常。
  • Final类型SEH(也称为进程异常处理、筛选器或顶层异常处理),用于监视整个进程中所有线程是否发生异常。在整个进程中,该类型异常处理过程只有一个,可通过SetUnhandledExceptionFilter设置。

下面关于类和对象的描述中,错误的是:

  • 类就是C语言中的结构体类型,对象就是C语言中的结构体变量

  • 类和对象之间的关系是抽象和具体的关系

  • 对象是类的实例,一个对象必须属于一个已知的类

  • 类是具有共同行为的若干对象的统一描述体

正确答案: A   你的答案: A C (错误)

有以下程序

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	vector<int> A(10);
	int count = 0, n;
	cout << "请输入n的值:";
	cin >> n;
	A.__________(n);
	for (int i = 2; i <= n; i++)
		if (i % 3 == 0 && i % 5 == 0) A[count++] = i;
	for (i = 0; i < count; i++)
		cout << A[i] << " ";
	cout << endl;
}

当键盘输入20,程序的运行结果是15,请为横线处选择合适的程序(      )

  • size

  • reserve

  • resize

  • length

正确答案: B C   你的答案: A C D (错误)

B  reserve(n)   调用reserve(n)后,若容器的capacity<n,则重新分配内存空间,从而使得capacity等于n

C  resize(n)   调整容器的长度大小,使其能容纳n个元素。如果n小于容器的当前的size,则删除多出来的元素。否则,添加采用值初始化的元素。

原来大小是10,I=15才会有A[count++]=15,所以要调整大小,而AD大小未发生变化

下面关于垃圾收集的描述哪个是错误的?

  • 使用垃圾收集的程序不需要明确释放对象

  • 现代垃圾收集能够处理循环引用问题

  • 垃圾收集能提高程序员效率

  • 使用垃圾收集的语言没有内在泄漏问题

正确答案: D   你的答案: A (错误)

答案:D  也会有内存泄露问题,例如访问资源文件,流不关闭,访问数据库等连接不关闭

java的垃圾收集机制主要针对新生代和老年代的内存进行回收,不同的垃圾收集算法针对不同的区域。所以java的垃圾收集算法使用的是分代回收。一般java的对象首先进入新生代的Eden区域,当进行GC的时候会回收新生代的区域,新生代一般采用复制收集算法,将活着的对象复制到survivor区域中,如果survivor区域装在不下,就查看老年代是否有足够的空间装下新生代中的对象,如果能装下就装下,否则老年代就执行FULL GC回收自己,老年代还是装不下,就会抛出OUtOfMemory的异常

内存泄露(Memory Leak)是指一个不再被使用的对象或者变量还在内存中占有存储空间。在C/C++语言中,内存泄露出现在开发人员忘记释放已分配的内存就会造成内存泄露。在java语言中引入垃圾回收机制,有GC负责进行回收不再使用的对象,释放内存。但是还是会存在内存泄露的问题。
内存泄露主要有两种情况:1.在堆中申请的空间没有释放。2.对象已不再被使用(注意:这里的不在被使用是指对程序来说没有用处,如数据库连接使用后没有关。但是还是存在着引用),但是仍然在内存中保留着。GC机制的引入只能解决第一种情况,对于第2种情况无法保证不再使用的对象会被释放。java语言中的内存泄露主要指第2种情况。
内存泄露的原因:1.静态集合类。如HashMap和Vector。这些容器是静态的,生命周期和程序的生命周期一致,那么在容器中对象的生命周期也和其一样,对象在程序结束之前将不能被释放,从而会造成内存泄露。2.各种连接,如数据库连接,网络连接,IO连接,不再使用时如果连接不释放容易造成内存泄露。3.***,释放对象时往往没有相应的删除***,可能会导致内存泄露。
内存溢出(OOM)是指程序在申请内存时没有足够的内存供使用,进而导致程序崩溃这是结果描述。内存泄露(Memory Leak)最终会导致内存溢出。

static 类型的变量,默认的初始化值是?()

  • 0

  • 空格符

  • 1

  • 随机变量

正确答案: A   你的答案: D (错误)

静态变量在没有显式初始化的时候会被初始化为0或者null

 

代码int i=3;i<<=4;i的值等于多少?()

  • 40

  • 110000(二进制)

  • 12

  • -48

正确答案: B   你的答案: B (正确)

<<是左移运算符的意思,左移运算符是用来将一个数的各二进制位全部左移若干位。

这里可以理解为把3化为2进制,然后统一左移4位。

3的二进制比如    0011    左移4位   110000 = 48

有如下程序段:


	#include "stdio.h"

class A
{
    public:
    A()
    {
        printf("1");
    }
    A(A &a)
    {
        printf("2");
    }
    A &operator=(const A &a)
    {
        printf("3");
        return *this;
    }
};
int main()
{
    A a;
    A b = a;
}

则程序输出为:

  • 12
  • 13
  • 无法确定
  • 编译出错

正确答案: A   你的答案: B (错误)

A a,定义一个对象,毫无疑问调用构造函数

A b=a,这是定义了对象b,且以a对b进行初始化,这个时候需要调用拷贝构造函数。

如果写成A a;A b;b=a;则是调用后面重载的赋值函数,这种情况应该输出113。

这个题主要考察赋值和初始化的区别。

下列代码片段的时间复杂度是多少:

function(int n)
{
    if(n == 1) return;
    for(int i = 1 ; i <= n ; ++i) {
        for(int j = 1 ; j <= n ; ++j) {
              printf("*");
              break;
          }
     }
}
  • O(n)
  • O(n^2)
  • O(1)
  • O(2n)

正确答案: A   你的答案: B (错误)

第二个for循环只执行一次,break只跳出一层循环

数据结构

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值