C/C++专项练习 (四)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011694809/article/details/48999299

      之前好长一段时间都在学习cocos2d-x引擎的使用,发现里面好多地方用到了C++11,现在打算深入学习一下这方面的知识,顺便在牛客网上面多刷点c/c++方面的题,算做一次复习吧!  

        

1.全局变量可不可以定义在可被多个.C文件包含的头文件中?

A  可以

B 不可以



答案:A
解析:如果使用static关键字,则变量只在一个头文件中赋初值



2.有以下程序
<span style="font-size:18px;">#include<stdio. h>
int fun(char *s)
{ 
    char *p=s;
    while(*p !='\0') p++;
    return(p-s);
}
main()
{ 
    printf("%d\n",fun("goodbye!"));
}</span>

程序的输出结果是?


A.    0
B.    6
C.    7
D.    8


答案:D
解析:初始位置到结束位置,总共8个(带上最后的‘!号’)



3.“引用”与指针的区别是什么?
  • 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
  • 引用通过某个引用变量指向一个对象后,对它所指向的变量间接操作。程序中使用引用,程序的可读性差;而指针本身就是目标变量的别名,对指针的操作就是对目标变量的操作。
  • 指针比引用更节省存储空间
  • 以上都不正确

答案:A
解析:指针和引用的区别有很多,具体可以参考《C++Primer》,不过,指针实质上是按值传送的,即,传递一个指针的副本!


4.若有以下程序
<span style="font-size:18px;">#include < stdio. h > 
void f( int x)
{
    if(x > = 10)
    { 
        printf( "%d - ",x%10); f(x/10 );
    }
    else
        printf( " % d" , x);
}
main()
{ 
    int z = 123456;
    f(z);
}</span>


则程序的输出结果是?


A  6-5-4-3-2-1-

B 6-5-4-3-2-1

C 1-2-3-4-5-6

D 1-2-3-4-5-6-


答案: B

解析:水题,考察函数的递归调用




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

A. 虚函数的作用是实现了继承性

B. 虚函数的作用就是实现“动态联编”,也就是在程序的运行阶段动态地选择合适的成员函数

C. 和类的静态成员函数与非类的成员函数相比,虚函数的效率较低

D. 要正确的实现虚函数,只能用一个基类的指针或者引用来指向派生类对象


答案:A 
解析:虚函数的作用是实现了多态性。准确的说,是动态的多态性。那什么是静态的多态性呢?函数重载、运算符重载。。。



6.以下程序的输出结果为

<span style="font-size:18px;">#include "stdio.h"
int func(int x, int y)
{
    return (x + y);
}
int main()
{
    int a = 1, b = 2, c = 3, d = 4, e = 5;
    printf(" % d\n", func((a + b, b + c, c + a), (d, e)));
     
    return 0;
}</span>

A     15

B     5

C     9

D     出错


答案:C
解析:水题,逗号运算符 表 最后一项



7.下面程序运行的结果是()
<span style="font-size:18px;">#include<stdio.h>
void add(int *p)
{
    (*p)++;
    printf("%d",*p);
    if (*p>5)
    {
        return;
    }
    add(p);
}
int main()
{
    int i=0;
    add(&i);
    return 0;
}</span>


  •    12345
  •    123456
  •    111111
  •     未知

答案:B
解析:进入add()函数之后,直到输出6,才退出递归


8.关于操作系统heap与stack说法中,正确的是()。
  •    stack由编译器自动分配和释放,存放函数的参数值,局部变量,全局变量的值
  •    heap一般由程序员分配和释放,若程序员不释放,可能会造成操作系统的内存泄露
  •    stack由系统自动分配,无需程序员干涉,heap需要手动申请
  •    heap与stack都会在初始大小空间用满时,系统自动增加其大小

答案:B
解析:什么是heap?举个栗子,你用new和delete操作的就是堆!



9.以下涉及到内存管理的代码段中,有错误的是:

  • int *a=new int(12);
    //..... 
    free(a);
    
  • int *ip=static_cast<int*>(malloc(sizeof(int)));
    *ip=10;
    //.....
    delete ip;
  • double *a=new double[1];
    //.... 
    delete a;
  • int *ip=new int(12);
    for(int i=0;i<12;++i){
    ip[i]=i;
    }
    delete []ip;


答案:A B D
解析:new和delete对应,malloc和free对应,所以A B 错误。

至于D,int *ip=new int(12)指的是,声明一个整形指针,初始化其值为12,而如果是  int *ip=new int[12],指的是,声明一个包含12个元素的数组。



10.请问 func(0x11530828)的返回值是?

<span style="font-size:18px;"> int func(unsigned int i) {
unsigned int temp = i;
 temp = (temp & 0x55555555) + ((temp & 0xaaaaaaaa) >> 1);
 temp = (temp & 0x33333333) + ((temp & 0xcccccccc) >> 2);
 temp = (temp & 0x0f0f0f0f) + ((temp & 0xf0f0f0f0) >> 4);
 temp = (temp & 0x00ff00ff) + ((temp & 0xff00ff00) >> 8);
 temp = (temp & 0x0000ffff) + ((temp & 0xffff0000) >> 16); 
 return temp;
 }
请问 func(0x11530828)的返回值是:</span>

答案:9
解析:算了好一阵,结果还是错的。。。。













阅读更多

没有更多推荐了,返回首页