2009秋vc++筆試試題 |
二級Visual C++筆試試卷 第一部分:計算機基礎知識 1.下列關于個人移動通信的敘述中,錯誤的是____ A.第1代個人移動通信(簡稱 B.目前廣泛使用的GSM手機采用的通信技術屬于第2代移動通信技術(簡稱 c.第3代移動通信技術(簡稱 D 2.在下列有關集成電路的敘述中,正確的是2。 A.現代集成電路所使用的半導體材料都是硅 B.所有的集成電路都是數字集成電路 C.Moore定律認為單塊集成電路的集成度平均每年翻一番 D.Intel公司微處理器產品Core 2 Duo,其集成度已高達數千萬個電子元件 3.與十六進制數AB等值的八進制數是3 。 A. 253 B 4.在下列有關PC機CPU的敘述中,錯誤的是4。 A.CPU中包含幾十個甚至上百個寄存器,用來臨時存放數據、指令和控制信息 B.所有PC機的CPU都具有相同的指令系統,因而PC機可使用相同的軟件 C.一臺計算機至少包含1個CPU,也可以包含2個、4個、8個甚至更多個CPU D.Intel公司是國際上研制和生產CPU的主要公司,我國也能生產CPU 5.在下列有關PC機主板上部件的敘述中,錯誤的是5 。 A.BIOS保存在主板上的一個閃存中,其內容在關機后通常不會改變 B.CMOS中保存有用戶設置的開機口令,關機后主板上的電池繼續給CMOS供電 C.啟動CMOS設置程序可以重新設置CMOS中的數據,該程序是BIOS的組成部分 D.網卡通常集成在主板上,由主板上獨立的IC實現其功能,與芯片組無關 6.從PC機存儲器的層次結構來看,下列存儲器中存取速度最快的是6 。 A.Cache存儲器 B.RAM和ROM C.寄存器 D.硬盤和優盤 7.在下列4種PC機常用I/O接口中,數據傳輸速率最高的是7。 A.PS/2 B.SATA C.IEEE-1394b D.USB 2.0 8.在下列有關I/O操作、I/O總線和I/O接口的敘述中,錯誤的是8。 A.I/O操作的任務是在I/O設備與內存的指定區域之間傳送信息 B.I/O總線傳送的只能是數據信號,它不能傳送控制信號和地址信號 C.不同類型的I/O接口,其插頭/插座以及相應的通信規程和電氣特性通常各不相同 D.并行總線的數據傳輸速率不一定比串行總線高 9.在下列有關PC機I/0設備的敘述中,錯誤的是9。 A.數碼相機的成像芯片可以為CCD器件或CMOS芯片,目前大多數用CCD器件 B.平板式掃描儀的分辨率通常遠遠高于膠片掃描儀和滾筒式掃描儀 C.常見的寬屏液晶顯示器的寬度與高度之比為16:9(或16:10) D.目前在銀行、超市等商業部門一般采用針式打印機來打印存折和票據 10.在下列有關計算機軟件的敘述中,錯誤的是10 。 A.程序設計語言處理系統和數據庫管理系統被歸類為系統軟件 B.共享軟件是一種具有版權的軟件,它允許用戶買前免費試用 C.機器語言和匯編語言與特定的計算機類型有關,取決于CPU D.目前PC機只能使用Windows系列操作系統,均不能使用UNIX和Linux操作系統 11.在下列常用的PC機軟件中,編輯的文檔(內容)能直接保存為圖片類型(例如JPEG 文件類型)的是11 。 A.Microsoft Word B.Microsoft Excel C.Microsoft PowerPoint D.Microsoft FrontPage 12.在下列關于以太網(局域網)的敘述中,錯誤的是12。 A.在共享式以太網中,任何時間只允許一對計算機進行通信 B.在交換式以太網中,每臺計算機均獨享相同的帶寬,其帶寬僅由交換機決定 c.無論是共享式以太網還是交換式以太網,網絡中的所有計算機都要安裝以太網網卡 D.無論是共享式以太網還是交換式以太網,它們的數據幀和MAC地址格式均相同 13.連接在因特網上的每一臺主機都有一個IP地址。下面不能作為IP地址的是13 。 A.211.256.49.68 B. 14.為了將異構的計算機網絡互相連接起來,必須使用的網絡設備是14 。 A.調制解調器 B.以太網集線器 c.以太網交換機 D.路由器 15.下列網絡協議中,與發送電子郵件有關的是15 。 A.Http B.FTP C.SMTP D.TELNET 16.在下列有關字符集及其編碼的敘述中,錯誤的是16 。 A.基本的ASCII字符集共有128個字符,每個字符使用7個二進位進行編碼 B.GB2312字符集中收錄了6千多個漢字,每個字符在機內通常使用雙字節編碼 C.GBK字符集中的字符也采用雙字節編碼,且該字符集收錄了部分繁體漢字 D.GB18030字符集中所有的字符均采用4字節編碼,因此該字符集的代碼空間很大 17.目前數碼相機拍攝的照片在保存時通常采用的文件類型是17 。 A.BMP B.GIF C.JPEG D.TIF 18.MP3是數字波形聲音的一種壓縮編碼文件格式,它采用的壓縮編碼標準屬于18 。 A.MPEG-1 B.MPEG 19.使用Macromedia公司的Flash軟件制作的動畫是一種矢量圖形,在保存為動畫文件 時其文件擴展名通常為19 。 A.GIF B.SWF C.AVI D.MPG 。 20.在計算機應用中,CAD和CAM是典型的信息系統。它們屬于20 。 A.管理業務系統 B.輔助技術系統 c.信息檢索系統 D.信息分析系統 第二部分Visual C++程序設計 一、選擇題(用答題卡答題,答案依次填在21--30答題號內) 21.以下關于C++函數的描述中,正確的是21 。 A.內聯函數就是定義在另一個函數體內部的函數 B.函數體的最后一條語句必須是return語句 C.c++要求在調用一個函數之前,該函數已定義或已有該函數的原型說明 D.編譯器會根據函數的返回值類型區分函數的不同重載形式 22.以下關于c++運算符重載的描述中,正確的是22。 A.任何運算符均可重載 B.運算符重載可以改變運算符的優先級 C.運算符重載可創造新的運算符 D.運算符重載可以改變運算符的功能 23.以下說明語句中,不存在語法錯誤的是 23 。 A.int 10long; B.int _2int; C.float X3-Dmax; D.char X.txt[20]; 24.以下關于C++函數重載的描述中,正確的是 。 A.重載函數必須具有不同類型的返回值 B.重載函數的形參個數必須不同 C.重載函數的形參個數不同或形參類型不同 D.重載函數名可以不同 25.以下if語句的表達不正確的是25 。 A.if(a<b) a=0,else b=0; B.if(a==b) a=0,b++; C.if(a<b); D.if(a!=b) a=b; 26.以下關于指針變量的敘述中,不正確的是 26 。 A.指針變量可賦值為0 B.指針變量中存放的是地址值 C.指針可以進行加、減等算術運算 D.指針變量不占用存儲空間 27.以下說明語句中,沒有語法錯誤的是 27 。 A.int a,*pa=&a,*pb=*pa; B.int aa,&b=aa,*pc=&b; C.int c[10],&pc=c; D.int dd,&u=&dd,*v=u; 28.以下關于類的友元函數的描述中,不正確的是 28 。 A.一個類的友元函數要用"friend"說明 。 B.友元函數在類體中說明時,不受類中訪問權限的限制 C.友元函數的作用域與類中成員函數的作用域相同 D.友元函數體的定義通常放在類定義之外 29.以下關于派生類的敘述中,不正確的是29 。 A.公有派生時基類中的public成員在派生類中仍是public成員 B.私有派生時基類中的protected成員在派生類中仍是protected成員 C.私有派生時基類中的public成員在派生類中改變成private成員 D.保護派生時基類中的public成員在派生類中改變成protected成員 30.以下關于純虛函數的敘述中,不正確的是 30 。 A.純虛函數定義時要定義函數體 B.純虛函數的說明以"=0;"結束 C.派生類中最終要定義純虛函數的函數體 D.含純虛函數的類不能定義其對象 二、填空題(請將答案填寫在答題紙的相應答題號內,每個答案只占一行) ●基本概念題,共5分 1.在定義一個類時,如果僅定義了數據成員,而沒有定義成員函數,則由系統自動生成的 缺省成員函數包括:(1) 、 (2) 、重載賦值運算符和拷貝構造函數。 2.如果使用數組名作為函數的實參,則形參與實參結合時,傳遞的是( 3 ) 。 3.C++中,編譯時的多態性是通過程序設計中使用 ( 4 ) 來實現的。 4.程序中使用new運算符動態分配的內存空間,必須用 (5) 來釋放。 ●閱讀程序題,共13分 5.[程序] (3分) #include <iostream.h> int x,y; int f2(int a,int b) { x=a+b;y=a-b; cout<<"x="<<x<<"\t"<<"y="<<y<<endl; return x+y; } void f1(int m,int n) { int x,y; x=m+n;y=m-n; m=f2(x,y); n=n+m: cout<<"m="<<m<<"\t"<<"n="<<n<<endl; } void main(void) {int a=3,b=5; f1(a,b); cout<<"a="<<a<<"\t"<<"b="<<b<<endl; cout<<"x="<<x<<"\t"<<"y="<<y<<endl; } 運行程序后輸出的第二行是( 6 ) ,第三行是( 7 ) ,第四行是( 8 ) 。 6.[程序](3分) #include <iostream.h> int f(int &n,int &m) { static int k=10; n+=m; k+=n; m+=k; cout<<"k="<<k<<endl: return(n+m); } void main(void) {int a=3,b=4,k; k=f(a,b)+f(a,b); cout<<"k="<<k<<'\t’<<"a="<<a<<'\t'<<"b="<<b<<endl: } ’ 運行程序后輸出的第一行是( 9 ) ,第二行是( 10 ) ,第三行是( 11 ) 7.[程序] (2分) #include<iostream.h> void f(int x) { int t; if(x<0){cout<<"-";x=-x;} t=x%10;X=x/lO; if(x!=0)f(x); cout<<t; } void main(void) { f(-234); cout<<'\n'; f(123); cout<<'\n'; } 運行程序后輸出的第一行是( 12 ) ,第二行是( 13) 。 8.[程序] (3分) #include <iostream.h> void fun(int x[],int n) { int i,max,min,k,p,t; for(k=p=0,max=min=x[0],i=1;i<n;i++){ if(max<x[i]) max=x[i],k=i; if(min>x[i]) min=x[i],p=i; } t=x[0];x[0]=x[p];x[p]=t; if(k==0) k=p; t=x[n-1];x[n-1]=x[k];x[k]=t; } void print(int *x,int n) {for(int k=0;k<n;k++) cout<<x[k]<<endl;} void main(void) {int a[5]={12,16,19,15,11}; fun(a,5); print(a,5); } 運行程序后輸出的第一行是(14) ,第三行是(15),第五行是(16)。 9.[程序](2分) #include <iostream.h> class B{ public: void f1(){cout<<"B類中的函數f1\n";} virtual void f2(){cout<<"B類中的函數f2\n";} }; class D: public B{ void f1(){cout<<"D類中的函數f1\n";} void f2(){cout<<"D類中的函數f2\n";} }; void main(void) {B a,*p; D b1; p=&a; p->f2(); p=&b1; p->f1(); p->f2(); } 運行程序后輸出的第二行是 (17) ,第三行是 (18)。 完善程序題,共12分 10以下程序的功能是:首先初始化一個等比數列,改數列的首項為3,公比為2,直到某 以下程序的功能是:首先初始化一個等比數列,該數列的再壩力j,公比刀z,且到禾 一項的數值大于720為止;然后基于此等比數列計算滿足條件的n值和m值,使得從第n項 到第m項的和為720(和值包含第n項及第m項)。試完善程序 等比數列的定義:數列的第0項為一個初值,從數列的第1項起,每一項與它的前一項的 比等于一個常數,這種數列稱為等比數列。該常數稱為等比數列的公比。等比數列表 示為: A0=a,A1=A0*q,......,An=An-1-1*q;其中a,q均為常數,且q!=0。 [程序](4分) #include <iostream.h> #define N 20 //只要檢查數列的前20項,其后各項值均大于720 int sum(im num[],int &n,int &m) { int s,i,idx,flag=0; for(i=0;i<N;i++){ s=0; n=i; idx=i; while(s<720 && idx<N) (19) ; if(s==720){ //找到符合條件的項,記錄位置 (20) ; flag=1; break; } } return flag; } void main(void) { int num[N],q,a; int i,m,n; a=3; q=2; num[0]=a; for(i=0;num[i]<720;i++){ //初始化等比數列 (21) ; num[i+1]=a; } if((22)){ cout<<"第"<<n<<"項--第"<<m<<"項的和是720:"<<endl; for(;n<=m;n++)cout<<nun[n]<<'\t'; cout<<"\n"; else cout<<"沒有滿足條件的項!\n"; } 11.以下程序的功能是:按每一個學生的成績總分(數學、物理和英語成績之和)進行排序 (降序排序),若總分相同時,再按數學成績進行降序排序;若總分和數學成績相同,再按英語 成績進行降序排序。程序中先輸入學生的人數,再依次輸入每一個學生的成績,然后按降序排 列后輸出結果。試完善程序。 [程序](4分) #include <iostream.h> #include <string.h> #define N 50 struct stu{ char name[10]; //學生姓名 int math; //存放數學成績 int phy,eng; //物理和英語成績 int sum; }; void input(stu s[],int n) { for(int i=O;i<n;i++){ cout<<"依次輸入姓名,數學,物理和英語成績:"; cin>>s[i].name>>s[i].math>>s[i].phy>>s[i].eng; s[i].sum=s[i].math+s[i].phy+s[i].eng; } } void sort(stu s[],int n) { int i,j,k; stu t; for(i=0;i<n-1;i++){ //降序排序 k=i; for(j=i+1;j<n;j++) if(s[k].sum<s[j].sum) k=j; else if(( 23 )) k=j; else if(( 24 )) k=j; if(( 25 )){ t=s[i]; s[i]=s[k]; s[k]=t; } } } void main(void) { int n; stu s[N]; cout<<"輸入學生的人數:"; cin>>n; input(s,n); ( 26 ) ; for(int i=0;i<n;i++) cout<<s[i].name<<<'\t'<<s[i].sum<<'\t'<<s[i].math<<'\t' <<s[i].phy<<'\t'<<s[i].eng<<'\n'; } 12.下面程序的功能是:首先,成員函數build()建立一條無序鏈表,由成員函數Print()輸 出無序鏈表中各結點的值;再由成員函數sort()對已建的鏈表根據鏈表結點值的大小按升序 進行排序,由成員函數print()輸出有序鏈表中各結點的值。試完善程序。 [程序](4分) #include <iostream.h> struct Node{ double num; Node *next; }; class Chain{ private: Node *h; public: void sort(void); Chain(){h=0;} ~Chain() { Node *p; while(h){ p=h; h=h->next; delete p; } } void build(void); void print(void) { Node *p=h; while(p){ cout<<p->nun<<'\t'; p=p->next; } cout<<'\n': } }; void Chain::build(void) { Node *p,*p1; double x; cout<<"輸入一個實數,以0結束:"; cin>>x; while(x!=0){ p=new Node; P->num=x; if(h==0) h=p1=p; else{ p1->next=p; p1=p; } cout<<"輸入一個實數,以O結束:"; cin>>x; } p->next=0: } void Chain::sort(void) { if(h==0)return; Node *h1,*p; h1=0; while(h){ p=h; ( 27 ) ; Node *p1,*p2; if(h1==0){ h1=p; ( 28 ) ; } else if(h1->num>=p->num){ ( 29 ) ; h1=p; } else{ p2=p1=h1; while(p2->next && p2->num<p->num){ p1=p2;p2=p2->next; } if(p2->num<p->num){ (30) ; p->next=0; } else{ p->next=p2;p1->next=p; } } } h=hl; } void main(void) { Chain x; x.build(); ’ cout<<"排序前的鏈表為:"; x.print(); x.sort(); cout<<"\n排序后的鏈表為:"; x.print(); } 參考答案 一、選擇題 1.A 2.D 3.A 4.B 5.D 6.C 7.B 8.B 9.B 10.D 11.C 12.B 13.A 14.D 15.C 16.D 17.C 18.A 19.B 20.B 21.C 22.D 23.B 24.C 25.A 26.D 27.B 28.C 29.B 30.A 二、填空題 (1)構造函數(或析構函數) (2)析構函數(或構造函數) (3)數組所代表的地址或地址或數組名 (4)函數重載或運算符重載 (5)delete或delete運算符 (6)m=16 n=21 (7)a=3 b=5 (8)x=6 y=10 (9)k=17 (10)k=45 (11)k= (13)123 (14)11 (15)12 (16)19 (17)B類中的函數f1 (18)D類中的函數f2 (19)s+=num[idx++] (20)m=idx-1或m=--idx (21)a=a*q或a=a*2 (22)sum(num,n,m)或sum(num,n,m)==1 (23)s[k].sum==s[j].sum && s[k].math<s[j].math (24)s[k].sum==s[j].sum && s[k].eng<s[j].eng (25)i!=k (26)sort(s,n) (27)h=h->next或h=p->next (28)p->next=0或h1->next=O或p->next=NULL或hl->next=NULL (29)p->next=h1 (30)p2->next=p |