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

来源:互联网 发布:淘宝二级页面打不开 编辑:程序博客网 时间:2024/06/09 13:41

1.在32位操作系统gcc编译器环境下,下面程序的运行结果为()

#include <iostream>using namespace std;class A {public:    int b;    char c;    virtual void print() {        cout << "this is father’s fuction! " << endl;    }};class B: A {public:    virtual void print() {        cout << "this is children’s fuction! " << endl;    }};int main(int argc, char * argv[]) {    cout << sizeof(A) << "" << sizeof(B) << endl;    return 0;}

  • 12 12
  • 8 8
  • 9 9
  • 12 16


答案 A

考虑一下对齐,以及虚函数表




2.写出下列程序的运行结果。

#include "stdio.h"int sum(int a){    auto int c = 0;    static int b = 3;    c += 1;    b += 2;    return (a + b + c);}int main(){    int i;    int a = 2;    for (i = 0; i < 5; i++)     {         printf("%d,", sum(a));     } } 


  • 6,8,10,12,14,
  • 8,10,12,14,16,
  • 10,12,14,16,18
  • 12,14,16,18,20

答案:B

水题。。。




3.在小端序的机器中,如果:

union X{int x;char y[4];};

如果:

X a;a.x=0x11223344;//16进制

则:______
  • a.y[0]=11
  • a.y[1]=11
  • a.y[2]=11
  • a.y[3]=11
  • a.y[0]=22
  • a.y[3]=22

答案 : D

union共用同一段内存



4.下列给定程序中,函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,接着把a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放在a[2]中,把a索取数组元素中的次大值放在a[3],以此类推。 
例如:若a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7;按规则移动后,数据排列为:1,9,2,8,3,7,4,6,5。形参n中存放a所指数组中数据的个数。
规定fun函数中的max存放的当前所找的最大值,px存放当前所找最大值得下标。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 

试题程序。
#include<stdio.h>#define N 9void fun(int a[ ], int n){    int i, j, max, min, px, pn, t;    for (i = 0; i < n - 1; i += 2)    {         max = min = __;        px = pn = i;        for (j = i + 1; j < n; j++)        {             if (max <  __)            {                max = a[j];                px = j;            }             if (min > __ )            {                min = a[j];                pn = j;            }        }        if (pn != i)        {            t = a[i];            a[i] = min;            a[pn] = t;            if (px == i)                px = pn;        }        if (px != i + 1)        {            t = a[i + 1];            a[i + 1] = max;            a[px] = t;        }    }}int main( ){    int b[N] = {9, 1, 4, 2, 3, 6, 5, 8, 7};    printf("\nThe original data:\n");    for (int i = 0; i < N; i++)        printf("% 4d", b[i]);    printf("\n");    fun(b, N);    printf("\nThe data after mocinng \n");    for (int i = 0; i < N; i++)        printf("% 4d", b[i]);    printf("\n");}

  • 0 a[i] a[i]
  • a[i] a[j] a[j]
  • 0 a[j] a[j]
  • a[i] a[i] a[i]


答案:B


8.如何引用一个已经定义过的全局变量?

  • 用引用头文件的方式
  • 用extern关键字方式
  • 使用static方式


答案:A B


9.std::vector::iterator重载了下面哪些运算符?

  • ++
  • >>
  • *(前置)
  • ==


答案 : A C D

可以在VS里查一下 iterator的实现代码


10.指出下面程序哪里可能有问题?

class CBuffer{    char * m_pBuffer;    int m_size;    public:        CBuffer()        {            m_pBuffer=NULL;        }        ~CBuffer()        {            Free();        }        void Allocte(int size) (1) {            m_size=size;            m_pBuffer= new char[size];    }    private:        void Free()        {            if(m_pBuffer!=NULL) (2)            {                delete m_pBuffer;                m_pBuffer=NULL;            }        }    public:        void SaveString(const char* pText) const (3)        {            strcpy(m_pBuffer, pText); (4)        }        char* GetBuffer() const        {            return m_pBuffer;             }     }; void main (int argc, char* argv[]){    CBuffer buffer1;    buffer1.SaveString("Microsoft");    printf(buffer1.GetBuffer());}

  • 1
  • 2
  • 3
  • 4

答案: C D

1处没有对传入的参数做合法性检测,为什么算是对的?!






1 0
原创粉丝点击