版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、4.技巧題試題2:寫一個(gè)函數(shù)返回1+2+3+n的值(假定結(jié)果不會(huì)超過(guò)長(zhǎng)整型變量的范圍) 解答:int Sum( int n )return ( (Ion g)1 + n) * n / 2;/ 或 return (1I + n) * n / 2;剖析:對(duì)于這個(gè)題,只能說(shuō),也許最簡(jiǎn)單的答案就是最好的答案。下面的解答,或者基于下面的解答思路去優(yōu)化,不管怎么"折騰",其效率也不可能與直接return ( 1 I + n ) * n / 2相比!int Sum( int n )long sum = 0;for( int i=1; i<=n; i+ )sum += i; retu
2、rn sum;一、請(qǐng)寫出BOOL flag與“零值”比較的if 語(yǔ)句。(3分)標(biāo)準(zhǔn)答案:1如下寫法均屬不良風(fēng)格,不得分。if ( flag )if (flag = TRUE)1if ( !flag )if (flag = 1 )1if (flag = FALSE)if (flag = 0)請(qǐng)寫出float x與“零值”比較的if 語(yǔ)句。(4分)標(biāo)準(zhǔn)答案示例:如下是錯(cuò)誤的寫法,不得分。con st float EP SINON = 0.00001;if(X - 0.0)if (X >= - EP SINON) &&(X <= EP SINON)if(X !- 0.0)
3、不可將浮點(diǎn)變量用“或“!與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“ >-”或“ <-”此類形式。請(qǐng)寫出char *p 與“零值”比較的if 語(yǔ)句。(3分)標(biāo)準(zhǔn)答案:如下寫法均屬不良風(fēng)格,不得分。ifif (p - 0)(p - NULL)if (p !- 0)ifif (p)(p !- NULL)if (!)二、以下為Windows NT下的32位C+程序,請(qǐng)計(jì)算sizeof的值(10分)char *p - str ;void Func ( char str100)int n - 10;char str -“ Hello ” ;請(qǐng)計(jì)算請(qǐng)計(jì)算sizeof( str ) - 4sizeof (str
4、 ) - 6sizeof ( p ) - 4(2分)(2分)(2分)void *p - malloc( 100 );請(qǐng)計(jì)算sizeof ( n ) - 4sizeof ( p ) - 4(2分)(2分)三、簡(jiǎn)答題(25分)干什么用? ( 5分)1 頭文件中的ifndef/defi ne/e ndif答:防止該頭文件被重復(fù)引用。#inelude,編譯器從標(biāo)準(zhǔn)庫(kù)路徑開(kāi)始搜索filename.h對(duì)于#inelude“filename.h ”編譯器從用戶的工作路徑開(kāi)始搜索filename.h3.C0nst有什么用途?(請(qǐng)至少說(shuō)明兩種)(5分)答:4.在C+程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加e
5、xtern“C'?( 5 分)答:5.請(qǐng)簡(jiǎn)述以下兩個(gè)for循環(huán)的優(yōu)缺點(diǎn)(5分)for (i=0; iif (con diti on)if (con diti on)for (i=0; iDoSomethi ng();DoSomethi ng();elseDoOtherthi ng();elsefor (i=0; iDoOtherthi ng();優(yōu)點(diǎn):程序簡(jiǎn)潔優(yōu)點(diǎn):循環(huán)的效率咼缺點(diǎn):多執(zhí)行了 N-1次邏輯判斷,并且打 斷了循環(huán)“流水線”作業(yè),使得編譯器不 能對(duì)循環(huán)進(jìn)行優(yōu)化處理,降低了效率。缺點(diǎn):程序不簡(jiǎn)潔5分,共20分)void GetMemory(char *p)char *GetM
6、emory(void)p = (char *)malloc(100);char p = "hello world"return p;void Test(void)void Test(void)char *str = NULL;GetMemory(str);char *str = NULL;strc py (str, "hello world");str = GetMemory();prin tf(str);prin tf(str);請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:程序崩潰。答:可能是亂碼。因?yàn)橐驗(yàn)镚etMe
7、mory返回的是指向棧內(nèi)存的指 針,該指針的地址不是NULL,但其原現(xiàn)的內(nèi)Test函數(shù)中的str 一直都是 NULL。容已經(jīng)被清除,新內(nèi)容不可知。strcpy(str,"hello world");將使程序崩潰。GetMemory并不能傳遞動(dòng)態(tài)內(nèi)存,void GetMemory2(char *p, i nt num)void Test(void)*p = (char *)malloc (nu m);char *str = (char *) malloc(100);strcpy(str,void Test(void)free(str);if(str != NULL)char
8、*str = NULL;GetMemory(&str, 100);strcpy(str,strcpy(str, "hello");prin tf(str);prin tf(str);請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:答:篡改動(dòng)態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預(yù)料,(非常危險(xiǎn)。(因?yàn)閒ree(str); 之后,str成為野指針,if(str != NULL)語(yǔ)句不起作用。1)能夠輸出hello2 )內(nèi)存泄漏“hello ”);“world ” );strcpy 函數(shù)(10 分)strcpy 函數(shù)的原型是 char *strcpy(
9、char *strDest, const char*strSrc);其中strDest是目的字符串,strSrc是源字符串。1)不調(diào)用C+/C的字符串庫(kù) 函數(shù),請(qǐng)編寫函數(shù) strcpystrDest!=NULL) && (strSrc !=NULL); / 2分 strDest; / 2“hello25分)String的原型為:分 0 '分 strDest+ = * strSrc+) != 0 ' / 2 分 2)strcpy 能把 strSrc 的內(nèi)容復(fù)制到 strDest , 為什么還要 char * 類型的返回值? int length = strlen(
10、 strcpy( strDest,world ”); String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(String:String(void) / 3分 String:String(const char *str) / 6來(lái)源為林銳博士的 << 高質(zhì)量 cc+ 編程五、編寫已知char *strcpy(char *strDest, const char *strSrc);答:為了實(shí)現(xiàn)鏈?zhǔn)奖磉_(dá)式。 / 2 分例如assert(char *address =while( (*NULL ;return address ; / 2六、編寫類已知類class String普通構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)p
11、ublic:String(const char *str = NULL); /String(const String &other); / String(void); /析構(gòu)函數(shù)賦值函數(shù)String & operate =(const String &other); / private: char *m_data; / 用于保存字符串;請(qǐng)編寫 String 的上述 4 個(gè)函數(shù)。標(biāo)準(zhǔn)答案:/ String的析構(gòu)函數(shù)delete m_data;/ 由于 m_data 是內(nèi)部數(shù)據(jù)類型,也可以寫成 delete m_data;/ String 的普通構(gòu)造函數(shù)if(str=NUL
12、L)m_data = new char1; /若能加 NULL 判斷則更好*m_data =elseint length = strlen(str);m_data = new charlength+1; /若能加NULL判斷則更好strcpy(m_data, str);/ 拷貝構(gòu)造函數(shù)String:String(const String &other) / 3int length = strlen(other.m_data);m_data = new charlength+1; /若能加NULL判斷則更好strcpy(m_data, other.m_data);/ 賦值函數(shù)String
13、 & String:operate =(const String &other) / 13/ (1) 檢查自賦值 / 4 分if(this = &other) return *this;/ (2) 釋放原有的內(nèi)存資源 / 3 分delete m_data;/ ( 3)分配新的內(nèi)存資源,并復(fù)制內(nèi)容/ 3 分int length = strlen(other.m_data);m_data = new charlength+1; /若能加NULL判斷則更好strcpy(m_data, other.m_data);/( 4)返回本對(duì)象的引用 / 3 分return *this;
14、C+語(yǔ)言支持函數(shù)重載,C語(yǔ)言不支持函數(shù)重載。函數(shù)被 不同。假設(shè)某個(gè)函數(shù)的原型為:void foo(i nt x, i nt y);的名字為_(kāi)foo,而C+編譯器則會(huì)產(chǎn)生像 _foo_int_int 指定符號(hào)extern “ C'來(lái)解決名字匹配問(wèn)題。函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被 意外的變動(dòng),能提高 程序的健壯性。別? ( 5分)C+編譯后在庫(kù)中的名字與C語(yǔ)言的該函數(shù)被C編譯器編譯后在庫(kù)中 之類的名字。C+提供了 C連接交換1 )可以定義con st 常量2)con st可以修飾 const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防2、#include禾R #include“filen
15、ame.h ” 有什么區(qū)已知六、編寫類已知類class Stringpublic:Stri ng(co nst char *str = NULL); /普通構(gòu)造函數(shù)Stri ng(co nst Stri ng & other); /拷貝構(gòu)造函數(shù)-Stri ng(void); /析構(gòu)函數(shù)賦值函數(shù)String & op erate =(c onst String &other); / p rivate:char *m_data; /用于保存字符串;請(qǐng)編寫String的上述4個(gè)函數(shù)。void * ( * (*fp1)(i nt)1O; float (*(* fp2)(i nt
16、,i nt,i nt)(i nt);int (* ( * fp3)()10(); 分別表示什么意思? 答:1.void * ( * (*fp1)(int)10;fp1 是一個(gè)指針, 指向一個(gè)函數(shù), 這個(gè)函數(shù)的參數(shù)為 int 型,函數(shù)的返回值是一個(gè)指針, 這個(gè)指針指向一個(gè)數(shù)組,這個(gè)數(shù)組有 10 個(gè)元素,每個(gè)元素是一個(gè) void* 型指針。2.float (*(* fp2)(int,int,int)(int);fp2 是一個(gè)指針,指向一個(gè)函數(shù),這個(gè)函數(shù)的參數(shù)為 3 個(gè) int 型,函數(shù)的返回值是一個(gè) 指針,這個(gè)指針指向一個(gè)函數(shù),這個(gè)函數(shù)的參數(shù)為 int 型,函數(shù)的返回值是 float 型。3.in
17、t (* ( * fp3)()10();10 個(gè)元素,每個(gè)元素是一個(gè)指針,指向一個(gè)函數(shù),這個(gè) int 型。函數(shù)的返回值是fp3 是一個(gè)指針,指向一個(gè)函數(shù),這個(gè)函數(shù)的參數(shù)為空,函數(shù)的返回值是一個(gè)指針,這 個(gè)指針指向一個(gè)數(shù)組,這個(gè)數(shù)組有 函數(shù)的參數(shù)為空,詳細(xì)說(shuō)明 STL 如何實(shí)現(xiàn) vector 。1. 介紹一下 STL,Answer:Standard Template Library. 它由容器算法迭代器組成。STL ( 標(biāo)準(zhǔn)模版庫(kù),STL 有以下的一些優(yōu)點(diǎn): 可以方便容易地實(shí)現(xiàn)搜索數(shù)據(jù)或?qū)?shù)據(jù)排序等一系列的算法; 調(diào)試程序時(shí)更加安全和方便;STL是跨平臺(tái)的)。即使是人們用 STL 在 UNIX
18、平臺(tái)下寫的代碼你也可以很容易地理解(因?yàn)? 動(dòng)態(tài)的增加數(shù)組空間。vector 實(shí)質(zhì)上就是一個(gè)動(dòng)態(tài)數(shù)組,會(huì)根據(jù)數(shù)據(jù)的增加2.如果用VC開(kāi)發(fā)程序,常見(jiàn)這么幾個(gè)錯(cuò)誤,C2001,c2005,c2011,這些錯(cuò)誤的原因是什么。Answer:在學(xué)習(xí)VC+勺過(guò)程中,遇到的 LNK2001錯(cuò)誤的錯(cuò)誤消息主要為:“ symbol ”(不確定的外部“符號(hào)”)。變量或標(biāo)簽, 將產(chǎn)生此錯(cuò)誤unresolved external symbol如果連接程序不能在所有的庫(kù)和目標(biāo)文件內(nèi)找到所引用的函數(shù)、 消息。拼寫不正確或者使用錯(cuò)誤;LNK2005錯(cuò)誤并不是一個(gè)很一般來(lái)說(shuō), 發(fā)生錯(cuò)誤的原因有兩個(gè): 一是所引用的函數(shù)、 變量
19、不存在、 其次可能使用了不同版本的連接庫(kù)。編程中經(jīng)常能遇到LNK2005錯(cuò)誤一一重復(fù)定義錯(cuò)誤,其實(shí)難解決的錯(cuò)誤 .3. 繼承和委派有什么分別,在決定使用繼承或者委派的時(shí)候需要考慮什么。 在00D,00呻,組合優(yōu)于繼承.當(dāng)然多態(tài)的基礎(chǔ)是繼承,沒(méi)有繼承多態(tài)無(wú)從談起。當(dāng)對(duì)象的類型不影響類中函數(shù)的行為時(shí),就要使用模板來(lái)生成這樣一組類。當(dāng)對(duì)象的類型影響類中函數(shù)的行為時(shí),就要使用繼承來(lái)得到這樣一組類4. 指針和引用有什么分別;如果傳引用比傳指針安全,為什么?如果我使用常量指針難道不行 嗎?(1) 引用在創(chuàng)建的同時(shí)必須初始化, 即引用到一個(gè)有效的對(duì)象; 而指針在定義的時(shí)候不必初始化, 可以在定義后面的任何地方重新賦值 不存在NULL引用,引用必須與合法的存儲(chǔ)單元關(guān)聯(lián);而指針則可以是 NULL.(3) 引用一旦被初始化為指向一個(gè)對(duì)象, 它就不能被改變?yōu)榱硪粋€(gè)對(duì)象的引用; 而指針在
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流行業(yè)工作計(jì)劃范文
- 低保科工作計(jì)劃
- 酒店銷售部工作總結(jié)及計(jì)劃范文
- 2025年部門銷售主管工作計(jì)劃范文
- 醫(yī)院信息中心工作計(jì)劃范文
- 政研室工作計(jì)劃
- 《E芯片試產(chǎn)報(bào)告》課件
- 《大學(xué)有機(jī)化學(xué)》課件
- 合同 條款 內(nèi)部邏輯
- 投標(biāo)合同條款
- 綿陽(yáng)衛(wèi)生系統(tǒng)考試真題
- 注射相關(guān)感染預(yù)防與控制(全文)
- 求是文章《開(kāi)創(chuàng)我國(guó)高質(zhì)量發(fā)展新局面》專題課件
- 升壓站土建施工合同2024年
- DB5334-T 12.1-2024 地理標(biāo)志證明商標(biāo) 香格里拉藏香豬 第1部分:品種要求
- NB-T31030-2012陸地和海上風(fēng)電場(chǎng)工程地質(zhì)勘察規(guī)范
- 感悟考古智慧樹(shù)知到期末考試答案章節(jié)答案2024年北京大學(xué)
- JJF 1171-2024溫濕度巡回檢測(cè)儀校準(zhǔn)規(guī)范
- 知道網(wǎng)課智慧樹(shù)《城市地理學(xué)(華中師范大學(xué))》章節(jié)測(cè)試答案
- 建筑信息模型技術(shù)員理論知識(shí)考試題庫(kù)
- 人文英語(yǔ)3-02-國(guó)開(kāi)機(jī)考參考資料
評(píng)論
0/150
提交評(píng)論