版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第一章C+用礎(chǔ)知識習(xí)題1第一章C+礎(chǔ)知識習(xí)題判斷下列標識符的合法性。sin book 5arry _name main$1 class_cpp a3 x*y my name答:合法的: sin book _name main class_cpp a3非法的: 5arry $1 x*y my name假定有下列變量:int a=3,b=5,c=0;float x=,y=,z=;char ch1= a ,ch2= 5 ,ch3= 0 ,ch4;求下列表達式的值,以及運算后表達式所涉及的各變量的值。x+(int)y%a x=z*b+,b=b*x,b+ ch4=ch3-ch2+ch1int(y/z)+
2、(int)y/(int)z !(ab)&c&(x*=y)&b+ch3|(b+=a*c)|c+ z=(a1)答:x+(int)y%a表達式值為:,運算后x、y、a的值不變,仍分別為、3。提示:運算時取出y變量的數(shù)值強制轉(zhuǎn)化為整型數(shù)放入寄存器參加運算,但內(nèi)存中y本身的數(shù)值不變化。只有賦值運算和自增、自減運算才改變變量本身的值x=z*b+,b=b*x,b+表達式值為:42,運算后x為,b為43。提示:逗號表達式,依次運算,表達式的值是最后一次運算的值。后+是變量先參加運算然后變量自身加1,所以第1步x等于*5,即,然后b增為6;第2步b賦值為42;第3步,表達式的值是上一步后b的值42,但隨后b的伯
3、;自增1,成為43。ch4=ch3-ch2+ch1表達式值為:,字符外斜杠。運算后ch1、ch2、ch3值不變。提示:字符型的變量實質(zhì)是范圍很小的整型量。int(y/z)+(int)y/(int)z 表達式值為:13。y和z自身的值不變。提示:int(y是完成實數(shù)除法后,商強制轉(zhuǎn)化為整型,(int)y/(int)z則是數(shù)值先轉(zhuǎn)換,完成的是整除。!(ab)&c&(x*=y)&b+表達式值為:0。運算后x仍為,b仍為5提示:只要出現(xiàn)一個false右邊的不再做,因為c為0,即false,所以其右的所有運算不再做。ch3|(b+=a*c)|c+ 表達式值為:1。運算后b為5, c為0,均不變。提八:只
4、要出現(xiàn)一個true,右邊不再做。ch3的值為48。z=(a1)表達式值為:6。運算后a與b的值不變?nèi)詾?和5。提示:a的數(shù)值為(00000011)2,左移2位為(00001100)2即12,相當整數(shù)2兩次,而b的數(shù)值為(00000101)2,右移1位為 (00000010)2,即 2,相當于整除2。判斷下列哪些是常量,哪些是變量。China const int n=10; int m=5; a char ch=aint array5=1,2,3,4,5; char s=Hello;答: China 文字常量const int n=10; 常變量int m=5; 變量a 文字常量 1第一章C+礎(chǔ)
5、知識習(xí)題2char ch=a 變量int array5=1,2,3,4,5; 變量char s=Hello; 變量將下列算式或敘述用C+S達式描述。22)(arcsin2cx(x+y)/(x-y)*ay)(3)位j原點為的心,a, b為半徑的圓環(huán)中的點坐標。 cba(5)并且字符ch不為0。20k答: pi/2+sqrt(asin(x)*asin(x)+c*c)(x+y)/(x-y)*pow(a,y)(x*x+y*y)=a*a)&(x*x+y*y)=b*b)(a!=b)&(a!=c)&(b!=c)(kabxych1;ch2=();cinch3;若從鍵盤輸入 :3 2 7 a b c執(zhí)行后各變量
6、取值如何注意abce字符兩兩間有空格。答:a是3,b是2, x是,y是7, chi是a , ch2是空格,ch3是b。設(shè)有語句:int a,b,c,d;cinoctabhexcdecd;若從鍵盤輸入:23 23 23 23執(zhí)行后各變量的信用十進制表示各是多少答:a: 19, b: 19, c: 35, d: 23對于習(xí)題,若執(zhí)行:coutvvavv,t,vvhexvvb t,octc5) if(b-a25) a+;else b/=a;解答: 本題檢查學(xué)生整除的概念。跟蹤:abb/a循環(huán)次數(shù)b-a31003319741002529651002039515100613851610061484171
7、005停(1) 1417(3) 1003.1.2設(shè)有說明:int n,x,k,y;下面程序段的功能是備選答案中的(1),當n=10,x=10打印結(jié)果是(2)。cinxn;k=0;do x/=2;k+;while(kn);y=1+x;k=0;do y=y*y;k+;while(kn);coutyendl;備選答案:A, y = (1+x)n B y =(1+:)2C.y =(1 + x)nd.2n,y = (1+ x 22n +1 )n2解答:第一個循環(huán)使x成為:上;y成為:1+上;第一個循環(huán)使V成為:(1+ xL22; 2n2n2”,(1) B考慮整除連除4次以后為零,所以:心、,2n1請看如
8、下程序段:if(num=1) cout Alph;else if(num=2) cout“Bata;else if(num=3)coutGamma”;else cout Def ;當num的值分別為1、2、3時,上面程序段的輸出分別為、 、(3)。解答:檢查條件語句與字符串輸出概念:AlphaBataGamma執(zhí)行下面程序段后,m和k的值分別為(1)、(2)。int m,k;for(k=1,m=0;k=10) break;if(m%2=0)m+=5;continue;m-=3;解答:注意continue語句的使用初值m=1k=0第1次循環(huán)后m=5k=1第2次循環(huán)m=2k=2第3次循環(huán)m=7k=
9、3第4次循環(huán)m=4k=4第5次循環(huán)m=9k=5第6次循環(huán)m=6k=6第7次循環(huán)m=11結(jié)束,k+未做(1) 116二.編程與綜合練習(xí)題編程求一元二次方程 ax2+bx+c=0的根。包括以下判斷和結(jié)果:若輸入 a=0,給出提示;若A 0,輸出兩個不等實根;若A=0,輸出兩個相等實根;若A 0,輸出兩個復(fù)數(shù)根。解:本題以一個絕對值極小的數(shù)作為實數(shù)0。#include #include #include void main()double a,b,c; double delta,x1,x2;const double zero=ie-9;和源程序文件.cpp。頭文件中定義用戶自定義的數(shù)據(jù)類型,所 有的
10、程序?qū)崿F(xiàn)則放在不同的源程序文件中。編譯時每個源程序文件單獨編譯,如果一 源程序文件中有編譯預(yù)處理指令,則首先經(jīng)過編譯預(yù)處理生成臨時文件存放在內(nèi)存, 之后對臨時文件進行編譯生成目標文件.obj,編譯后臨時文件撤銷。所有的目標文件 經(jīng)連隹器近接最終小版一個完整的可兼行文禰.exe。多文件結(jié)構(gòu)管理程序的好處是十分明顯的。首先,可以避免重復(fù)性的編譯,如果修 改了個別函數(shù),那么只需將這些函數(shù)所在的文件重新編譯即可;其次,將程序進行 合理的功能劃分后,更容易設(shè)計、調(diào)試和維護;另外,通常把相關(guān)函數(shù)放在一個文 件中,這樣形成一系列按照功能分類的文件,便于為其他程序文件使用。宏定義與常量定義從作用及效果上看是一
11、樣的,二者是否完全相同答:完全不同。不帶參宏定義與const說明符定義常量從效果上看是一樣的,但它們 的機制不同。首先宏定義是在預(yù)處理階段完成,而cons證義則是在編譯階段實現(xiàn)。其次宏定義只是一種笥單的字符串替代,不會為字符串分配內(nèi)存單元,替代過程也 不作語法檢查,即使指令中的常量字符串不符合常量要求,預(yù)處理的替代過程也照 樣按指令給出的格式進行。而const定義則是象定義一個變量一樣定義一個常量標識 符,系統(tǒng)要按照類型要求為該標識符分配內(nèi)存單元,同時在將常量放入單元時進行 類型檢查,如果類型不匹配,類型相容的會進行系統(tǒng)的類型轉(zhuǎn)換,不相容的則要提 示錯誤。二.編程與綜合練習(xí)題設(shè)計函數(shù),將小寫英
12、文字符變?yōu)閷?yīng)的大寫字符。解:小寫字母比大寫字母 ASCIB值大32,或?qū)懽鱟h=ch- a + A;#includeusing namespace std;char capitalize(char ch)if(ch=a&ch=z) return ch-a+A;else return ch;%三章函數(shù)習(xí)題6int main()int i=0;char cp30;cout”請輸入包含小寫字母的句子:endl;(cp,30);while(cpi!=0) coutcapitalize(cpi+);coutendl;return 0;設(shè)計兩個函數(shù),分別求兩個數(shù)的最大公約數(shù)和最小公倍數(shù)。解:可用窮舉法求
13、最大公約數(shù)(從大到小找到的第1個公約數(shù))和最小公倍數(shù)(從小 到大找到的第1個公倍數(shù))。#includeusing namespace std;MaxCommonDevisor(int n,int m) int i;for( i=n;i=1;i-)if(n%i=0 & m%i=0) break;return i;MinCommonMultiple(int n,int m)int i;for(i=n;i=n*m;i+)if(i%n=0 & i%m=0) break;return i;int main()int i,j;cout請輸入兩個整數(shù):ij;cout最大公約數(shù):MaxCommonDeviso
14、r(i,j)t 最小公倍數(shù): MinCommonMultiple(i,j)endl;return 0;,設(shè)計函數(shù)digit(num,k),返回整數(shù)num從右邊開始的第k位數(shù)字的值。例如: digit(4647,3)=6digit(23523,7)=0解:把整數(shù)轉(zhuǎn)換為數(shù)串,放在一個整型數(shù)組中。#include using namespace std;digit(int num,int k)int s10=0,0,0,0,0,0,0,0,0,0;第三章 函數(shù)習(xí)題 7int i=0;do0m0,n )1,(,1( 0n 11 0m 1),(nmAcmmAcm),Acm(m-nnmAcm第三章 函數(shù)習(xí)
15、題 9其中m、n為正整數(shù)。設(shè)計程序求Acm(2,1), Acm(3,2)。解:遞歸函數(shù)實現(xiàn)非常簡單,按公式寫即可。#include using namespace std;Acm(int m,int n)if(m=0) return n+1;if(n=0) return Acm(m-1,1);return Acm(m-1,Acm(m,n-1);int main()coutAcm(2,1)=Acm(2,1)endl;coutAcm(3,2)=Acm(3,2)endl;return 0;用遞歸函數(shù)實現(xiàn)勒讓德多項式:1n /)()1()()12(1n 0n 1)(21nxPnxxPnxxPnnn在主
16、函數(shù)中求P4。解:把勒讓德多項式的階和自變量都作為參數(shù)。#includeusing namespace std;double P(int n,double x)if(n=0) return 1;if(n=1) return x;return (2*n-1)*x*P(n-1,x)-(n-1)*P(n-2,x)/n;int main()coutP(4,=P(4,endl;return 0;定義內(nèi)聯(lián)函數(shù)實現(xiàn)求三個實數(shù)中的最大值。解:內(nèi)聯(lián)函數(shù)只適用于功能簡單,代碼短小而又被重復(fù)使用的函數(shù)。函數(shù)體中包含復(fù)雜結(jié)構(gòu)控制語句,如switch、復(fù)雜if嵌套、while語句等,以及無法內(nèi)聯(lián)展開的遞歸 函數(shù),都不能
17、定義為內(nèi)聯(lián)函數(shù),即使定義,系統(tǒng)也將作為一般函數(shù)處理。#include using namespace std;inline max(int a,int b,int c)if(ab&ac) return a;if(ba&bc) return b;return c;第三章函數(shù)習(xí)題 10int main()coutmax(3,7,4)=0&ch二9來判斷#includeusing namespace std;inline bool IfDigitChar(char ch)if(ch=0&ch=9) return 1;else return 0;int main()char ch;cout”請輸入一個
18、字符(輸入“! 停止)ch;while(ch!=!)if(IfDigitChar(ch) coutch is a digit charendl;else coutch is not a digit charendl;cout”請輸入一個字符(輸入“! 停止)ch;return 0;設(shè)計兩個重載函數(shù),分別求兩個整數(shù)相除的余數(shù)和兩個實數(shù)相除的余數(shù)。兩個實數(shù) 求余定義為實數(shù)四舍五入取整后相除的余數(shù)。解:實數(shù)四舍五入取整,正數(shù)是+取整,負數(shù)是取整。#include#includeusing namespace std;mod(int n,int m)return n%m;round(double x)
19、 基木概念與基礎(chǔ)知識 自 測題 -填空題5.1.1引入類定義的關(guān)鍵字是。類的成員函數(shù)通常指定為(2).類的數(shù)據(jù)成員通常指定為(3)。指定為 (4)的類成員可以在類對象所在域中的任何位置訪問它們。通常用類的成員表示類的屬性,用類的 (6)成員表示類的操作。答案:class公有的public私有的 private公有的public 數(shù)據(jù)(6) 函數(shù)4.1.2 類的訪問限定符包括(1)、(2)和 (3)。私有數(shù)據(jù)通常由(4) 函數(shù)來訪問(讀和寫)。這些函數(shù)統(tǒng)稱為(5)。答案:public (公有的)private (私有的)protected (保護的)公有的成員函數(shù)類的接口通常在邏輯上,同一類的每
20、個對象都有 CU代碼區(qū),用以存儲成員函數(shù)。而在物理上通常只有(2)代碼區(qū)。只有在(3)定義,并 (4) 的函數(shù)和加了關(guān)鍵字的函數(shù)例外。答案:獨立的共用的在類說明中不包括循環(huán)等復(fù)雜結(jié)構(gòu) inlineC+用支持三種域: 、。函數(shù)域被包括在中,全局域被包括在 中。using指示符以關(guān)鍵字 using開頭,后面是關(guān)鍵字(6)最后是 (7)這樣表示以后在該名字空間中所有成員都 (8)。如不使用using指示符則在使用時要加::,稱為(9 )運算符。答案:局部域 l local scope )(2 )名字空間域(namespace scope)(3 )類域(class scope)(4 )局部域(5 )名
21、字空間域(6 )namespace(7 )名字空間名可以直接被使用域4.1.5引用通常用作函數(shù)的(1)和(2)。對數(shù)組只能引用(3)不能引用(4)。答案:(1) 參數(shù) 返回值數(shù)組元素數(shù)組名本身構(gòu)造函數(shù)的任務(wù)是(1)。構(gòu)造函數(shù)無(2)。類中可以有(3)個構(gòu)造函數(shù),它們由(4)區(qū)分。如果類說明中沒有給出構(gòu)造函數(shù),則C+編譯 器會 ??截悩?gòu)造函數(shù)的參數(shù)是(6),當程序沒有給出復(fù)制構(gòu)造函數(shù)時,系統(tǒng)會自動提供 支持,這樣的復(fù)制構(gòu)造函數(shù)中每個類成員(8)O答案:初始化數(shù)據(jù)成員函數(shù)返回類型說明 多不同的參數(shù)表自動給出一個默認的構(gòu)造函數(shù)同一類對象的引用默認的的復(fù)制構(gòu)造函,稱為默認的按成員語義支持。被依次復(fù)制一
22、個類有(1) 個析構(gòu)函數(shù)。(2)時,系統(tǒng)會自動調(diào)用析構(gòu)函數(shù)。答案:一對象注銷時4.1.8運算符重載時,其函數(shù)名由 (1) 構(gòu)成。成員函數(shù)重載雙目運算符時,左操作數(shù)是(2),右操作數(shù)是 (3)。答案:關(guān)鍵字operator和該運算符 對象該函數(shù)的參數(shù)4.1.9 面向過程的程序設(shè)計中程序模型描述為(1),面向?qū)ο蟪绦蛟O(shè)計的程序模型可描述為 (2)。答案:(1)程序=M法+數(shù)據(jù)結(jié)構(gòu)0其數(shù)據(jù)與數(shù)據(jù)處理是分離的。(2)程序=(對象+對象+對象)+消息;對象=(算法+數(shù)據(jù)結(jié)構(gòu))。面向?qū)ο笤O(shè)計將數(shù)據(jù)和對數(shù)據(jù)的操作方法放在一起,形成一個相對獨立的整體 對象(Object)并通 過簡單的接口與外部聯(lián)系。對象之間
23、通過消息(Message)進行通訊。簡答題簡單解釋什么是面向?qū)ο蟪绦蛟O(shè)計的封裝性。答:對象是一個封裝體,在其中封裝了該對象所具有的屬性和操作。對象作為獨立的基本單元,實現(xiàn)了將數(shù)據(jù)和數(shù)據(jù)處理相結(jié)合的思想。此外,封裝特性還體現(xiàn)在可以限制對象中數(shù)據(jù)和操作的訪問權(quán)限,從而將屬性 隱藏”在對象內(nèi)部,對外只呈現(xiàn)一定的外部特性和功能。封裝性增加了對象的獨立性,C+通過建立數(shù)據(jù)類型一一類,來支持封裝和數(shù)據(jù)隱藏。 一 個定義完好的類一旦建立,就可看成完全的封裝體,作為一個整體單元使用,用戶不需要知道 這個類是如何工作的,而只需要知道如何使用就行。另一方面,封裝增加了數(shù)據(jù)的可靠 性保護 類中的數(shù)據(jù)不被類以外的程序
24、隨意使用。 這兩個優(yōu)點十分有利于程序的調(diào)試和維護。C+魏譯器怎樣對標識符進行解析 答:編譯器對標識符的解析分兩步, 第一步查找在 聲明中用到的標識符,特別是函數(shù)成員聲明中用到的參數(shù)類型,第二步是函數(shù)成員體內(nèi)的標 識符。4.2.3為什么說類與對象的概念是客觀世界的反映 行為(或操作),具有相同屬性和行為的事物可以歸 物的效率。C+中定義的類則是通過抽象的方法將答:客觀世界的事物都具有某些屬性和 屬于一類,用分類的方法可以提高認識事 某一類事物共有的靜態(tài)特征(屬性)和動態(tài)特征(行為)概括出來并加以描述, 而對象是類的具體實現(xiàn),所以說類與對象的概念是客觀世界的反映。什么叫類域為什么說類域是抽象的答:
25、類域是類體所包括的范圍。每個類定義都引入了一個獨立的類域,在類域中說明的標識 符僅在該類的類域中有效。由于類只是一個說明,看上去有數(shù)據(jù),有函數(shù),有類型定義,但 是它并非實體,不分配內(nèi)存,當然也不能運行。所 以說類域是抽象的。引用作為函數(shù)參數(shù)時為什么能實現(xiàn)兩個實參之間的數(shù)據(jù)交換為什么對應(yīng)實參不能 為引用為什么返回值為引用的函數(shù)可以作為左值答:引用變量是其關(guān)聯(lián)變量的別名,二者在內(nèi)存中占據(jù)同一個存儲單元。在一個以引用作為 參數(shù)的函數(shù)中,交換兩個參數(shù)的值,實際上就是交換兩個實參的值。如果函數(shù)的參數(shù)是引用,調(diào)用時需要取得實參的地址,而實參如果已經(jīng)是一個地址,再進行引用將產(chǎn)生錯誤, 故對應(yīng) 實參不能為引用
26、。函數(shù)返回引用實際是指明(返回)了相應(yīng)的關(guān)聯(lián)變量,所以聲明返回值為引用的函數(shù)實 際上是將關(guān)聯(lián)變量作為左值參與運算。答:如果在類定義中不顯式 不過該函數(shù)不做具體的初始C+編譯器都認為是缺省的什么是缺省的構(gòu)造函數(shù)缺省的構(gòu)造函數(shù)最多可以有多少個 地定義構(gòu)造函數(shù),C+副譯器會自動產(chǎn)生一個缺省的構(gòu)造函數(shù), 化工作。只要構(gòu)造函數(shù)是無參的或者只要各參數(shù)均有缺省值的, 構(gòu)造函數(shù)。缺省的構(gòu)造函數(shù)只能有一個。拷貝構(gòu)造函數(shù)用于哪三個方面答:用類的一個對象去初始化該類的另一個對象時使用。當函數(shù)的形參是類的對象,調(diào)用函數(shù)時,進行形參與實參結(jié)合時使用。當函數(shù)的返回值是類對象,函數(shù)執(zhí)行結(jié)束返回調(diào)用者時使用。寫出含有對象成員
27、的類的構(gòu)造函數(shù)的格式,并做簡單說明。答:C+中對含對象成員的類對象的構(gòu)造函數(shù)有固定的格式:類名二構(gòu)造函數(shù)名(參數(shù)總表):對象成員1(參數(shù)名表1),對象成員2(參數(shù)名表2), 對象成員n(參數(shù)名表n)冒號后用逗號隔開的是要初始化的對象成員,附在后面的參數(shù)名表1,,參數(shù)名表n依次 為調(diào)用相應(yīng)對象成員所屬的構(gòu)造函數(shù)時的實參表。這些表中的參數(shù)通常來自冒號前的參數(shù)總表,但沒有類型名。所有類對象未重載的賦值運算符 是怎樣工作的為什么它可以進行連續(xù)賦值 答:對 所有的類對象,未重載的賦值運算符 “=”稱作缺省的按成員拷貝賦值操作符, 同類 對象之間 可以用“木接拷貝。因為缺省的賦值操作返回一個對象的引用,
28、所以它可以進 行連續(xù)賦值。24.2.11重載復(fù)數(shù)運算符+時,采用下面友元函數(shù)聲明:friend Complex1 operator +(Complex &c1,Complex &c2);為什么不能用于 實數(shù) + 復(fù)0數(shù)”怎樣改進才能適用為什么答:使用引用類型變量作為運算符重載函數(shù)的參數(shù),身為左值的實數(shù)類型實參不能被轉(zhuǎn)換為夏數(shù),編譯時無法通過。添加const說明,使實數(shù)到復(fù)數(shù)的轉(zhuǎn)換隱式地在一份拷貝上進行,則停以實現(xiàn) 實數(shù)+復(fù)數(shù)”運算。修改后的說明為:么 friend Complex operator +(const Complex &c1, const Complex &c2);42.12類的靜
29、態(tài)數(shù)據(jù)成員與函數(shù)中的 靜態(tài)成員有何異同 答:類的靜態(tài)成員為其所有對象共享, 忝管有多少對象,靜態(tài)成員只有一份存于公用內(nèi)存中,為該類所有對象公用。函數(shù)中的靜態(tài)變量也位于公用內(nèi)存中,不隨函數(shù)調(diào)用而重新分配,所 以總是保留上次進入并執(zhí)行該函數(shù)后留策的信息。的4.2.13 C+中結(jié)構(gòu)、聯(lián)合與類三者間有何異同酸:在C+中結(jié)構(gòu)(structure )與類幾乎是完全一樣的類型, 差別僅僅在于缺省情況下結(jié)構(gòu) 的 球員為公有的。聯(lián)合(union)是C+的導(dǎo)出數(shù)據(jù)類型,在語法與功能上類似于結(jié)構(gòu),二 者 陽區(qū)別是:結(jié)構(gòu)變量的各成員同時被分配了各自獨立的內(nèi)存區(qū),而聯(lián)合變量的各個成員的 存鎊開始地址都相同,所以在任一時
30、刻聯(lián)合變量只能存儲一個成員。問412.14對象的第一特征是封裝,那么由對象組成的面向?qū)ο蟮某绦蛟鯓咏⒏鲗ο笾g的 嘉效聯(lián)系面向?qū)ο蟪绦虻慕M織與面向過程有什么不同答:因為對象的操作主要用來響應(yīng)外來談息并為其他對象提供服務(wù),所以面向?qū)ο蟮某绦蚶孟鬟f機制來建立各對象之間的有貧聯(lián)系,協(xié)調(diào)各對象的運行。一個對象可以向其他對象發(fā)送消息以請求服務(wù),也可以響應(yīng)其他時象傳來的消息,完成自身固有的某些操作,從而 服務(wù)于其他對象。面向過程的程序是模塊化的,模塊的組織具有分層結(jié)構(gòu)特點,層與層之間是調(diào)用關(guān)系。他向?qū)ο蟪绦蚴怯梢粋€個封裝的對象組成,而對象是由緊密結(jié)合在一起的算法和數(shù)據(jù)結(jié)構(gòu)組*。對象之間是相互請求和
31、相互協(xié)作的關(guān)系。用對象名 加 運 算加對 象成員名 答:友元函數(shù)不是類的成員函數(shù),在函數(shù)體中訪問對象的成員,必須用對 象名加運算符 加對象成員名。這一點和一般函數(shù)一樣。4.2.15簡敘Windows下應(yīng)用程序的運行方式。答:Windows系統(tǒng)支持多個應(yīng)用程序同時執(zhí)行,在界面形式上,它支持多個窗口同時活動。它的運 Windows系統(tǒng)使用事件驅(qū)動的編程模式。所謂事件的含義非常廣泛。輸入設(shè)備的動作,如 敲打鍵盤、按鼠標等會產(chǎn)生一系列的事件(注意不是一個事件)。操作系統(tǒng)所作的一舉一動也 極當作某種類型的事件,應(yīng)用程序也會產(chǎn)生各種事件。事件用來標識發(fā)生的某件事情。制 Windows 系統(tǒng)對于應(yīng)用程序環(huán)境
32、中發(fā)生的每一個事件都會以對應(yīng)的某種消息的形式標 謖,并放入相應(yīng)的 Windows建立的消息隊列中,然后由對應(yīng)的應(yīng)用程序或窗口函數(shù)去處理。窗口函數(shù)處理是分層的,前面處理不了的送到后面, 最后處理不了剩下的全由缺省的窗口函數(shù)處So 息42.16類的成員函數(shù)在什么情況下應(yīng)該定義為私有的這樣做的目的是什么答:除接口函數(shù)和例建本類對象的構(gòu)造函數(shù)和撤消該對象的析構(gòu)函數(shù)外。其余成員函數(shù)應(yīng)該定義為私有的,這是和發(fā)類時故意對外隱蔽起來的操作,而這些往往是最復(fù)雜最關(guān)鍵的部分。類中故意的隱藏也為事后的升級擴展留下了余地,只要接口不變,內(nèi)部再變,也不必修改原來的程序,就象MFC(微 殊基礎(chǔ)類)升級后,由MFC底層類所
33、編的程序完全不必修改,自 動升級。驅(qū)新.編程與綜合練習(xí)題(構(gòu)造一個日期時間類 (Timedate)數(shù)據(jù)成員包括年、月、日和時、分、秒,函數(shù)成員 包m 括設(shè)置日期時間和輸出時間,其中年、月請用枚舉類型,并完成測試。(包括用成員 函e 數(shù)和用普通函數(shù)) e娜:本題要求僅是定義類的練習(xí),并非實用的提供日期時間的程序。實用的日期時間程序 見q 附錄二的日期時間函數(shù)。 s#include #include esing namespace std; enum -b YRY2000,Y2001,Y2002a ,丫2003,Y2004,Y2005;s Circumference=2*r*3.; e Circl
34、e:Circle(Circle & cl)r=; Area=; Circumference=; a ndoid Circle:SetR(doubleR) r=R; Area=r*r*3.; en int td r ivCircumference=2*r*3.;main()Circle cl1(2),cl2,cl3=cl1;cout圓半徑:()t圓周長:()t圓面積:()endl; (4); cout圓半徑:()t圓周 長:()t圓面積:()endl;return 0;,生日(Birthday)和家庭住址(HomeAddress)成員函數(shù)包括人員信息的錄入 和顯示。還包 括構(gòu)造函數(shù)與拷貝構(gòu)造函數(shù)
35、。設(shè)計一個合適的初始值。解:本題為指出構(gòu)造函數(shù)等的調(diào)用,加了一些提示語句。#include #includeusing namespace std;enum Tsexmid,man,woman;ccasId PersO堤19; 1986 年8 月 18 日 1986 年 8月 18 日word00 x6dmksi0word10 x6foword20 x72rksi1本概念與基礎(chǔ)知識自測題 -填充題5.1.1數(shù)組定義時有三個要素:數(shù)組名,數(shù)組元素的(1)和數(shù)組元素的(2)。按元 素在數(shù)組中的位置進行訪問,是通過(3)進行的,稱為 (4)或(5)訪問。 為了使數(shù)組聲明中數(shù)組的大小修改更為方便,總是
36、將 (6)用于聲明數(shù)組長度。答案:(1)類型(2)數(shù)量(3)下標運算符(4)下標(5)索引(6)常變量C/C+中的多維數(shù)組用的是一個(1)的定義,即多維數(shù)組的基本定義是(2)構(gòu)成的數(shù)組,三維數(shù)組的元素是(3)。答案:(1)嵌套(2)以數(shù)組作為元素(3)二維數(shù)組計算機內(nèi)存是一維編址的,多維數(shù)組在內(nèi)存中的存儲(1) . C/C+多維在內(nèi)存中 的排列是 (2)方式,即越 (3)的下標變化(4)。設(shè)數(shù)組a有m行n列,每個 元存u個字節(jié),則aij的首地址為(5) + (6)。答案:(1)必須要轉(zhuǎn)化為一維方式,按行方式右越快a數(shù)組的首地址(i*n+j)*u對于多維數(shù)組,(1)的大小是確定的.所謂不檢查數(shù)組
37、邊界 只是不檢查(2) 的邊界,而(3)的邊界是在控制之中的,所以多維數(shù)組名作為函數(shù)的參數(shù)只可以(4) 缺省。答案:(1)較低各維的(2)最高維(第一維)(3)較低各維(4)最高維5.1.5指針變量保存了另一變量的 -C1L值,不可以任意給指針變量賦一個地址值,只能賦 給它(2) 和 (3) 的地址。使用變量名來訪問變量,是按 來直接存取變量稱為(5)方式;而借助指針變量取得另一變量的地址,訪問該變量稱為(6)方式。答案:(1)地址NULL(3)已經(jīng)分配了內(nèi)存的變量的地址(4)按變量的地址(5)直接訪問(6)間接訪問5.1.6固定指向一個對象的指針,稱為(1),即,定義時const放在(3)。
38、而指 向常量”的指針稱為(4),指針本身可以指向別的對象,但(5),定義時const放在 (6)。答案:(1)指針常量(2)指針本身是常量const放在類型說明之后,變量名之前(4)常量指針(5)不能通過該指針修改對象(6) const放在類型說明之前數(shù)組名在表達式中被自動轉(zhuǎn)換為指向(1)的指針常量,數(shù)組名是地址,但數(shù)組名 中放的地址是 (2),所以數(shù)組名 (3)。這樣數(shù)組名可以由(4)來代替,C+這樣做使用時十分方便, 但丟失了數(shù)組的另一要素 ,數(shù)組名是指向數(shù)組(6)的指針,而不是指向數(shù)組(7)的。編譯器按數(shù)組定義的大小分配內(nèi)存,但運行時 對(8)不加檢測,這會帶來無法預(yù)知的嚴重錯誤。答案:
39、(1)數(shù)組第一個元素(2)不可改變的(3)稱指針常量(4)指針(5)數(shù)組元素的數(shù)量(6)元素(7)整體(8)對數(shù)組的邊界不加檢測有一個三維數(shù)組:int z3d234;給出指向三維數(shù)組第i行第j列第k頁元素的指針的三種表達方式(1),,(3)。再給出這些元素的三種表達方式(4).(5),(6)。答案:(1) z3dij+k 或 &z3di皿k*(z3di+j)+k*(*(z3d+i)+j)+kz3di皿k或*(z3dij+k)*(*(z3di+j)+k)*(*(*(z3d+i)+j)+k)簡答題物理上,C+隹怎樣訪問數(shù)組元素的請對訪問方法作簡單介紹。答:物理上,C+語言的下標運算符是以指針作為操
40、作數(shù)的,ai被編譯系統(tǒng)解釋為*(a+i),即表示為a所指(固定不 可變)元素向后第i個元素。無論我們是以下標方式或指針方式存取數(shù)組元素時,系統(tǒng)都是轉(zhuǎn)換為指針方法實現(xiàn)。這樣做對多維數(shù)組尤其方便。什么是回溯算法答:回溯法是對枚舉法的一種改進?;厮莘ǖ幕舅枷胧?,通過對問題 的分析找出解決問題 的線索,先在一個局部上找出滿足問題條件的局部的解,然后逐步由局部解向整個問題的解 的方向試探,若試探成功就得到問題的解,試探失敗逐步向后退,改變局 部解再向前試探?;厮莘鼙苊饷杜e法的許多不必要的搜索,使問題比較快地得到解決。用數(shù)組名作為函數(shù)的參數(shù)時,可否加上數(shù)組的長度如果需要加則怎樣加為什么答:被調(diào)函數(shù)中作
41、為形式參數(shù)的一維數(shù)組不需要說明長度,即使說明了大小也不起作用,因為C+只傳遞數(shù)組首地址,而對數(shù)組邊界不加檢查。需要編寫一個對多維數(shù)組通用的算法 (即各維的大小未定),怎樣才能把實參多維數(shù) 組 的信息全部傳遞到函數(shù)中去 答:最佳方法是用函數(shù)模板, 多維數(shù)組用模板類型參數(shù)傳遞, 各 維的大小作為參數(shù)傳遞。 也 可以用一維數(shù)組加各維的大小都作為參數(shù)傳遞。2 運算符和-”是成員訪問運算符(Member Access Oprator)。在對象或結(jié)構(gòu)外部去訪問公有的數(shù)據(jù)成員或函數(shù)成員時,是在對象名后加 (點操作符),再加成員函數(shù)名或函數(shù)名就可以了。但是這些成員必須是公有的成員,只有公有成員才能在對象的外面
42、對它進行訪問。當用指向?qū)ο蠛徒Y(jié)構(gòu)變量的指針訪問其公有成員時,則只要在指針變量名后加-”解箭頭操作符),再加公有成員名就可以了。釋52.6什么是this指針簡述它的作用。答:當我們在對象的外部訪問該對象的公有成員時,馨須指明是哪一個對象。但是當我們用 對象的成員函數(shù)來訪問本對象的成員時,在成員函數(shù)中猱要給出成員名就可以實現(xiàn)對該對象 員函數(shù)的拷貝。既然是同一份拷貝, 據(jù)呢其實每一個對象有一個隱藏的成員的訪問。但同一個類創(chuàng)建的多個對象共用同一份成那么成員函數(shù)又怎么知道是取哪一個對象的成員數(shù) this指針,它始終指向該對象,并將該指針作為一個參數(shù)成員操作符總是要使用的,只不過在對象內(nèi)是隱式的,1動傳遞
43、給該成員函數(shù)。這就是說, 第口在對象內(nèi)省略了 this指針。&2.7指針變量與整型量的加減運算代表什么意義 針,以指向當前目標前面或后面的若干個位置的目 Hi*sizeof(目標類型)積的加減,得出新的地址。答:指針變量與整型量的加減表示移動指標。指針與整型量i的加減等于指針值(地址)作52.8 非法。 運52.9符答:設(shè)a為數(shù)組名,那么a+是否合法為什么 因為a是指針常量。指針作為函數(shù)的參數(shù)時,它傳遞的是什么實參要用什么而使用引用時實參要用什的 作 用么何時只能用指針而不能用引用答:是地址,是指針所指向的變量或?qū)ο蟮膬?nèi)存首地址,在物理上講我們傳的是指針的值,與傳其它變量是沒有差異的,函數(shù)獲得
44、的是另一個變量的地址,在邏輯上講我們是把另一個變量的地址傳過去了,可以看作傳地址。實參要用變量或?qū)ο蟮牡刂贰?而使用引用時實參要 用而不能用引用,因為數(shù)組的引用不存在。fi*n卜指針作為函數(shù)的返回值時,勺函數(shù)入中,函數(shù)消亡后,數(shù)據(jù)仍同啟偉5.2應(yīng)該注意什么_答:指針指向的數(shù)據(jù)的生命期必須不僅僅如果返 回的指計,它所指的變量或?qū)ο笠严?則不褥回值無意義,這點必須十產(chǎn)w一金之直號使用指計不戶是作?參數(shù)還曷返回值I,cha*ps= 世 a book.”立了一個字符串,并把*ps=IX _,/S a car ;這I茁代表什么是否訐確C答:(沒有建立字符串,只是讓ctrino isjbo?。作為其初值
45、隨后,有語句:ps指向一個放在代碼區(qū)中的特殊字符串,而該字符串所在內(nèi)存是不可寫的。后一條語句要求把字符串賦給不可寫的字符串空間是錯的。二、編程與綜合練習(xí)題打印楊輝三角形(10行)使用二維數(shù)組并利用每個系數(shù)等于其肩上兩系數(shù)之和。解:好的算法無特例,二維數(shù)組共用11列,第1列全0,方便計算#includeintusing namespace std; int main()9.3.3;9.3.3;木概念與基礎(chǔ)知識自測題 -填充題模板是為了實現(xiàn)代碼的(1).它把數(shù)據(jù)類型改為一個(2).稱為 (3)程序設(shè)計。模板包括(4) 和 (5)。答案:(1)重用(2)設(shè)計參數(shù)(3)參數(shù)化(parameterize
46、)(4)函數(shù)模板(function template)(5)類模板(class template)調(diào)用函數(shù)模板時,可以顯式指定模板參數(shù)類型,也可以隱式進行,稱為(1),這是根據(jù) (2) 來決定的。答案:(1)模板實參推演(template argument deduction)一組實際類型或(和)值順序查找可以用于11)線性表,而對半查找可以用于(2)線性表。答案:(1)無序的(所有)(2)有序的最常見的排序方式有(1) 、(2)和 (3)。如果現(xiàn)有一個已排好序的線 性表,在表尾添加了一個元素,而)排序法使它重新成為有序的所需工作 量最小。答案:(1)選擇(2)插入(3)交換(4)交換(可利用
47、原來的有序性)給出以下指針的說明方式:指向一個4元素整型數(shù)組的指針為(1) ;指向一個返 回整型數(shù),參數(shù)為兩個整型數(shù)的函數(shù)的指針(2);指向一個數(shù)組的指針,而該數(shù)組元素都是指向一個返回整型指針的無參函數(shù)(3)。答案:(1) int(*p)4int(*p)( int,int)(3)以指向6元素數(shù)組為例:int*(*)() (*p)6簡答題需要編寫一個對多維數(shù)組通用的算法(即各維的大小未定),怎樣才能把實參多維數(shù)組的信息全部傳遞到函數(shù)中去答:最佳方法是用函數(shù)模板,多維數(shù)組用模板類型參數(shù)傳遞,各維的大小作為參數(shù)傳遞。也 可以用一維數(shù)組加各維的大小都作為參數(shù)傳遞。什么叫函數(shù)模板什么叫模板函數(shù)什么叫類模
48、板什么叫模板類答:不受數(shù)據(jù)類型限制的通用型的函數(shù)使代碼的可重用性大大提高。把數(shù)據(jù)類型改為程序設(shè)計。一個設(shè)計參數(shù)是一個可行的方案。這種程序設(shè)計類型稱為參數(shù)化(Parameterize)這樣的軟件模塊由模板(Template)構(gòu)造。包括函數(shù)模板和類模板。函數(shù)模板定義如下:template 返回類型函數(shù)名(形式參數(shù)表)6.2.36.2.46.2.5程與綜合練習(xí)題使用自定義字符串類,編寫求數(shù)組元素中最大值的函數(shù)模板。解:函數(shù)模板有三種應(yīng)用方式:.類模板的成員函數(shù),在模板類型參數(shù)中重載函數(shù)和運算符,直接訪問私有數(shù)據(jù)成員,實 現(xiàn)通用算法。這是標準的面向?qū)ο蟮姆椒ā?函數(shù)模板處理模板類,以類模版為參數(shù),用模
49、板類型參數(shù)中重載的函數(shù)或運算符,實現(xiàn)通用算法。但調(diào)用類模板的接口函數(shù)間接訪問私有數(shù)據(jù)成員,也是常見的。.函數(shù)模板處理普通數(shù)據(jù),往往要用函數(shù)作為參數(shù),實現(xiàn)通用算法。這是面向過程的方法。解:使用獨立的函數(shù)模板,相對簡單。#include using namespace std;const int n=256;class mystringhow(); cout按字典序 _查找校名:endl;(max(ms,6).show();return 0;將自定義字符串類用于對半查找的函數(shù)模板。解1:為簡化,使用獨立的函數(shù)模板#include using namespace std;const int n=256;class mystringhow(); _i=BinarySearch(ms,x,6);coutiendl;i=BinarySearch(ms,y,6);coutiendl;return 0;解2:函數(shù)模板使用成員函數(shù)()#include
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025個人土地買賣合同
- 2025【各行各業(yè)合同協(xié)議模板】【各行各業(yè)合同協(xié)議模板】外匯借款合
- 2025關(guān)于勞動合同的范例
- 2025承包合同協(xié)議范文
- 2025物保擔(dān)保合同范本
- 2025防水保溫施工合同
- 2025年專利許可證合同標準版本(三篇)
- 門店裝修改造合同樣本
- 鞋材運輸合同樣本66
- 課題申報參考:近代漢文中國行紀與全球文學(xué)關(guān)系研究
- 垃圾處理廠工程施工組織設(shè)計
- 天皰瘡患者護理
- 2025年蛇年新年金蛇賀歲金蛇狂舞春添彩玉樹臨風(fēng)福滿門模板
- 《建筑制圖及陰影透視(第2版)》課件 4-直線的投影
- 2024-2030年中國IVD(體外診斷)測試行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 損失補償申請書范文
- 壓力與浮力的原理解析
- 鐵路損傷圖譜PDF
- 裝修家庭風(fēng)水學(xué)入門基礎(chǔ)
- 移動商務(wù)內(nèi)容運營(吳洪貴)任務(wù)二 社群的種類與維護
- 《詩詞寫作常識 詩詞中國普及讀物 》讀書筆記思維導(dǎo)圖
評論
0/150
提交評論