乖乖小貓俠
一、嵌入式軟件的測試方法 一般來說,軟件測試有7個基本階段,即單元或模塊測試、集成測試、外部功能測試、回歸測試、系統(tǒng)測試、驗收測試、安裝測試。嵌入式軟件測試在4個階段上進(jìn)行,即模塊測試、集成測試、系統(tǒng)測試、硬件/軟件集成測試。前3個階段適用于任何軟件的測試,硬件/軟件集成測試階段是嵌入式軟件所特有的,目的是驗證嵌入式軟件與其所控制的硬件設(shè)備能否正確地交互。 1、白盒測試與黑盒測試 一般來說,軟件測試有兩種基本的方式,即白盒測試方法與黑盒測試方法,嵌入式軟件測試也不例外。 白盒測試或基本代碼的測試檢查程序的內(nèi)部設(shè)計。根據(jù)源代碼的組織結(jié)構(gòu)查找軟件缺陷,一股要求測試人員對軟件的結(jié)構(gòu)和作用有詳細(xì)的了解,白盒測試與代碼覆蓋率密切相關(guān),可以在白盒測試的同時計算出測試的代碼的覆蓋率,保證測試的充分性。把100%的代碼都測試到幾乎是不可能的, 所以要選擇最重要的代碼進(jìn)行白盒測試。由于嚴(yán)格的安全性和可靠性的要求,嵌入式軟件測試同非嵌入式軟件測試相比,通常要求有更高的代碼覆蓋率。對于嵌入式軟件,白盒測試一般不必在目標(biāo)硬件上進(jìn)行,更為實際的方式是在開發(fā)環(huán)境中通過硬件仿真進(jìn)行,所以選取的測試工具應(yīng)該支持在宿主環(huán)境中的測試。 黑盒測試在某些情況下也稱為功能測試。這類測試方法根據(jù)軟件的用途和外部特征查找軟件缺陷,不需要了解程序的內(nèi)部結(jié)構(gòu)。黑盒測試最大的優(yōu)勢在于不依賴代碼,而是從實際使用的角度進(jìn)行測試,通過黑盒測試可以發(fā)現(xiàn)白盒測試發(fā)現(xiàn)不了的問題。因為黑盒測試與需求緊密相關(guān),需求規(guī)格說明的質(zhì)量會直接影響測試的結(jié)果,黑盒測試只能限制在需求的范圍內(nèi)進(jìn)行。在進(jìn)行嵌入式軟件黑盒測試時,要把系統(tǒng)的預(yù)期用途作為重要依據(jù),根據(jù)需求中對負(fù)載、定時、性能的要求,判斷軟件是否滿足這些需求規(guī)范。為了保證正確地測試,還須要檢驗軟硬件之間的接口。嵌入式軟件黑盒測試的一個重要方面是極限測試。在使用環(huán)境中,通常要求嵌入式軟件的失效過程要平穩(wěn),所以,黑盒測試不儀要檢查軟件工作過程,也要檢查軟件換效過程。 2、目標(biāo)環(huán)境測試和宿主環(huán)境測試 在嵌入式軟件測試中,常常要在基于目標(biāo)的測試和基于宿主的測試之間作出折衷?;谀繕?biāo)的測試消耗較多的經(jīng)費和時間,而基于宿主的測試代價較小,但畢竟是在模擬環(huán)境中進(jìn)行的。目前的趨勢是把更多的測試轉(zhuǎn)移到宿主環(huán)境中進(jìn)行,但是,目標(biāo)環(huán)境的復(fù)雜性和獨特性不可能完全模擬。 在兩個環(huán)境中可以出現(xiàn)不同的軟件缺陷,重要的是目標(biāo)環(huán)境和宿主環(huán)境的測試內(nèi)容有所選擇。在宿主環(huán)境中,可以進(jìn)行邏輯或界面的測試、以及與硬件無關(guān)的測試。在模擬或宿主環(huán)境中的測試消耗時間通常相對較少,用調(diào)試工具可以更快地完成調(diào)試和測試任務(wù)。而與定時問題有關(guān)的白盒測試、中斷測試、硬件接口測試只能在目標(biāo)環(huán)境中進(jìn)行。在軟件測試周期中,基于目標(biāo)的測試是在較晚的“硬件/軟件集成測試”階段開始的,如果不更早地在模擬環(huán)境中進(jìn)行白盒測試,而是等到“硬件/軟件集成測試”階段進(jìn)行全部的白盒測試,將耗費更多的財力和人力。二、嵌入式軟件的測試工具 用于輔助嵌入式軟件測試的工具很多,下面對幾類比較有用的有關(guān)嵌入式軟件的測試工具加以介紹和分析。 1、內(nèi)存分析工具 在嵌入式系統(tǒng)中,內(nèi)存約束通常是有限的。內(nèi)存分析工具用來處理在動態(tài)內(nèi)存分配中存在的缺陷。當(dāng)動態(tài)內(nèi)存被錯誤地分配后,通常難以再現(xiàn),可能導(dǎo)致的失效難以追蹤,使用內(nèi)存分析工具可以避免這類缺陷進(jìn)入功能測試階段。目前有兩類內(nèi)存分析工具——軟件和硬件的。基于軟件的內(nèi)存分析工具可能會對代碼的性能造成很大影響,從而嚴(yán)重影響實時操作;基于硬件的內(nèi)存分析工具價格昂貴,而且只能在工具所限定的運行環(huán)境中使用。 2、性能分析工具 在嵌入式系統(tǒng)中,程序的性能通常是非常重要的。經(jīng)常會有這樣的要求,在特定時間內(nèi)處理一個中斷,或生成具有特定定時要求的一幀。開發(fā)人面臨的問題是決定應(yīng)該對哪一部分代碼進(jìn)行優(yōu)化來改進(jìn)性能,常常會花大量的時間去優(yōu)化那些對性能沒有任何影響的代碼。性能分析工具會提供有關(guān)的數(shù)據(jù),說明執(zhí)行時間是如何消耗的,是什么時候消耗的,以及每個例程所用的時間。根據(jù)這些數(shù)據(jù),確定哪些例程消耗部分執(zhí)行時間,從而可以決定如何優(yōu)化軟件,獲得更好的時間性能。對于大多數(shù)應(yīng)用來說,大部分執(zhí)行時間用在相對少量的代碼上,費時的代碼估計占所有軟件總量的5%-20%。性能分析工具不僅能指出哪些例程花費時間,而且與調(diào)試工具聯(lián)合使用可以引導(dǎo)開發(fā)人員查看需要優(yōu)化的特定函數(shù),性能分析工具還可以引導(dǎo)開發(fā)人員發(fā)現(xiàn)在系統(tǒng)調(diào)用中存在的錯誤以及程序結(jié)構(gòu)上的缺陷。 3、GUI測試工具 很多嵌入式應(yīng)用帶有某種形式的圖形用戶界面進(jìn)行交互,有些系統(tǒng)性能測試足根掘用戶輸入響應(yīng)時間進(jìn)行的。GUI測試工具可以作為腳本工具有開發(fā)環(huán)境中運行測試用例,其功能包括對操作的記錄和回放、抓取屏幕顯示供以后分析和比較、設(shè)置和管理測試過程。很多嵌入式設(shè)備沒有GUI,但常常可以對嵌入式設(shè)備進(jìn)行插裝來運行GUI測試腳本,雖然這種方式可能要求對被測代碼進(jìn)行更改,但是節(jié)省了功能測試和回歸測試的時間。 4、覆蓋分析工具 在進(jìn)行白盒測試時,可以使用代碼覆蓋分析工具追蹤哪些代碼被執(zhí)行過。分析過程可以通過插裝來完成,插裝可以是在測試環(huán)境中嵌入硬件,也可以是在可執(zhí)行代碼中加入軟件,也可以是二者相結(jié)合。測試人員對結(jié)果數(shù)據(jù)加以總結(jié),確定哪些代碼被執(zhí)行過,哪些代碼被巡漏了。覆蓋分析工具一般會提供有關(guān)功能覆蓋、分支覆蓋、條件覆蓋的信息。對于嵌入式軟件來說,代碼覆蓋分析工具可能侵入代碼的執(zhí)行,影響實時代碼的運行過程。基于硬件的代碼覆蓋分析工具的侵入程度要小一些,但是價格一般比較昂貴,而且限制被測代碼的數(shù)量。三、嵌入式軟件測試策略 在嵌入式領(lǐng)域目標(biāo)系統(tǒng)的應(yīng)用系統(tǒng)日趨復(fù)雜,而由于競爭要求產(chǎn)品快速上市,開發(fā)技術(shù)日新月異,同時硬件發(fā)展的日益穩(wěn)定,而軟件故障卻日益突出,軟件的重要性逐漸引起人們的重視,越來越多的人認(rèn)識到嵌入式系統(tǒng)的測試勢在必行。提到嵌入式軟件測試,首先要簡單介紹一些軟件工程的一些觀點,現(xiàn)在,被普遍接受的軟件的定義是:軟件(software)是計算機系統(tǒng)中與硬件(hardware)相互依存的另一部分,它包括程序(program)、相關(guān)數(shù)據(jù)(data)及其說明文檔(document)。其中程序是按照事先設(shè)計的功能和性能要求執(zhí)行的指令序列;數(shù)據(jù)是是程序能正常操縱信息的數(shù)據(jù)結(jié)構(gòu);文檔是與程序開發(fā)維護(hù)和使用有關(guān)的各種圖文資料。 對于一般商用軟件的測試,嵌入式軟件測試有其自身的特點和測試?yán)щy。 由于嵌入式系統(tǒng)的自身特點,如實時性(Real-timing),內(nèi)存不豐富,I/O通道少,開發(fā)工具昂貴,并且與硬件緊密相關(guān)CPU種類繁多,等等。嵌入式軟件的開發(fā)和測試也就與一般商用軟件的開發(fā)和測試策略有了很大的不同,可以說嵌入式軟件是最難測試的一種軟件。 嵌入式軟件測試使用有效的測試策略是唯一的出路,它可以使開發(fā)的效率最大化,避免目標(biāo)系統(tǒng)的瓶頸,使用在線仿真器節(jié)省昂貴的目標(biāo)資源。自從出現(xiàn)高級語言,開發(fā)環(huán)境與最終運行環(huán)境通常都是存在差異的,嵌入式系統(tǒng)更是如此。開發(fā)環(huán)境被認(rèn)為是主機平臺,軟件運行環(huán)境為目標(biāo)平臺。相應(yīng)的測試為host-target測試或cross-testing。 討論嵌入式軟件測試首先就會遇到一個問題:為什么不把所有測試都放在目標(biāo)上進(jìn)行呢?因為若所有測試都放在目標(biāo)平臺上有很多不利的因素: 1)測試軟件,可能會造成與開發(fā)者爭奪時間的瓶頸,避免它只有提供更多的目標(biāo)環(huán)境。2)目標(biāo)環(huán)境可能還不可行。3)比起主機平臺環(huán)境,目標(biāo)環(huán)境通常是不精密的和不方便的。4)提供給開發(fā)者的目標(biāo)環(huán)境和聯(lián)合開發(fā)環(huán)境通常是很昂貴的。7)使用主機與目標(biāo)環(huán)境之間有什么限制(如軟件安全標(biāo)準(zhǔn))? 任何人或組織進(jìn)行嵌入式軟件的測試都應(yīng)深入考慮以上問題,結(jié)合自身實際情況,選定合理測試策略和方案。 對于嵌入式軟件測試或叫交叉測試(cross-test),在測試的各個階段有著通用的策略: 1.單元測試 所有單元級測試都可以在主機環(huán)境上進(jìn)行,除非少數(shù)情況,特別具體指定了單元測試直接在目標(biāo)環(huán)境進(jìn)行。最大化在主機環(huán)境進(jìn)行軟件測試的比例,通過盡可能小的目標(biāo)單元訪問所有目標(biāo)指定的界面。 在主機平臺上運行測試速度比在目標(biāo)平臺上快的多,當(dāng)在主機平臺完成測試,可以在目標(biāo)環(huán)境上重復(fù)作一簡單的確認(rèn)測試,確認(rèn)測試結(jié)果在主機和目標(biāo)機上沒有被他們的不同影響。在目標(biāo)環(huán)境上進(jìn)行確認(rèn)測試將確定一些未知的,未預(yù)料到的,未說明的主機與目標(biāo)機的不同。例如,目標(biāo)編譯器可能有bug,但在主機編譯器上沒有。 2.集成測試 軟件集成也可在主機環(huán)境上完成,在主機平臺上模擬目標(biāo)環(huán)境運行,當(dāng)然在目標(biāo)環(huán)境上重復(fù)測試也是必須的,在此級別上的確認(rèn)測試將確定一些環(huán)境上的問題,比如內(nèi)存定位和分配上的一些錯誤。在主機環(huán)境上的集成測試的使用,依賴于目標(biāo)系統(tǒng)的具體功能有多少。有些嵌入式系統(tǒng)與目標(biāo)環(huán)境耦合的非常緊密,若在主機環(huán)境做集成是不切實際的。一個大型軟件的開發(fā)可以分幾個級別的集成。低級別的軟件集成在主機平臺上完成有很大優(yōu)勢,越往后的集成越依賴于目標(biāo)環(huán)境。 3.系統(tǒng)測試和確認(rèn)測試 所有的系統(tǒng)測試和確認(rèn)測試必須在目標(biāo)環(huán)境下執(zhí)行。當(dāng)然在主機上開發(fā)和執(zhí)行系統(tǒng)測試,然后移植到目標(biāo)環(huán)境重復(fù)執(zhí)行是很方便的。對目標(biāo)系統(tǒng)的依賴性會妨礙將主機環(huán)境上的系統(tǒng)測試移植到目標(biāo)系統(tǒng)上,況且只有少數(shù)開發(fā)者會卷入系統(tǒng)測試,所以有時放棄在主機環(huán)境上執(zhí)行系統(tǒng)測試可能更方便。 確認(rèn)測試最終的實施舞臺必須在目標(biāo)環(huán)境中,系統(tǒng)的確認(rèn)必須在真實系統(tǒng)之下測試,而不能在主機環(huán)境下模擬。這關(guān)系到嵌入式軟件的最終使用。 包括恢復(fù)測試、安全測試、強度測試、性能測試,已超出了軟件測試的范疇,本文暫不討論。 使用有效的cross-test測試策略可極大的提高嵌入式軟件開發(fā)測試的水平和效率,當(dāng)然正確的測試工具使用也是必不可少的: 總結(jié)一下,應(yīng)用以上測試工具進(jìn)行.Cross-test時的策略: A)使用測試工具的插裝功能(主機環(huán)境)執(zhí)行靜態(tài)測試分析,并且為動態(tài)覆蓋測試準(zhǔn)備好一插裝好的軟件代碼。B)使用源碼在主機環(huán)境執(zhí)行功能測試,修正軟件的錯誤和測試腳本中的錯誤。C)使用插裝后的軟件代碼執(zhí)行覆蓋率測試,添加測試用例或修正軟件的錯誤,保證達(dá)到所要求的覆蓋率目標(biāo)。D)在目標(biāo)環(huán)境下重復(fù)(B),確認(rèn)軟件在目標(biāo)環(huán)境中執(zhí)行測試的正確性。E)若測試需要達(dá)到極端的完整性,最好在目標(biāo)系統(tǒng)上重復(fù)(C),確定軟件的覆蓋率沒有改變。 通常在主機環(huán)境執(zhí)行多數(shù)的測試,只是在最終確定測試結(jié)果和最后的系統(tǒng)測試才移植到目標(biāo)環(huán)境,這樣可以避免發(fā)生訪問目標(biāo)系統(tǒng)資源上的瓶頸,也可以減少在昂貴資源如在線仿真器上的費用。另外,若目標(biāo)系統(tǒng)的硬件由于某種原因而不能使用時,最后的確認(rèn)測試可以推遲直到目標(biāo)硬件可用,這為嵌入式軟件的開發(fā)測試提供了彈性。設(shè)計軟件的可移植性是成功進(jìn)行cross-test的先決條件,它通??梢蕴岣哕浖馁|(zhì)量,并且度軟件的維護(hù)大有益處。以上所提到的測試工具,都可以通過各自的方式提供測試在主機與目標(biāo)之間的移植,從而使嵌入式軟件的測試得以方便的執(zhí)行。 使用有效的cross-test測試策略可極大的提高嵌入式軟件開發(fā)測試的水平和效率,提高嵌入式軟件的質(zhì)量。附錄:1). HOST-TARGET的連接方法簡介:圖1-- 直接連接圖2 -- 通過仿真器連接圖3 -- 使用介質(zhì)進(jìn)行間接連接圖4 -- 使用PROM等傳遞被測軟件圖5 -- 測試的交互界面圖6 -- 無交互界面的連接四、結(jié)論 嵌入式系統(tǒng)在人類生活中發(fā)揮著重要的作用,包括飛行控制器這樣的控制系統(tǒng),以及洗衣機這樣的家用電器。日前,嵌入式系統(tǒng)中軟件的比重越來越大,也越來越復(fù)雜,保證嵌入式軟件的可靠性正面臨嚴(yán)峻的挑戰(zhàn)。 大多數(shù)軟件測試方法都可以直接或間接地用于嵌入式軟件的測試,但是由于操作系統(tǒng)的實時和嵌入式特性,嵌入式軟件測試也面臨一些特殊的問題。雖然日前已經(jīng)有一些針對嵌入式軟件的測試和調(diào)試工具,但是在有些方面仍存在不足,包括許多任務(wù)操作系統(tǒng)的并發(fā)、非侵入式的測試和凋試、嵌入式系統(tǒng)的軟件抽象等。對于嵌入式軟件測試技術(shù)的研究人選測試工具有待開發(fā),仍須要做很多進(jìn)一步的工作。
zenghuo721
你現(xiàn)在還是實習(xí)生,為什么要把自己的定位放在測試上呢?你既然是學(xué)開發(fā)的,那就應(yīng)該走開發(fā)的路,走測試的路,在國內(nèi)行不通,工資低,并且地位也不高。自己你有點開發(fā)的基礎(chǔ)了,應(yīng)該去自學(xué)嵌入式開發(fā)!??!這對你以后才是比較好的路。學(xué)習(xí)嵌入式,該學(xué)習(xí)什么基本的知識呢?首先C語言,這個是毋庸置疑的,不管是做嵌入式軟件還是硬件開發(fā)的人員,對C語言的掌握這個是必需的,特別是對于以后致力于嵌入式軟件開發(fā)的人,現(xiàn)在絕大部分都是用C語言,你說不掌握它可以嗎?至于如何學(xué)習(xí)C語言,我想這些基礎(chǔ)的知識每個人都有自己的方法,關(guān)鍵要去學(xué)習(xí),看書也好,網(wǎng)上找些視頻看也好。很多人會問,C語言要學(xué)到怎么樣,我覺得這沒有標(biāo)準(zhǔn)的答案。我想至少你在明白了一些基礎(chǔ)的概念后,就該寫代碼了,動手才是最重要的,當(dāng)你動手了,遇到問題了,再反過來學(xué)習(xí),反過來查查課本,那時的收獲就不是你死看書能得到的。其次,應(yīng)該對操作系統(tǒng)有所了解,這對你對硬件和軟件的理解,絕對有很大的幫助。應(yīng)該把系統(tǒng)的管理理解一下,比如進(jìn)程、線程,系統(tǒng)如何來分配資源的,系統(tǒng)如何來管理硬件的,當(dāng)然,不是看書就能把這些理解透,如果不是一時能理解,沒關(guān)系,多看看,結(jié)合以后的項目經(jīng)驗,會有更好的理解的。還有應(yīng)該學(xué)習(xí)嵌入式系統(tǒng),如linux或者wince下的編程,這些對以后做應(yīng)用的編程很有幫助,當(dāng)然,如果做手機的話,那可以學(xué)習(xí)MTK、塞班、Android等操作系統(tǒng),Android是以后發(fā)展的趨勢,現(xiàn)在很熱門,Android也是基于linux系統(tǒng)封裝的,所以建議先學(xué)習(xí)下linux。還有,應(yīng)該學(xué)習(xí)下單片機或者ARM或者M(jìn)IPS,很多人說我沒有單片機的經(jīng)驗,直接學(xué)ARM可以嗎?我覺得那完全沒有問題的,當(dāng)然如果你學(xué)習(xí)過單片機,那最好不過了,以后學(xué)習(xí)ARM就更簡單了。最后如果你把以上的知識都有所了解后,就該去閱讀閱讀一些優(yōu)秀的代碼,比如結(jié)合arm芯片手冊學(xué)習(xí)去學(xué)習(xí)下UBOOT的源代碼,了解下最小的系統(tǒng)開發(fā),那對你整個嵌入式開發(fā)的非常有幫助的,可以的話,還可以學(xué)習(xí)下linux的源代碼,當(dāng)然如果你直接閱讀的代碼,我想你會很痛苦的,可以先看看linux 代碼早期的版本,比如 的代碼等等,麻雀雖小,五臟俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程師。至于上面說的知識如何學(xué)習(xí)呢?每個人都應(yīng)該去找自己最好的方法,所謂的最好的方法就是最適合自己的方法。很多人看不進(jìn)書,那就去看看視頻吧。視頻也應(yīng)該要選擇,不是隨便看看,應(yīng)該要有所選擇,有所挑選。我也是這樣一路走過來的,不過我這人比較懶,我看不進(jìn)書,一看書我就想睡覺,所以這幾年我都是看視頻過來的,現(xiàn)在也算學(xué)有所成,但也不敢說是高手吧。我在網(wǎng)上看到,有人把自己學(xué)習(xí)嵌入式的視頻總結(jié)出來,嵌入式系列實踐和視頻教程,大家可以看看網(wǎng)址 我仔細(xì)看了覺得很不錯,我本來也想整理下,可是奈何我自己的電腦硬盤空間才40G,沒有辦法,時間也是不夠,心有余而力不足,我不是在幫他做廣告,雖然要花錢,我覺得算不錯,至少自己不用去整理和花大量的時間去找資源,當(dāng)然如果網(wǎng)上有的下,你網(wǎng)速和硬盤都夠的話,我建議大家自己網(wǎng)上下也好。想想我自己該開始學(xué)的時候,那時視頻資源少之又少,我買書和買視頻至少花了幾千塊,但是我覺得那很值,至少我現(xiàn)在賺回來了很多知識。 最后,希望這篇文章對熱愛嵌入式,想致力于嵌入式開發(fā)的朋友有所幫助。送給大家一句簡單而又樸素的話,堅持就是勝利,貴在堅持,也可以看看如何堅持嵌入式學(xué)習(xí)]
卷毛咕咕
你這是要參加面試了嗎?我這也剛學(xué)習(xí),也是從事嵌入式軟件工程師的。我剛從我們學(xué)校官網(wǎng)扒的面試題:你參考一下:這是華清遠(yuǎn)見從某嵌入式軟件公司索取的一套面試題,很顯然對于嵌入式軟件工程師來說這都是"小菜",那么您可以測試一下,這樣會對公司出的面試題不那么恐懼,希望對你有所幫助。一、選擇題1.下述程序執(zhí)行后的輸出結(jié)果是#includemain(){int x='f';printf("%c\n",'a'+(x-'a'+1));}.下列程序代碼在Linux系統(tǒng)執(zhí)行后"*"會被輸出多少次()void main(){int i;for(i=0;i<3;i++){fork();printf("*\n");}return;}.下面有關(guān)孤兒進(jìn)程和僵尸進(jìn)程的描述,說法錯誤的是?A.孤兒進(jìn)程:一個父進(jìn)程退出,而它的一個或多個子進(jìn)程還在運行,那么那些子進(jìn)程將成為孤兒進(jìn)程。B.僵尸進(jìn)程:一個進(jìn)程使用fork創(chuàng)建子進(jìn)程,如果子進(jìn)程退出,而父進(jìn)程并沒有調(diào)用wait或waitpid獲取子進(jìn)程的狀態(tài)信息,那么子進(jìn)程的進(jìn)程描述符仍然保存在系統(tǒng)中。這種進(jìn)程稱之為僵死進(jìn)程。C.孤兒進(jìn)程將被init進(jìn)程(進(jìn)程號為1)所收養(yǎng),并由init進(jìn)程對它們完成狀態(tài)收集工作。D.孤兒進(jìn)程和僵尸進(jìn)程都可能使系統(tǒng)不能產(chǎn)生新的進(jìn)程,都應(yīng)該避免參考答案:D4.假如你需要找出/etc/文件屬于哪個包(package),你可以執(zhí)行:() -requires/etc/ -q/etc/ -q|grep /etc/ -qf /etc/.表達(dá)式 strcmp( " "," " ) 的值是一個A.非零整數(shù)B.浮點數(shù).字符6.調(diào)用recv(int sockfd, void *buf, size_t len, int flags)的過程中,一共進(jìn)行了幾次內(nèi)存復(fù)制操作?.打印一個N*N的方陣,N為每邊字符的個數(shù)( 3〈N〈20 ),要求最外層為"X",第二層為"Y",從第三層起每層依次打印數(shù)字0,1,2,3,...例子:當(dāng)N =5,打印出下面的圖形: X X X Y Y Y Y 0 Y Y Y Y X8.設(shè)#define N 3#define Y(n) ((N+1)*n)則表達(dá)式2*(N+Y(5+1))的值是.出錯二、簡答題1、關(guān)鍵字const有什么含意?2、.h頭文件中的ifndef/define/endif?的作用?3、多態(tài)類中的虛函數(shù)表是Compile-Time,還是Run-Time時建立的?你如果不知道答案的話,可以去 華清的嵌入式學(xué)院找。有原文的。
優(yōu)質(zhì)工程師考試問答知識庫