江蘇計算機等級考試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(); }
|