2系,611班C++强化训练试卷B
(1) 本卷中的选择题,凡未注明(多选),均只有一个正确答案;
(2) 所有答题均应填写在答题纸上对应的序号栏内,仅写在试题栏中不予评分;
(3) 答题时,要求书写工整,如果字迹过于潦草、模糊不清造成无法辨认,视为错答;
(4) 答题结束后,请交答题纸。保留试卷,以备课堂使用。
一.选择题(25分)
1.一幅具有真彩色(24位)、分辨率为1024╳768的数字图象,在没有进行数据压缩时,它的数
据量大约是(1) 。
A.900KB B. 18MB C. 3.75MB D. 2.25MB
2.已知X的补码为10011000,则它的原码是(2)
A. 01101000
B. 01100111
C. 11101000
D. 10011000
3.IP地址是一串很难记忆的数字,于是人们开发了(3) ,该系统给主机赋予一个用字母代
表的名字,并负责IP地址与名字之间的转换。
A.DNS域名系统B.WINDOWS NT系统
C.UNIX系统D.FTP系统
4.下面是关于计算机中定点数和浮点数的一些叙述,正确的是(4) 。
A.浮点数是既有整数部分又有小数部分的数,定点数只能表示纯小数
B.浮点数的尾数越长,所表示的数的精度就越高
C.定点数可表示的数值范围总是大于浮点数所表示的范围
D.浮点数使用二进制表示,定点数使用十进制表示
5.系统软件是给其他软件提供服务的程序集合,下面的叙述中错误的是(5) 。
A.系统软件与计算机硬件有关。
B.在通用计算机系统中系统软件几乎是必不可少的。
C.操作系统是系统软件之一。
D.IE浏览器也是一种系统软件。
6.微机硬件系统中地址总线的宽度(位数)对(6) 影响最大。
A. 存储器的访问速度
B. CPU可直接访问的存储器空间大小
C. 存储器的字长
D. 存储器的稳定性
7.企业内部网是采用TCP/IP技术,集LAN、W AN和数据服务为一体的一种网络,它也称为
(7) 。
A. 局域网
B. 广域网
C. Intranet
D. Internet
8.下列网络协议中,不用于收发电子邮件的是__(8)____。
A. IMAP
B. POP3
C. SMTP
D. FTP
9.Internet使用TCP/IP协议实现了全球范围的计算机网络的互连,连接在Internet上的每一台主
机都有一个IP地址,下面不能作为IP地址的是_ (9) 。
A.201.109.39.68
B. 120.34.0.18
C.21.18.33.48
D.127.0.257.1
10.假设某用户上网时输入https://www.sodocs.net/doc/0117789132.html,,其中的http是(10) 。
A.超文本传输协议
B. 文件传输协议
C. 计算机主机域名
D. TCP/IP协议
11.若定义函数
int f(int x) {x++; return x;}
执行以下语句:
int a=5; f(a)+f(a);
则a的值是(11)。
A.5 B. 6 C. 7 D.8
12.以下的函数原形说明中存在语法错误的是(12)。
A.void f(int a ,int) B. void f2(int ,int);
C. void f3(int , int =5)
D. int f4(int x ; int y)
13.对于基类中的private成员,其在公有派生类中的访问权限为(13)。
A.不可访问 B. private
C. protected
D. public
14.下面关于基类与派生类的叙述正确的是(14)。
A.派生类对象不能赋给基类对象
B.派生类对象的地址不能赋给其基类的指针变量
C.基类对象不能赋给派生类对象
D.基类对象的地址能赋给派生类的指针变量
15.下列有关运算符重载的叙述正确的是(15)。
A.非静态成员函数重载运算符时带this指针
B.友元函数重载运算符时带this指针
C.成员函数与友元函数重载运算符时都不带this指针
D.用成员函数与友元函数重载同一运算符时,两者的参数类型与参数个数相同
16.设有以下说明语句:
char s1[20]=”hello”,s2[20]=”China”,const char *ptr=s1;
以下语句中不符合C++语法规则的语句是(16)
A.strcpy(s2 , ptr) B. ptr=s2 C. ptr=ptr+4 D. *ptr =*s2
17.设有类的定义:
class M{
public:
int *v;
M( ){}
M(int i ){v=new int(i) ; }
};
下列表示中,定义该类的对象m对其成员v进行正确操作的是(17)。
A.M m;m.v=10 B. M m ; *m.v=10
C. Mm; m.*v=10
D. M m(10)
18.若有“char p[]=”A\OBC\ODBC\n”;”,则strlen(p+4)的值是(18)。
A.5 B. 2 C. 1 D. 0
19.设函数声明语句中的参数表为(int &a , int &b ,int c),函数体中a,b,c三个变量的值都发生变
化;主函数中调用此函数的实参表为(x,y,z),调用函数语句执行后,以下叙述正确的是(19)。
A. 变量x和y的值发生变化
B. 变量x和y的值不发生变化
C. 变量x、y、z的值都发生变化
D. 只有变量z的值发生变化
20.以下选取项正确的是(20)。
A.char *a=”china” ; 等价于char *a; *a=”china”;
B.char str[]=”china”; 等价于char str[10]; str[] = {“china”};
C.char c[4]=”abc”;d[4]=”abc” ; 等价于char c[4]=d[4]=”abc”;
D.char *s=”china” ; 等价于char *s; s=”china”;
21.以下选项中错误的是(21)。
A.派生类可以继承多个基类
B.抽象类必须是虚基类
C.派生类可以有多个虚基类
D.可以有多个派生类继承同一个基类
22.若定义类A:
class A{
public:
A(int x=0);
…
};
执行语句“A a(4) , b[3] ,* p[2] ;”,则自动调用该类的构造函数的次数为(22)。
A.6 B. 4 C. 3 D. 1
23.若有类定义
class Term{
… …
public:
int addterm( );
};
作用域运算符::正确使用的是(23)。
A)int Term:: addterm( ){…}
B)int::Term addterm( ){…}
C)int Term addte rm::( ){…}
D)int Term addterm( )::{…}
24.如果定义了字符变量ch,以下(24)语句可以实现将键入的字符(包括空格、回车及间隔
符)赋予ch。
A.ci n>>ch
B. cin>>get(ch)
C. cin.get(ch)
D. ch=get()
25.设有说明:static int a[][2]={{1,2},{3,4,}}; int *pa,(*pb)[2];则执行语句
pb=a; pa=pb[0];后,(*(pa+3))值是: (25)
A. 4
B. 2
C. &a[1][0]
D. &a[0][1]
二.填空(15分)
1.函数重载是指函数名相同,但函数的(1)或函数的(2)不同。
2.在C++中,编译预处理包含三方面的内容,它们分别是包含文件、(3)和(4)。
3.在C++中,运算符的重载有两种实现方法,一种是通过成员函数来实现,另一种则是通过(5)来实现。
4.当一个类只能作为派生类的基类,不能用来说明这种类的对象时,这种类称为(6)。
5.在C++中函数的参数传递方式有三种:第一种是值传递; 第二种是指针传递; 第三种是
(7)传递;
6.设有语句”int a=5,b=7,c=15,d; d=b>a||(c=a+b)”;则c的值是(8)。
7.任何一个类至少包含两个构造函数,一个是缺省的构造函数或用户显式定义的构造函数。另一个是(9)。
8.若有宏定义:#defin X 2
#defin Y(n)((X+1)*n)
则执行语句:z=2*(X+Y(X+2));后,z的值是: (10) 。
9. C++允许用户利用fstream类来定义非标准的文件对象。当被定义的对象是调用重载运算符”>>”或”<<”来读取或写入文件时,这个文件必定是__(11)__文件。
10.设有说明语句:
char s[]=”123\t456\00089”,*p=s;
执行以下两个语句:
cout<<*(p+5)<<’\n’;
cout<<(p+5) <<’\n’;
则输出分别为(12)和(13)。
11.在C++中,将多态性分为静态多态性和动态多态性两种。函数重载属于(14),虚函数属于(15)。
三.阅读程序,回答问题(总共45分)
1.
#include
class A
{ int x,y;
public:
A(int a,int b){x=a; y=b; cout<<"ABC"<<'\t';}
A(){ x=3; y=4; cout<<"CBA"<<'\n';}
void Show()
{ cout<<"x="< ~A(){cout<<"XYZ"<<'\n';} }; void main(void) { A *s1=new A(1,2),*s2=new A; s2->Show(); delete s1; delete s2; } 问题一:本程序的执行后输出是 (1) (6分)问题二:如果将语句s2->Show()改为s1->Show(),执行结果是(2) (6分) 2.下面程序的输出是_(3)_ (1分) #include fun3(int x) {static int a=3; a=x; return(a); } void main() {int k=2,m=1,n; n=fun3(k); n=fun3(m+n); cout< } 3. #include class A { int x; public: void Show() { cout<<"x="< A(int a=10) { x=a; cout<<"A"<<'\n'; } ~A(){cout<<"~A"<<'\n';} }; void main(void) { A f; f.Show(); f=20; f.Show(); } 问题一:本程序共输出(4)行,依次是 (5) (5分) 4.以下程序第一行输出是__(6)__,第二行输出是___(7)___ (2分)#include void sub(int n){ int m, r ; if(n==0) {cout<<"**"< m=n/10; r=n%10; sub(m); cout<<"**"< cout<<"++"< } void main( ){ int a=1234; sub(a); cout<<"++"< 5. #include "iostream.h" class A{ public: virtual void fun(){cout<<"A::fun"<<'\t';} A(){fun();} void g(){fun();} }; class B:public A{ public: B(){fun();} void fun(){cout<<"B::fun"<<'\t';} }; void main() { B b; b.g(); } 问题:程序的输出依次是 (8) (3分) 6.写出执行下面小程序的输出结果(9)。(5分) void ac(float x); bc( ); int m=10; void main( ){ int i,s=0; float x; x=0.5; ac(x); for(i=0;i<4;i++){ s=s+bc(); cout<<``&``< } } void ac(float x){ int i=0; float s=0; while(i<40){ s=s+i*x; i=i+m; } cout< } bc( ){ static int s; s=s+2*m; cout<<``s=``< return s; } 7.下面程序的输出是_(10)_ 。(3分)#include "iostream.h" #define PR(ar) cout< void main() { int j,a[]={1,3,5,7,9,11,13,15},*p=a+5; for(j=3;j;j--) { switch(j) { case 1: case 2: PR(*p++);break; case 3: PR(*(--p)); default:; } } } 8.设有以下说明,请根据说明语句的顺序回答以下问题:(4分) 1) const float a=1; 2) float &x=a; 3) float b[3],&t=b[2]; 4) int &top=*new int; 5) const int *p=∑ 6) const char *const s1; 7) const float *const s2=b; 8) const float *const s3=&b; 9) enum grade{math,eng,phy,com}; 10) enm grade=math; 11) grade sum=math; 问题一:以上正确的说明语句是:(11) 问题二:含有正确表示引用类型说明的语句是:(12) 问题三:正确的常量说明语句是:(13) 问题四:正确说明枚举变量的语句是:(14) 9.执行下面的程序后,file1.txt中的内容是(15)(1分) #include char getonech(char s[]) { static int k; return s[k++]; } void main(){ char *s=”AB123AB”; ofstream f1(“file1.txt”); char ch; while(ch=getchar(s)) f1.put(ch); f1.close(); } 10.下面程序中编译有错误的语句的标号为(16)的语句(2分)#include class D{ int x,y; public: D(int a,int b=0){x=a;y=b;cout<<"a"< D(int a){x=a,y=0;cout<<"b"< void SetXY(int a,int b){x=a,y=b;} //C int GetX(){ return x ;} //D int GetY(){return y;} //E }; void main() { D a(3,3); //F D b(9); //G cout< } 其错误原因是:(17)。 A)形、实参个数不一致。 B)构造函数冲突。 C)缺少类型转换构造函数。 D)缺少拷贝构造函数。 11.阅读以下程序,完成以下选项 (2分) #include class test03{ int x,y; public: int right,bottom; test03(int a=10,int b=20) { x=a; y=b; cout< test03(int a, int b) { x=a; y=a-b; cout< }; void main(void) { test03 a(20,10),b; } 该程序(18) A.有错,因为对象a、b与构造函数的形参同名 B.有错,因为对象b没有对应的缺省构造函数可调 C.有错,因为构造函数不符合重载规则 D.正确,因为第一个构造函数是缺省构造函数,第二个是带参构造函数。执行结果为 20 10 10 20 在该程序中(19) A.将对象b写成b( )都是调用缺省构造函数 B.只有对象b改成b( )才是调用缺省构造函数 C.将对象a写成a( ),对象b写成b(20,10)才能正确调用 D.以上说法都不正确 四.完善程序(20分) 1.函数featch_int(char *ps ,int pi[])的功能是:将ps所指向的字符串中的连续数字作为一 个整数,依次取出整数并放到整形数组pi中,函数返回从字符串中取出的整数的个数.主函数中完成字符串的输入,并输出提取的所有整数。 例如:输入的字符串:“sfs345 fds456 df56j”,则输出:345 456 56 #include int featch_int(char *ps,int pi[]){ int len=0; while(*ps) if(!(*ps>='0'&&*ps<='9')) (1) ; else { int num=0; while( (2) ){ num=num*10+*ps-'0'; ps++; } (3) ; len++; } return (4) ; } void main( ){ char str[300]; int b[50],n,i; cout<<"请输入一个含有数字的字符串:\n"; cin.getline(str,200); n=featch_int( (5) ); cout<<"其中有"< for(i=0;i cout< if((i+1)%5==0) cout<<'\n'; } coud< } 2.已建立一条无序链表,head指向链首,链表上结点的数据结构为 Struct Node{ double num; Node next; }; 以下函数 sort(Node *head) 的功能是:将参数head所指向链表上的各个结点,按num值升序排序,并返回排序后链表的链着指针。 算法提示:先让h指向空链,依次从head所指向的链表上取下一个结点,然后将取下的结点插入到已排序的h所指向的链表上。 #include Node* sort(Node *head) { if(head==0) return head; Node *h,*p; h=0; while(head){ p=head; (6) ; Node *p1,*p2; if(h==0){ h=p; (7) ; } else if( (8)){ p->next=h; h=p; } else { p2=p1=h; while(p2->next && p2->num p1=p2; (9) ; } if( (10)){ p2->next=p; p->nex=0; } } } return h; } 3.以下程序实现一个由动态数组构成的线性表的类,在该类的线性表中存放若干个实数。通过重 载运算符实现两个线性对应元素间的赋值,重载提取运算符完成线性表的输入,重载插入运算符完成线性表的输出。 #include class List{ int size; double *list; public: List(int=1,double=0.0); ~List(){delete []list;}; List & operator=(const List&); friend ostream& operator<<(ostream &,List &); friend istream& operator>>(istream &,List &); }; List::List(int sz,double t){ size=sz; list= (11) ; for(int i=0;i } List & List::operator=(const List& v){ if(&v!=this){ delete[]list; size=v.size; list=new double[size]; for(int i=0;i } return *this; } (13) <<(ostream &os,List & v){ int i; for (i=0;i os< if((i+1)%8==0) os<<'\n'; } return os; } (14) >>(istream &is, List & v){ int i;