} }
11.编写程序,按照指定长度生成动态数组,用随机数对数组元素赋值,然后逆置该数组元素。输出逆置前后的数组元素序列。
解答:就地逆置可以采用对称位置元素交换的方法。请参阅第4题判回文算法。程序略。
12.把一个字符串插入到另一个字符串中指定位置。
解答:本题应该注意源串(被插串)的允许长度,考虑当源串定义的长度不够时的处理方法:
(1)串截断。即仅保留源串允许长度的字符; (2)重新申请空间,保存插入后的字符串。 程序略。
13.把某班学生的姓名和学号分别存放到两个数组中,从键盘上输入某一学生学号,查找该学生是否在该班,若找到该学生,则显示出相应的姓名。
解答:略。
14.把一组C++关键字存放到一个二维数组中,找出这些关键字的最小者。 解答:需使用字符串处理函数。程序略。
15.使用指针函数编写程序把两个字符串连接起来。 解答:略
第5章 类与对象
5.1 选择题
第7章 1. 在下列结构变量的定义中,不正确的是( d )。
36
(a) struct employee
{ char name[ 20 ] ; long code ;
} emp ;
(c) struct employee
{ char name[20]; long code; } ;
employee emp; (d) struct
{ char name[20]; long code;
} employee; employee emp;
(b) struct
{ char name[ 20 ] ; long code ;
} emp ;
37
2.已知有职工情况结构变量emp定义为: struct employee { char name[ 20 ] ; long code ; struct
{ int year ; int month ; int day ;
} birth ; } emp ;
下列对 emp 的 birth 正确赋值方法是( d )。 (a) year = 1980 ; month = 5 ; day = 1 ;
(b) birth.year = 1980 ; birth.month = 5 ; birth.day = 1 ; (c) emp.year = 1980 ; emp.month = 5 ; emp.day = 1 ;
(d) emp.birth.year = 1980 ; emp.birth.month = 5 ; emp.birth.day = 1 ;
3.假定有以下声明和定义,则下面引用形式错误的是( b )。 struct student { int num ;
float score ;
} stu[3] = {{1001,80},{1002,75},{1003,91}}, *p = stu ;
(a) p->num (b) (p++).num (c) (p++)->num (d) (*p).num
4.下列四个运算符中,优先级最低的是( a )。
(a) ++ (b) . (c) -> (d) ()
5.若有以下声明和定义,则下列错误的引用是( d )。 struct worker { int no ;
char name[ 20 ] ; } w, *p = &w ;
(a) w.no (b) p->no (c) (*p).no (d) *p.no
6.若有以下声明和定义,则下列引用非法的是( d )。 struct data { int n;
float score; data *q ; };
2
data a[3] = {1001,87,&a[1],1002,75,&a[2],1003,90,&a[0]}; data *p = a;
(a) p->n++ (b) (*p).n++ (c) ++p->n (d) *p->n
7.关于类和对象不正确的说法是( c )。
(a) 类是一种类型,它封装了数据和操作 (b) 对象是类的实例 (c) 一个类的对象只有一个 (d) 一个对象必属于某个类
8.在类定义的外部,可以被访问的成员有( c )。
(a) 所有类成员 (b) private或protected的类成员
(c) public的类成员 (d) public或private的类成员
9.关于this指针的说法错误的是( a,d )。 (a) this指针必须显式说明
(b) 当创建一个对象后,this指针就指向该对象 (c) 成员函数拥有this指针 (d) 静态成员函数拥有this指针
10.声明一个类的对象时,系统自动调用( b,d )函数;撤消对象时,系统自动调用( c )函数。
(a) 成员函数 (b) 构造函数 (c) 析构函数 (d) 复制构造函数
11.下面对构造函数的不正确描述是( b )。
第7章 (a) 系统可以提供默认的构造函数 (b) 构造函数可以有参数,所以也可以有返回值 (c) 构造函数可以重载
(d) 构造函数可以设置默认参数
12.下面对析构函数的正确描述是( a,c )。
(a) 系统可以提供默认的析构函数 (b) 析构函数必须由用户定义
(c) 析构函数没有参数 (d) 析构函数可以设置默认参数
13.对静态成员的不正确描述是( c,d )。 (a) 静态成员不属于对象,是类的共享成员 (b) 静态数据成员要在类外定义和初始化
(c) 调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
(d) 只有静态成员函数可以操作静态数据成员 14.下面选项中,不是类的成员函数为( c )。
(a) 构造函数 (b) 析构函数 (c) 友元函数
3
(d) 复制构造函数
15.下面对友员的错误描述是( d )。 (a) 关键字friend用于声明友员
(b) 一个类中的成员函数可以是另一个类的友员 (c) 友员函数访问对象的成员不受访问特性影响 (d) 友员函数通过this指针访问对象成员
5.2 阅读下列程序,写出执行结果
1. #include < iostream.h >
struct data { int n ; float score ; } ; void main()
{ data a[3] = { 1001,87,1002,72,1003,90 } , *p = a ; cout << (p++)->n << endl ; cout << (p++)->n << endl ; cout << p->n++ << endl ; cout << (*p).n++ << endl ; }
答案: 1001 1002 1003 1004
2. #include < iostream.h >
struct employee { char name[ 20 ] ; char sex ; } ;
void fun( employee *p ) { if( (*p).sex == 'm' ) cout << (*p).name << endl ; }
void main()
{ employee emp[5] = { \ int i ;
for( i=0; i<3; i++ ) fun( emp+i ) ; }
'm' } ;
4