一: 下列代码,如果有错误, 指出错误原因并改错(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<<a1.x1<<endl; //在C++中用class定义的类中,其成员的默认存取权限是private;
5)
class A
{
int x1;
int x2;
};
A a1;
A *a2=&a1;
a2->x1=100; //在C++中用class定义的类中,其成员的默认存取权限是private;
cout<<a1.x1<<endl; //在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;
};