江苏计算机等级考试vc++冲刺模拟试题1 |
第二部分:Vc++程序设计 C++语言程序设计理论部分 一、选择题(30分) 21•设有定义“float y=5.16347;int x;”,则以下表达式中可以实现将y中的数值保留小 数点后2位,将第三位四舍五人的表达式是_____________ A.y=(y*100+0.5)/100.0 B.x=y*lOO+O.5,y=x/lOO.0 C.y=y*100+0.5/100.0 D.y=(y/100+0.5)*100.0 22.设有说明语句"int a=6;float b=l,c=l;",则表达式"c%=(b=a/=4),a+=3" 的值为_________ A.9 B. 2 3.关于字符串,以下说法正确的是 __________ A.字符串"abc\t\"op\\"中实际的字符个数为8 B.字符串是以0结尾的字符数组 C.sizeof("abc\O\"op\\")=3 D.strlen("abc\O\"op\\")=8 24.已定义"int a[5]={lOO,200,300,400,500};int *P1=&a[0]",若b=*++P1,则b和*P1的值分别为___。 A.100 200 B.200 25.下面给出的程序的输出结果不正确的是 _________ 。 A.char *sl,s2[]="123"; sl=s2; cout<<*sl;,结果:123 B. char *sl,s2[]="123";sl=s2; cout<<sl;结果:123 C.char *sl="123\0tear";cout<<s1;结果:123 D.char s1[]="567",s2[]=” 26.设有变量说明“int a[][2]={{2,5},{4,8}};int *pa,(*pb)[2];"则执行语句"pa=&a[0][0];pb=a;"后, (*(pa+1))与(*(pb+1))的值为:______ A.5,4 B.&a[1][0], 2 7.下列关于数组的应用中,__________是正确的。 A.int a[5]={1,2,3,4,5);int b[5];b=a; cout<<b: B.int a[5]={1,2,3,4,5);int b[5]; strcpy(a,b); cout<<b; C.char a[5]=” D.char a[5]=” 28.以下程序的输出为 #include<iostream.h> int w=3; int:fun(int): void main(void) { int w=10; cout<<fun(5)*w<<endl; } int fun(int k) { if(k==0) return w; return(fun(k-1)*k); } A.360 B. 2 9.下列对派生类的描述中______是不正确的 A.一个派生类可以作为另一个派生类的基类 B.派生类至少有一个基类 ” c:派生类的成员除了它自己的成员以外,还包含它的基类的成员 D.派生类中继承的基类的成员的访问权限到派生类保持不变 30.关于构造函数与析构函数的下列说法中正确的是: ①在类中构造函数与析构函数都有固定的函数名。 ②在类中构造函数与析构函数都有相同的作用。 ③在类中构造函数与析构函数都可以定义多个。 ④在类中构造函数与析构函数都可以有返回值。 ⑤在类中构造函数与析构函数的参数都可以有默认值。 A.①和② B.① C.④和⑤ D.③和⑤。 • 二、填空(30分) ●基本概念题(8分) 1.某类整数a满足的条件为:①a小于等于100 ②a大于等于10,③a的十位数是个位 数的2倍或个位数是十位数的2倍。 ,‘ ‘ + 请用一个逻辑表达式 ( 1 ) 将a表示出来。 2.c++中编译预处理有三种形式,分别是:______,___________,_____________ 3.面向对象程序设计语言的四个要素是:___________,__________________,_______________,__________。 ●阅读程序写结果(10分) 4.(1分)若有宏定义: #define A 2 #define B(n)(n*(A+2)/n*2) 则执行语句“int w=2;w*=2*(A*B(A+2))+3;"后,W的值为__________。 5.(1分)[程序] #include<iostream.h> #define N 5 void fun(); void main() { for(int i=1;i<N;i++) fun(); cout<<endl } void fun() { static int a; int b=2: cout<<(a+=3,a+b)<<" " } 运行结果为:( 10 ) 6.(3分)[程序] #include<iostream.h> void main() { char s[]="I am a student.You are a student too."; int a[26]={0); char *p=S; ’ while(*p++!=0) { if(*p>='A' && *p<='Z')a[*p-'A']++; else if(*p>='a' && *p<='z') a[*p-'a']++; } for(int i=0;i<26;i++) if(a[i]!=0)cout<<(char)(i+'a')<<":"<<a[i]<<endl; } 程序运行后出现的前三行结果为: ( 11 ) , ( 12 ) , ( 13 ) 7.(3分)[程序] #include<iostream.h> class Q { int x,y; static int z: public: Q(int a,int b){x=a+b;y=a*b;z+=x+y;} void show(){cout<<x<<'\t'<<y<<'\t'<<z<<endl;} }; int Q::z=10; void main() { Q ql(10,10); q1.show(); Q q2(20,20); q2.show(); q1.show(); } 程序运行后输出的第一、二、三行分别是 ( 14 ) , ( 15 ) ( 16 ) 8.(2分)[程序] #include<iostream.h> class AA { int x; public: int y; AA(int a,int b){y=b-a;x=y+y;} int showx(void){return x;) }; class BB:public AA { public: BB(int c):AA(C,c+c){); int showy(void){return y;) ); class CC:public AA { public: CC(int d):AA(d,d+d){); int showy(void){return y;) ); class DD:public BB,public CC { public: DD(int e):BB(e+50),CC(e-50){}; ); void main() { DD d(80); cout<<d.BB::showy()<<'\t'<<d.CC::showy()<<endl; cout<<d.BB::showx()<<'\t'<<d.CC::showx()<<endl; } 程序运行结果为: ( 17 ) , ( 18 ) ●完善程序(12分) 9.(4分)编写一个程序采用递归方法逆序放置a数组中的元素。 [方法说明]调用一个invert函数来进行数组逆置。invert(s,i,j)函数采用递归方法实 现,每次将S的第i个元素和第j个元素进行交换,直到i大于或等于j为止。 [程序] #include<iostream.h> ( 19 ) //函数invert()的原型说明 void main() { int a[10]={0,1,2,3,4,5,6,7,8,9),i; ( 20 ) //调用invert()函数 for(i=0;i<=9;i++) cout<<a[i]<<","; cout<<endl; void invert(int *s,int i,int j) { int t; if(i<j) { t=*(s+i); ( 21 ) *(s+j)=t; ( 22 ) } } 10.(4分)重载运算符“一=”,直接实现在一个字符串中删除某个字符的功能。例如: 字符串“Microsoft Visual C++6.O”与i做“一=”运算后的结果为“Mcrosoft Vsual C++ 6. [程序] #include<iostream.h> #include<string.h> class string { char*a; public: string(char *s) { if(s) { ( 23 ) strcpy(a,s); } else a=0; } ~string() { if(a) delete[ ]a; } string &operator -=(char c); void show() { cout<<a<<endl; } ( 24 ) //重载函数的定义 { char*p=a; while(*p) { if(*p==c) { for(char *q=p;*q;q++) ( 25 ) } else ( 26 ) } return *this; void main() { string sl("Microsoft Visual C++6.0") s1.show(); char cl='i': sl-=cl: s1.show(); } 答案: 1.D 2.A 3.B 4.D 5.C6.B 7.A 8.D 9.C10.B11.C12.B13.B14.C 15.A16.C 17.B 18.B19.B 20.A 21.B 22.D 23.A 24.B 25.A26.C 27.C 28.B 29.D 30.B 二、填空答案 ●基本概念题(8分) 1.某类整数a满足的条件为:①a小于等于100 ②a大于等于10,③a的十位数是个位 数的2倍或个位数是十位数的2倍。 请用一个逻辑表达式 ( a<100 && a>=10 &&(a/10==(a%10)*2||2*(a/10)==(a%10)) ) 将a表示出来。 2.c++中编译预处理有三种形式,分别是:__包含文件____,__宏定义___ ______,____条件与编译_________ 3.面向对象程序设计语言的四个要素是:_封装性__________,__继承与派生________________,__多态性_____________,__重载________。 ●阅读程序写结果(10分) 4.(1分)若有宏定义: #define A 2 #define B(n) (n*(A+2)/n*2) 则执行语句“int w=2;w*=2*(A*B(A+2))+3;"后,W的值为_____86_____。 5.(1分)[程序] #include<iostream.h> #define N 5 void fun(); void main() { for(int i=1;i<N;i++) fun(); cout<<endl } void fun() { static int a; int b=2: cout<<(a+=3,a+b)<<" " } 运行结果为:( 5 8 11 14 ) 6.(3分)[程序] #include<iostream.h> void main() { char s[]="I am a student.You are a student too."; int a[26]={0); char *p=S; ’ while(*p++!=0) { if(*p>='A' && *p<='Z')a[*p-'A']++; else if(*p>='a' && *p<='z') a[*p-'a']++; } for(int i=0;i<26;i++) if(a[i]!=0)cout<<(char)(i+'a')<<":"<<a[i]<<endl; } 程序运行后出现的前三行结果为: ( a:4 ) , ( d:2 ) , ( e:3 ) 7.(3分)[程序] #include<iostream.h> class Q { int x,y; static int z: public: Q(int a,int b){x=a+b;y=a*b;z+=x+y;} void show(){cout<<x<<'\t'<<y<<'\t'<<z<<endl;} }; int Q::z=10; void main() { Q ql(10,10); q1.show(); Q q2(20,20); q2.show(); q1.show(); } 程序运行后输出的第一、二、三行分别是 ( 20 100 130 ) , ( 40 400 570 ) ( 20 100 570 ) 8.(2分)[程序] #include<iostream.h> class AA { int x; public: int y; AA(int a,int b){y=b-a;x=y+y;} int showx(void){return x;) }; class BB:public AA { public: BB(int c):AA(C,c+c){); int showy(void){return y;) ); class CC:public AA { public: CC(int d):AA(d,d+d){); int showy(void){return y;) ); class DD:public BB,public CC { public: DD(int e):BB(e+50),CC(e-50){}; ); void main() { DD d(80); cout<<d.BB::showy()<<'\t'<<d.CC::showy()<<endl; cout<<d.BB::showx()<<'\t'<<d.CC::showx()<<endl; } 程序运行结果为: ( 130 30 ) , ( 260 60 ) ●完善程序(12分) 9.(4分)编写一个程序采用递归方法逆序放置a数组中的元素。 [方法说明]调用一个invert函数来进行数组逆置。invert(s,i,j)函数采用递归方法实 现,每次将S的第i个元素和第j个元素进行交换,直到i大于或等于j为止。 [程序] #include<iostream.h> ( void invert(int *, int, int) ) //函数invert()的原型说明 void main() { int a[10]={0,1,2,3,4,5,6,7,8,9),i; ( invert(a,0,9) ) //调用invert()函数 for(i=0;i<=9;i++) cout<<a[i]<<","; cout<<endl; void invert(int *s,int i,int j) { int t; if(i<j) { t=*(s+i); ( *(s+i)=*(s+j) ) *(s+j)=t; ( invert(s,i+1,j-1) ) } } 10.(4分)重载运算符“一=”,直接实现在一个字符串中删除某个字符的功能。例如: 字符串“Microsoft Visual C++6.O”与i做“一=”运算后的结果为“Mcrosoft Vsual C++ 6. [程序] #include<iostream.h> #include<string.h> class string { char*a; public: string(char *s) { if(s) { ( a=new char[strlen(s)+1] ) strcpy(a,s); } else a=0; } ~string() { if(a) delete[ ]a; } string &operator -=(char c); void show() { cout<<a<<endl; } ( string &string::operator-=(char c) ) //重载函数的定义 { char*p=a; while(*p) { if(*p==c) { for(char *q=p;*q;q++) ( *q=*(q+1) ) } else ( p++ ) } return *this; void main() { string sl("Microsoft Visual C++6.0") s1.show(); char cl='i': sl-=cl: s1.show(); }
|