2008秋
—、选择题(用答题卡答题,答案依次填在21~30答题号内 21. 以下关于逻辑运算的描述中,正确的是________。 A. 所有的逻辑运算都是双目运算,其优先级相同
B. 逻辑运算中存在双目运算和单目运算,其优先级相同 C. 所有的逻辑运算都是双目运算,其优先级各不相同
D. 逻辑运算中存在双目运算和单目运算,其优先级各不相同
22. 对于while和do…while循环语句,以下描述正确的是________。
A. do…while语句中的循环体至少执行一次 B. 两个语句中循环体可能都不执行 C. while语句中的循环体至少执行一次 D. 两个语句中的循环体至少执行一次 23. 以下说明语句中,不存在语法错误的是 ________。 A. char s1[4]={―a‖,‖b‖,‖c‖}; B. char s2[4]={?a‘,‘b‘};
C. char s3[]={?I am a student‘}; D. char s4[14]={―I am a student‖}; 24. 设变量a,b,c为整型变量,以下选项中存在语法错误的是________。 A. c=a+++b; B. c=a+b++; C. c=b++=c++; D. c=++a=b++; 25. 设有程序段: x=-1;
if(a!=0) {if(a>0) x=1;} else x=0; 该程序段表示的数学函数关系是________。
-1 (a<0) 1 (a<0)
A. x= 0 (a=0) B x= -1 ( a=0) 1 (a>0) 0 (a>0)
0 (a<0) -1 (a<0)
C. x= -1 (a=0) D x= 1 ( a=0) 1 (a>0) 0 (a>0)
26. 以下关于两个同类型指针变量的叙述中,在一定条件下,运算结果没有实际意义的是________。
A. 两个指针变量可以互相赋值 B. 两个指针变量进行比较运算 C. 两个指针变量进行减法运算 D. 两个指针变量进行加法运算 27. 下列有关构造函数的叙述中,正确的是________。
A. 类的构造函数不能重载 B. 任何一个类必定有构造函数
C. 可以定义没有构造函数的类 D. 任何一个类必定有一个缺省的构造函数 28. C++中运算符重载可以改变________。
A. 运算符的优先级 B. 运算符的结合性
C. 运算符实现的功能 D. 运算符的操作数的个数
29. 以下关于基类指针和派生类指针的叙述中,不正确的是________。 A. 基类指针可以指向它的公有派生类的对象
B. 基类指针可以指向它的多次派生后的派生类的对象 C. 派生类的指针不能指向基类的对象
江苏省计算机二级复习资料第31页 共70页
D 若基类指针指向派生类的对象,通过该基类指针可以访问派生类对象的所有成员 30. 以下关于友元函数的叙述中,正确的是________。 A. 友元函数不能访问类的私有成员 B. 友元函数破坏了类的封装性和隐藏性 C. 友元函数的使用与类的成员函数相同 D. 友元函数的实现必须在类的说明中定义
二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行) ●基本概念题,共5分
1. 设有语句:int a=5,b=6,c;c=!a&&b++;执行以上语句后,变量b的值为_ (1 ) 。
2. 在定义派生类时,如果没有指定基类的派生(继承)方式,则缺省(默认)的继承方式是_ _(2)
3. C++中编译预处理包括:文件包含、宏和_ _(3) 。
4. 要将一个函数定义为内联函数时,通常在定义函数时使用关键字_ _(4) 。 5. C++中表达式:‖I am a student‖的值为该字符串的_ _(5) 。 ●阅读程序题,共13分 6. [程序] (2 分) #include
int t=a[0];
a[0]=a[1]; a[1]=t;
cout<
void main(void) {
int b[2]={300,500}; f(b);
cout<
程序输出的第一行为 _(6) ,第三行为 _(7) 7. [程序] (2分) #include
static int m=1; m=a*m; return m; }
void main(void) {
for(int i=2;i<=4;i++) cout< 程序输出的第一行为 _(8) ,第三行为 _(9) 。 江苏省计算机二级复习资料第32页 共70页 8. [程序] (2 分) #include int sum=0; for(int i=0;i<3;i++) for(int j=0;j<3;j++) { if(a[i][j]>0) continue; sum+=a[i][j]; } return sum; } int f2(int a[3][3]) { int sum=0; for(int i=0;i<3;i++) for(int j=0;j<3;j++) { if(a[i][j]<0) break; sum+=a[i][j]; } return sum; } void main(void) { int b[3][3]={{1,2,3},{7,-12,-13},{-20,9,-5}}; int s1,s2; s1=f1(b); s2= f2(b); cout< 程序输出的第一行为 _(10) ,第二行为 _(11) _。 9. [程序] (3 分) #include if(n==1) x[n]=3; else x[n]=n+f(x,n-1); cout< void main(void) { int b[5]={3,4,5,6,0}; f(b,3); 江苏省计算机二级复习资料第33页 共70页 for(int i=0;i<5;i++) cout< 程序输出的第一行是 _(12) ,第二行是 _(13) ,第三行是 _(14) 。 10. [程序](2 分) #include A(int a) { x=++a;} ~A(){cout< class B:public A{ int y; public: B(int b):A(b ){y=get( )+b;} B( ):A(5){ y=6; } ~B(){cout< void main(void) { B b( 5 ); } 程序输出的第一行是 (15) ,输出的第二行是 (16) 11. [程序] (2 分) #include virtual void f(){cout< class B:public A{ int y; public: B(int x,int y=1):A(x) { this->y=y; } void f(int a) {cout< 江苏省计算机二级复习资料第34页 共70页 void main(void) { A a1(10),*pa; B b1(20,30); a1.f(); pa=&a1; pa->f(); pa=&b1; pa->f(); } 程序输出的第二行是 (17) ,输出的第三行是 (18) 。 ●完善程序题,共12分 12. 以下程序的功能是:将两个字符串分别输入到s1 和s2 中,并使s2中的字符按升序排列(用函数sort()实现排序)。然后,依次从s1中取一个字符插入到s2中,并使s2中的字符保持升序。函数insert(char *p,char c)的功能是将字符c插入到p所指向的字符串中,使p所指向的字符串保持升序。函数merge(char *p1,char *p2)依次从p2所指向的字符串中取出一个字符,并插入到p1所指向的字符串中。 [程序] (4分) #include int len=strlen(s); for(int i=0;i return s; } void insert(char *p,char c) { char *p1=p; int len=strlen(p); while(*p1 (21) ; } 江苏省计算机二级复习资料第35页 共70页