C/C++_lesson1~8测试

一: 下列代码,如果有错误, 指出错误原因并改错(20分)

1)

int  k = 20; 正确

int*p = &k; 正确

*k= *p;         错误             

int*p2 = &p;  错误

2)

float  s[] = { 2.1, 22, 44 }; 正确

float  s1 = s;       //数组名不可改变指向
        

3)

void   fun( int ns[10] )    //数组可能收取不全 

{

    int* p = ns;

}

4)

classA

{

    int x1;

    int x2;

};

A  a1;

cout<C++中用class定义的类中,其成员的默认存取权限是private;

5)

class A

{

    int x1;

    int x2;

};

A  a1;

A  *a2=&a1;

a2->x1=100;  //C++中用class定义的类中,其成员的默认存取权限是private;

cout<C++中用class定义的类中,其成员的默认存取权限是private;

二:填空(20分)

1)

int ns[5 ] = { 1, 3, 5 };

int*   p  = ns;

p++;

现在p[3]的值是:___0

__int *___    p2 = &(p[1] ); //填上p2的类型

2)

int ns[5] = { 1, 3, 5 };

___int__   p = ns[2];

___int*__   p2 = &p;

___int**__   p3 = &p2;

3)

int ns[5] = { 1, 3, 5 };

int*   p = &sn[1];

p[1]的值是:_5___

ns[3]的值是:___0___

sizeof(ns )的值是:___20____  // 数组大小

sizeof(p )的值是:___4____ // int 指针

4)

void   fun( int* pN )

{

   int f = 88;

   pN = &f;

   f++;

   *pN = *pN+1;

}

int k = 100;

fun(&k );

k的值是: ___100___

5)

__char*__  cs[] = { "a", "bob","c" }; ( 填写变量cs的类型 )

cs[1]的数是多少? ____bob___

cs[1][0]的值是多少? __b____  // 相当与一个二维数组

sizeof(cs )的值是多少?___12___

sizeof(cs[1] )的值是多少? __4____

三 :补齐代码  15分

1)

class Person

{

  public:

    int age;

    char name[100];

}

void   SetPersonName( Person*  p, char* pName )//设置p的姓名为pName

{

   //补齐代码 

}

int main()

{

   Person   ps[10];

   char*    names[] = { "jack", "rose", "tom","jacky", "tony" };

   SetPersonsName( ps, names, 5 ); //写出SetPersonsName函数

   return 0;

}

四 写出结果 10分

void   Make( char* pSrc,int len )

{

    char* p = pSrc;

    for( int n = 0; n < len; n++ )

    {

       if( p[n] == 'a' )

          p[n] = 'A';

    }

}

char  cs[] = "abcd";

Make(cs );

Printf(cs );

屏幕输出内容是:__________

五 选择题(有可能有多项选择)  15分

1) 以下对数组的定义正确的是________

a:数组名是指针

b:数组的内存被分配后, 它的内存长度是可以被改变的

c:数组名可以被重新赋值

d:用sizeof对数组名求大小, 可以得到数组的总内存大小

2) 下面的数组arr, 和arr[3]等价的表达是:_______

intarr[] = { 1, 2, 3, 4, 5, 6 };

int*p1 = arr;

int*p2 = &arr[1];

a:  p1[3]

b:  *( p1+2 )

c:  *( p2 + 2 )

d:  p2[2]

e:  ( &(arr[1] ) + 2 )[0]

3)下面的数组arr, 和arr+3等价的表达是:_______

intarr[] = { 1, 2, 3, 4, 5, 6 };

int*p1 = arr;

int*p2 = &arr[1];

a:  p1[3]

b:  &( p1[3] )

c:  &( arr[1] ) + 2

d:  ( &(arr[1] ) + 2 )[0]

e:  &( ( &(arr[1] ) + 2 )[0] )

六 按要求写代码  40分

1)写出一个函数StrRemoveSpace,要求实现将字符串中的所有空格全部删除( 10分 )

例如:

char   ns[100]="h e l l o ~";

StrReplace(ns);

Printf(ns );//屏幕的显示为 hello~

2)写一个函数StrReverse, 要求对字符串颠倒 ( 10 分 )

例如:

char   ns[] = "abcdef";

StrReverse(ns );

Printf(ns );//屏幕的显示为 fedcba

3)通过拷贝构造函数实现类A的深拷贝( 20 分 )

classA

{

  private:

    int n;

    char *pStr;

};

你可能感兴趣的:(C++语言学习,c++)