版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、8.1 選擇題 (695) 根據(jù)編碼規(guī)范,下面說(shuō)法正確的是_a_。 a. 可以使用類型定義符typedef重命名用戶類型; b. typedef char NAME20; 是正確的定義; c. 可以用宏定義來(lái)代替typedef的功能; d. typedef是在預(yù)編譯時(shí)完成的。 (a) (696) 下面關(guān)于宏定義的說(shuō)法正確的是:_abcd_ a. 雖然預(yù)處理程序可以用#include指令包含任意一個(gè)文件,但最好不要用#include指令包含類型名不是.h的文件,因?yàn)檫@樣不容易區(qū)分哪些文件是用于編譯預(yù)處理的; b. 宏表達(dá)式及其參數(shù)應(yīng)該使用括號(hào)括起來(lái)以避免二義性; c. 盡量避免直接在代碼中使用數(shù)
2、字,應(yīng)使用有意義的宏定義名字; d. 宏所定義的多條表達(dá)式應(yīng)放在大括號(hào)內(nèi)。 (a.b.c.d) (697) 下面宏定義符合規(guī)范的是_d_ a. #define REC_AREA(a, b) a * b; b. #define REC_AREA(a, b) (a * b); c. #define REC_AREA(a, b) (a) * (b); d. #define REC_AREA(a, b) (a) * (b) (d) (698) 以下敘述正確的是_c_。 a. 根據(jù)編碼規(guī)范,在程序的-行上可以出現(xiàn)多個(gè)有效的預(yù)處理命令行 b. 使用帶參的宏時(shí),參數(shù)的類型應(yīng)與宏定義時(shí)的一致 c. 宏替換不占
3、用運(yùn)行時(shí)間,只占編譯時(shí)間 d. 在以下定義中C R是稱為宏名的標(biāo)識(shí)符 #define C R 045 (c) (699) 閱讀下面程序:_b_ #define LETTER 0 main() char str20=MultiMedia,c; int I; I=0; While(c=strI)!=0) I+; #if LETTER if(c=a&c=A&cy?x:y (a.b.c.d) (704) 在下列有關(guān)宏替換的敘述中,正確的說(shuō)法是_d_。 a. 宏替換占用運(yùn)行時(shí)間 b. 宏名有類型 c. 帶參數(shù)的宏替換和函數(shù)等價(jià) d. 宏替換只是字符替換 (d) (705) 設(shè)有以下宏定義:_a_ #de
4、fine N 3 #define Y(n)(N1)*n) 則執(zhí)行語(yǔ)句:z=2 *(NY(51);后,z的值為 a. 出錯(cuò) b. 42 c. 48 d. 54 (a) (706) 宏定義#define PI 31.14159中,宏名PI代替_d_。 a. 單精度 b. 雙精度 c. 常量 d. 字符串 (d) (707) 編譯預(yù)處理命令以_d_結(jié)尾。 a. ; b. . c. d. 回車 (d) 8.2 填空題 (708) 設(shè)有以下宏定義: #define WIDTH 80 #define LENGTH WIDTH+40 則執(zhí)行賦值語(yǔ)句: v=LENGTH*20;(v為int型變量)后,v的值是
5、_。 (709) 以下程序運(yùn)行結(jié)果是_。 #define DEBUG main() int a=20,b=10,c; c=a/b; #ifndef DEBUG printf(a=%o,b=%o,a,b); #endif printf(c=%dn,c); (710) 設(shè)有以下程序,為使之正確運(yùn)行,請(qǐng)?jiān)诶ㄌ?hào)中填入應(yīng)包含的命令行。其中函數(shù)try_me在myfile.h中定義。 _ _ main() printf(n); try_me(); printf(n); (711) 下面程序的運(yùn)行結(jié)果是_: #define MUL(z) (z)*(z) main() printf(%dn,MUL(1+2)+3
6、); (712) 下列程序段的輸出是_。 #define f(a, b, x) a*x+b printf(%d, %dn, f(3,2,1), f(6, 5, f(3, 2, 1); (713) 若有以下宏定義:#define STR %d,%c #define A 97 已知字符a的ASCII碼值為97,則語(yǔ)句printf(STR,A,A+2);的輸出結(jié)果為_(kāi)。 (714) 宏定義有效范圍從定義處開(kāi)始,到本源程序結(jié)束處中止。但可以用_來(lái)提前解除宏定義的作用。 (715) 下面程序的輸出結(jié)果是_。 #define FMT %d, main() int b4 = 1,3,5,7,9,11,13,
7、15,17,19,21,23; printf(FMT, *(*(b+1)+1); printf(FMT, b22); 8.3 問(wèn)答與設(shè)計(jì) (716) 下面類型定義語(yǔ)句,哪種方法更好?為什么? #define dPS struct s * typedef struct s * tPS; (717) 頭文件中的ifndef/define/endif語(yǔ)句是干什么用的? (718) 判斷下面預(yù)編譯條件語(yǔ)句是否正確,并改正: if (cond = GLRUN) #ifdef DEBUG | (cond = GLWAIT) #endif ) (719) 判斷下面預(yù)編譯條件語(yǔ)句是否正確,并改正: #defi
8、ne INIT_RECT_VALUE(a, b) a = 0; b = 0; (720) 用typedef定義一個(gè)文件指針FP。 (721) 假如使用了禁止在while的條件部分進(jìn)行賦值的編譯程序選擇項(xiàng),為什么可以查出下面代碼中的運(yùn)算優(yōu)先級(jí)錯(cuò)誤? While(ch = getchar() != EOF) (722) 怎樣使用編譯程序查出下面無(wú)意使用的空語(yǔ)句和賦值語(yǔ)句? a. if (nCome = 063)。這里程序的本意是十進(jìn)制63判斷,但因?yàn)榍懊娑嗔艘粋€(gè)0使063成了八進(jìn)制數(shù)。結(jié)果變成了51。 b. If(pb != NULL & pb != 0 xff)。這里不小心把&鍵入為&,結(jié)果即使
9、pb等于NULL還會(huì)執(zhí)行*pb != 0 xff。 c. quot = numer/*pdenom。這里無(wú)意間多了個(gè)*號(hào)結(jié)果使/*被解釋為注釋的開(kāi)始。 d. word = bHigh8 + bLow。由于出現(xiàn)了運(yùn)算優(yōu)先級(jí)錯(cuò)誤,該語(yǔ)句被解釋成了:word = bHigh 65535U #endif 怎樣使預(yù)處理程序報(bào)告出這一錯(cuò)誤? (725) 什么是宏(macro)?使用宏有哪些好處? (726) 請(qǐng)說(shuō)明有參宏和有參函數(shù)的區(qū)別。 (727) 請(qǐng)說(shuō)明宏定義的有效范圍。 (728) 文件包含的優(yōu)點(diǎn)是什么? (729) 請(qǐng)寫(xiě)出條件編譯的宏命令。 (730) 指針作為函數(shù)參數(shù)時(shí)能夠改變實(shí)參的值,請(qǐng)說(shuō)明其
10、原理。 (731) 使用宏更好,還是使用函數(shù)更好? (732) 什么時(shí)候應(yīng)該用宏代替函數(shù)? (733) 怎樣建立對(duì)類型不敏感的宏? (734) 什么是標(biāo)準(zhǔn)預(yù)定義宏? (735) 怎樣取消一個(gè)已定義的宏? (736) 預(yù)處理程序(preprocessor)有什么作用? (737) 什么是標(biāo)準(zhǔn)預(yù)定義宏? (738) 標(biāo)準(zhǔn)預(yù)定義宏_FILE_有什么作用? (739) 標(biāo)準(zhǔn)預(yù)定義宏_LINE_有什么作用? (740) 標(biāo)準(zhǔn)預(yù)定義宏_DATE_和_TIME_有什么作用? (741) 怎樣才能使程序打印出發(fā)生錯(cuò)誤的行號(hào)? (742) 怎樣才能使程序打印出發(fā)生錯(cuò)誤的源文件名? (743) 怎樣判斷一個(gè)程序是
11、用C編譯程序還是用C+編譯程序編譯的? (744) 怎樣避免多次包含同一個(gè)頭文件? (745) 可以用#include指令包含類型名不是.h的文件嗎? (746) #include 和#includefile有什么不同? (747) 預(yù)處理指令#pragma有什么作用? (748) #line有什么作用? (749) 包含文件可以嵌套嗎? 包含文件最多可以嵌套幾層? (750) 用#define指令說(shuō)明常量有什么好處? (751) 與用#define指令說(shuō)明常量相比,用enum關(guān)鍵字說(shuō)明常量有什么好處? (752) 怎樣檢查一個(gè)符號(hào)是否已被定義? (753) 如何使部分程序在演示版中失效? (
12、754) 預(yù)處理指令#pragma有什么作用? (755) #line有什么作用? (756) 連接運(yùn)算符#有什么作用? (757) 請(qǐng)說(shuō)明typedef與#define的共同點(diǎn)和不同點(diǎn)。 (758) 當(dāng)程序員為枚舉類型增加新元素時(shí),有時(shí)會(huì)忘記在相應(yīng)的switch語(yǔ)句中增加新的case條件。怎樣才能使用斷言幫助查出這個(gè)問(wèn)題? (759) 請(qǐng)指出下面函數(shù)中的斷言的錯(cuò)誤并改正。 /* getline 將一個(gè)以n結(jié)尾的行讀入緩沖區(qū)中 */ void getline(char* pch) int ch; / ch必須是int do ASSERT( (ch = getchar() != EOF ); W
13、hile( (*pch+=ch) != n ) (760) 每當(dāng)使用ASSERT,宏_FILE_就產(chǎn)生一個(gè)唯一的文件名字符串。怎樣實(shí)現(xiàn)ASSERT宏,才能使文件名字符串在每個(gè)文件中只被定義一次? (761) 用預(yù)處理指令#define 聲明一個(gè)常數(shù),用以表明1年中有多少秒(忽略閏年問(wèn)題)。 (762) 寫(xiě)一個(gè)標(biāo)準(zhǔn)宏MIN ,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。 #define MIN(A,B) (A)= (B) ? (A) : (B) ) (763) 預(yù)處理器標(biāo)識(shí)#error的目的是什么? (764) 寫(xiě)出下列程序段的輸出結(jié)果。 #define A 10 #define B (AA+2)-2
14、printf(%d, B*2); (765) 頭文件中的 ifndef/define/endif 干什么用? (766) #include 和 #includefilename.h 有什么區(qū)別? (767) 用typedef語(yǔ)句定義一個(gè)返回整型的函數(shù)指針類型FPI。 9. 內(nèi)存管理 9.1 填空題 (768) 下面程序的輸出是_,為什么? char *ptr; if (ptr = (char *)malloc(0) = NULL) puts(Got a null pointer); else puts(Got a valid pointer); (769) 以下程序運(yùn)行后的輸出結(jié)果是_ 。 m
15、ain() char m; m=B+32; printf(%cn,m); 已有定義如下: struct node int data; struct node *next; *p; 以下語(yǔ)句調(diào)用malloc函數(shù),使指針p指向一個(gè)具有struct node類型的動(dòng)態(tài)存儲(chǔ)空間。請(qǐng)?zhí)羁铡?p = (struct node *)malloc(_); (770) 在絕對(duì)地址0 xXXXXXXXX上寫(xiě)入字符a的語(yǔ)句是_。 unsigned char *p = (unsigned char *)0 xF000FF00; *p = a; 9.2 問(wèn)答與設(shè)計(jì) (771) 對(duì)下面程序段進(jìn)行解釋: typedef v
16、oid (*lpFunction)(); lpFunction lpReset = (lpFunction)0 xF000FFF0; lpReset(); (772) 結(jié)合編譯優(yōu)化原理,指出下面程序存在的問(wèn)題并修改。 int a,b,c; a = inWord(0 x100); / 讀取I/O空間0 x100端口的內(nèi)容存入a變量 b = a; a = inWord (0 x100); / 再次讀取I/O空間0 x100端口的內(nèi)容存入a變量 c = a; (773) 以下為常見(jiàn)的內(nèi)存錯(cuò)誤,請(qǐng)分別給出解決措施: a. 內(nèi)存分配未成功,卻使用了它; b. 內(nèi)存分配雖然成功,但是尚未初始化就引用它;
17、c. 忘記了釋放內(nèi)存,造成內(nèi)存泄露; d. 內(nèi)存釋放成功,卻繼續(xù)使用它。 (774) 嵌入式系統(tǒng)中動(dòng)態(tài)分配內(nèi)存可能發(fā)生的問(wèn)題有哪些? (775) 請(qǐng)分析下面代碼,指出問(wèn)題并改正: void GetMemory(T_S8 *p, T_S16 nNum) p = (T_S8 *)malloc(sizeof(T_S8) * nNum); void Test(void) T_S8 *str = NULL; GetMemory(str, 100); strcpy(str, hello); (776) 用malloc()函數(shù)更好還是用calloc()函數(shù)更好? (777) 說(shuō)明變量存儲(chǔ)在內(nèi)存(memory
18、)中的什么地方。 (778) 什么是堆? (779) 什么是棧? (780) 什么是頁(yè)抖動(dòng)?有些操作系統(tǒng)(如UNIX和增強(qiáng)模式下的Windows)使用虛擬內(nèi)存,這是一種使機(jī)器的作業(yè)地址空間大于實(shí)際內(nèi)存的技術(shù),它是通過(guò)用磁盤空間模擬RAM(randomaccess memory)來(lái)實(shí)現(xiàn)的。在80386和更高級(jí)的Intel CPU芯片中,在現(xiàn)有的大多數(shù)其它微處理器(如Motorola 68030,sparc和Power PC)中,都有一個(gè)被稱為內(nèi)存管理單元(Memory Management Unit,縮寫(xiě)為MMU)的器件。MMU把內(nèi)存看作是由一系列“頁(yè)(page)”組成的來(lái)處理。一頁(yè)內(nèi)存是指一個(gè)
19、具有一定大小的連續(xù)的內(nèi)存塊,通常為4096或8192字節(jié)。操作系統(tǒng)為每個(gè)正在運(yùn)行的程序建立并維護(hù)一張被稱為進(jìn)程內(nèi)存映射(Process Memory Map,縮與為PMM)的表,表中記錄了程序可以存取的所有內(nèi)存頁(yè)以及它們的實(shí)際位置。每當(dāng)程序存取一塊內(nèi)存時(shí),它會(huì)把相應(yīng)的地址(虛擬地址,virtualaddress)傳送給MMU,MMU會(huì)在PMM中查找這塊內(nèi)存的實(shí)際位置(物理地址,physical address),物理地址可以是由操作系統(tǒng)指定的在內(nèi)存中或磁盤上的任何位置。如果程序要存取的位置在磁盤上,就必須把包含該地址的頁(yè)從磁盤上讀到內(nèi)存中,并且必須更新PMM以反映這個(gè)變化(這被稱為pagefa
20、ult,即頁(yè)錯(cuò))。希望你繼續(xù)讀下去,因?yàn)橄旅婢鸵榻B其中的難點(diǎn)了。存取磁盤比存取RAM要慢得多,所以操作系統(tǒng)會(huì)試圖在RAM中保持盡量多的虛擬內(nèi)存。如果你在運(yùn)行一個(gè)非常大的程序(或者同時(shí)運(yùn)行幾個(gè)小程序),那么可能沒(méi)有足夠的RAM來(lái)承擔(dān)程序要使用的全部?jī)?nèi)存,因此必須把一些頁(yè)從RAM中移到磁盤上(這被為pagingout,即頁(yè)出)。 操作系統(tǒng)會(huì)試圖去判斷哪些頁(yè)可能暫時(shí)不會(huì)被使用(通常基于過(guò)去使用內(nèi)存的情況),如果它判斷錯(cuò)了,或者程序正在很多地方存取很多內(nèi)存,那么為了讀入已調(diào)出的頁(yè),就會(huì)產(chǎn)生大量頁(yè)錯(cuò)動(dòng)作。因?yàn)镽AM已被全部使用,所以為了調(diào)入要存取的一頁(yè),必須調(diào)出另一頁(yè),而這將導(dǎo)致更多的頁(yè)錯(cuò)動(dòng)作,因?yàn)榇?/p>
21、時(shí)不同的一頁(yè)已被移到磁盤上。在短時(shí)間內(nèi)出現(xiàn)大量頁(yè)錯(cuò)動(dòng)作的情形被稱為頁(yè)抖動(dòng),它將大大降低系統(tǒng)的執(zhí)行效率。頻繁存取內(nèi)存中大量散布的位置的程序更容易在系統(tǒng)中造成頁(yè)抖動(dòng)。如果同時(shí)運(yùn)行許多小程序,而實(shí)際上已經(jīng)不再使用這些程序,也很容易造成頁(yè)抖動(dòng)。為了減少頁(yè)抖動(dòng),你應(yīng)該減少同時(shí)運(yùn)行的程序的數(shù)目。對(duì)于大的程序,你應(yīng)該改變它的工作方式,以盡量使操作系統(tǒng)能準(zhǔn)確地判斷出哪些頁(yè)不再需要。為此,你可以使用高速緩沖存儲(chǔ)技術(shù),或者改變用于大型數(shù)據(jù)結(jié)構(gòu)的查找算法,或者使用效率更高的malloc()函數(shù)。當(dāng)然,你也可以考慮增加系統(tǒng)的RAM,以減少頁(yè)出動(dòng)作(781) 怎樣確定一塊已分配的內(nèi)存的大小? (782) free()函
22、數(shù)是怎樣知道要釋放的內(nèi)存塊的大小的? (783) 用什么方法存儲(chǔ)標(biāo)志(flag)效率最高? (784) 8、16位和32位的數(shù)是怎樣存儲(chǔ)的? (785) 什么是高位字節(jié)和低位字節(jié)? (786) 請(qǐng)指出下面代碼的錯(cuò)誤,并給出修改措施: T_S8 *itoa (T_S16 n) T_S8 retbuf20; sprintf(retbuf, %d, n); / 將整數(shù)轉(zhuǎn)化為字符串 return retbuf; / 希望返回字符串 (787) 請(qǐng)指出下面代碼的錯(cuò)誤,并給出修改措施: T_S8 *p = NULL; T_S16 nMemSize = 0; p = malloc(1024); nMemSize = sizeof(p); / 希望得到這個(gè)指針變量所分配的內(nèi)存塊的大小 (788) 使用malloc()函數(shù)時(shí),為什么要將其返回值強(qiáng)制轉(zhuǎn)換成被賦值指針變量的數(shù)據(jù)類型? (789) 請(qǐng)寫(xiě)出malloc()的函數(shù)原型。 (790) 請(qǐng)?jiān)O(shè)計(jì)內(nèi)存檢查方法,使其能夠避免對(duì)訪問(wèn)被分配內(nèi)存塊之外的內(nèi)存單元進(jìn)行訪問(wèn)。 (791) 如果對(duì)一個(gè)指針指向的內(nèi)存塊釋放掉,隨后又這塊內(nèi)存進(jìn)行了再分配,因此,剛才被懸掛的指針又指向了新分配的內(nèi)存塊。請(qǐng)?jiān)O(shè)計(jì)一種方案查出這類錯(cuò)誤。 (792) Test函
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥用黃精項(xiàng)目營(yíng)銷計(jì)劃書(shū)
- 與計(jì)算機(jī)連用的打印機(jī)的出租行業(yè)經(jīng)營(yíng)分析報(bào)告
- T恤衫刺繡服務(wù)行業(yè)營(yíng)銷策略方案
- 芭蕾舞軟鞋項(xiàng)目運(yùn)營(yíng)指導(dǎo)方案
- 加油站發(fā)油泵產(chǎn)品供應(yīng)鏈分析
- 電子音頻設(shè)備減振器細(xì)分市場(chǎng)深度研究報(bào)告
- 包扎用填料產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 個(gè)人用電暖腳器產(chǎn)品供應(yīng)鏈分析
- 體育游戲開(kāi)發(fā)行業(yè)相關(guān)項(xiàng)目經(jīng)營(yíng)管理報(bào)告
- 信息技術(shù)研究行業(yè)營(yíng)銷策略方案
- 細(xì)胞標(biāo)準(zhǔn)化纖體資料終打印稿
- 數(shù)獨(dú)骨灰級(jí)100題
- DB1310∕T 233-2020 地下管線數(shù)據(jù)規(guī)范
- 特種設(shè)備檢驗(yàn)檢測(cè)人員執(zhí)業(yè)注冊(cè)管理辦法標(biāo)準(zhǔn)版
- 數(shù)字文化產(chǎn)業(yè)園項(xiàng)目可行性研究報(bào)告-完整可修改版
- 少先隊(duì)鼓號(hào)隊(duì)總譜0—10套
- 航空公司投訴抱怨處理技巧訓(xùn)練 空乘人員培訓(xùn)
- 匯編語(yǔ)言基礎(chǔ)ASM
- 貿(mào)易中介在對(duì)外貿(mào)易中的重要作用
- NGW型行星齒輪減速器——行星輪的設(shè)計(jì)要點(diǎn)
- 感恩教育架起心與心的橋梁學(xué)會(huì)與父母溝通王立哲
評(píng)論
0/150
提交評(píng)論