



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+/C 代碼表文件結構重要性項結論頭文件和定義文件的名稱是否合理?頭文件和定義文件的目錄結構是否合理?和版本是否完整?重要頭文件是否使用了 ifndef/define/endif 預處理塊?頭文件中是否只存放“”而不存放“定義”程序的版式重要性項結論空行是否得體?代碼行內的空格是否得體?長行拆分是否得體?“” 和 “” 是否各占一行并且對齊于同一列?重要一行代碼是否只做一件事?如只定義一個變量,只寫一條語句。重要If、for、while、do 等語句自占一行,不論執行語句多少都要加“”。重要在定義變量(或參數)時,是否將修飾符 * 和 緊靠變量名?注釋是否清晰并且必要?重要注釋是否有錯誤或者
2、可能導致誤解?重要類結構的public, protected, private 順序是否在所有的程序中保持一致?命名規則重要性項結論重名規則是否與所采用的操作系統或開發工具的風格保持一致?標識符是否直觀且可以拼讀?標 識 符 的 長 度 應 當 符 合 “ min-length &&max-information”原則?重要程序中是否出現相同的局部變量和全部變量?類名、函數名、變量和參數、常量的書寫格式是否遵循一定的規則?靜態變量、全局變量、類的成員變量是否加前綴?表達式與基本語句重要性項結論重要如果代碼行中的運算符比較多,是否已經用括號清楚地確定表達式的操作順序?是否編寫太復
3、雜或者多用途的復合表達式?重要是否將復合表達式與“真正的數學表達式”?重要是否用隱含錯誤的方式寫if 語句? 例如(1) 將布爾變量直接與 TRUE、FALSE 或者 1、0 進行比較。(2) 將浮點變量用“=”或“!=”與任何數字比較。(3) 將指針變量用“=”或“!=”與 NULL 比較。如果循環體內存在邏輯,并且循環次數很大,是否已經將邏輯移到循環體的外面?重要Case 語句的結尾是否忘了加 break?重要是否忘記寫 switch 的 default 分支?重要使用 goto 語句時是否留下隱患? 例如跳過了某些對象的構造、變量的初始化、重要的計算等。常量重要性項結論是否使用含義直觀的
4、常量來表示那些將在程序中多次出現的數字或字符串?在 C+ 程序中,是否用 const 常量取代宏常量?重要如果某一常量與其它常量密切相關,是否在定義中包含了這種關系?是否誤解了類中的 const 數據成員?因為 const 數據成員只在某個對象生存期內是常量,而對于整個類而言卻是可變的。函數設計重要性項結論參數的書寫是否完整?不要省事只寫參數的類型而省略參數名字。參數命名、順序是否合理?參數的個數是否太多?是否使用類型和數目不確定的參數?是否省略了函數返回值的類型?函數名字與返回值類型在語義上是否?重要是否將正常值和錯誤標志混在一起返回?正常值應當用輸出參數獲得,而錯誤標志用return 語句
5、返回。重要在函數體的“處”,是否用 assert 對參數的有效性進行檢查?重要使用了 assert? 例如情況與錯誤情況,后者是必然存在的并且是一定要作出處理的。重要return 語句是否返回指向“棧內存”的“指針”或者“引用”?是否使用 const 提高函數的健壯性?const 可以強制保護函數的參數、返回值,甚至函數的定義體。“Use const whenever you need”內存管理重要性項結論重要用 malloc 或 new 申請內存之后,是否立即檢查指針值是否為 NULL?(防止使用指針值為 NULL 的內存)重要是否忘記為數組和動態內存賦初值?(防止將未被初始化的內存作為右值
6、使用)重要數組或指針的下標是否越界?重要動態內存的申請與是否配對?(防止內存泄漏)重要是否有效地處理了“內存耗盡”問題?重要是否修改“指向常量的指針”的內容?重要是否出現野指針?例如(1) 指針變量沒有被初始化。(2) 用 free 或 delete了內存之后,忘記將指針設置為NULL。重要是否將malloc/free 和 new/delete使用?重要malloc 語句是否正確無誤?例如字節數是否正確?類型轉換是否正確?重要在創建與動態對象數組時,new/delete 的語句是否正確無誤?C+ 函數的高級特性重要性項結論重載函數是否有二義性?重要是否了成員函數的重載、覆蓋與隱藏?運算符的重載
7、是否符合制定的編程規范?是否內聯函數?例如函數體內的代碼比較長,函數體內出現循環。重要是否用內聯函數取代了宏代碼?類的構造函數、析構函數和賦值函數重要性項結論重要是否違背編程規范而讓C+ 編譯器自動為類產生四個缺省的函數:(1)缺省的無參數構造函數;(2)缺省的拷貝構造函數;(3)缺省的析構函數;(4)缺省的賦值函數。重要構造函數中是否遺漏了某些初始化工作?重要是否正確地使用構造函數的初始化表?重要析構函數中是否遺漏了某些清除工作?是否錯寫、錯用了拷貝構造函數和賦值函數?重要賦值函數一般分四個步驟:(1)檢查自賦值;(2)原有內存;(3)分配新的內存,并內容;(4)返回 *this。是否遺漏了
8、重要步驟?重要是否正確地編寫了派生類的構造函數、析構函數、賦值函數?注意事項:(1) 派生類不可能繼承基類的構造函數、析構函數、賦值函數。(2) 派生類的構造函數應在其初始化表里調用基類的構造函數。(3) 基類與派生類的析構函數應該為虛(即加virtual 關鍵字)。(4) 在編寫派生類的賦值函數時,注意不要忘記對基類的數據成員重新賦值。類的高級特性重要性項結論重要是否違背了繼承和組合的規則?(1) 若在邏輯上B 是A 的“一種”,并且 A 的所有功能和屬性對B 而言都有意義,則 B 繼承 A 的功能和屬性。(2) 若在邏輯上A 是B 的“一部分”(a part of),則不B 從A 派生,而
9、是要用 A 和其它東西組合出B。其它常見問題重要性項結論重要數據類型問題:()變量的數據類型有錯誤嗎?()存在不同數據類型的賦值嗎?()存在不同數據類型的比較嗎?重要變量值問題:()變量的初始化或缺省值有錯誤嗎?()變量發生上溢或下溢嗎?()變量的精度夠嗎?重要邏輯問題:()由于精度導致比較無效嗎?()表達式中的優先級有誤嗎?()邏輯結果顛倒嗎?重要循環問題:()循環終止條件不正確嗎?()無法正常終止(死循環)嗎?()錯誤地修改循環變量嗎?()存在誤差累積嗎?重要錯誤處理問題:()忘記進行錯誤處理嗎?()錯誤處理程序塊一直沒有機會被運行?()錯誤處理程序塊本身就有毛病嗎?如報告的錯誤與實際錯誤
10、不一致,處理方式不正確等等。()錯誤處理程序塊是“馬后 ”嗎?如在被它被調用之前軟件已經出錯。重要文件I/O 問題:()對不存在的或者錯誤的文件進行操作嗎?()文件以不正確的方式打開嗎?()文件結束不正確嗎?()沒有正確地關閉文件嗎?附錄 B :C+/C 試題本試題僅用于考查 C+/C 程序員的基本編程技能。內容限于 C+/C 常用語法,不涉及數據結構、算法以及深奧的語法。成績能反映出考生的編程質量以及對 C+/C 的理解程度,但不能反映考生的智力和軟件開發能力。筆試時間 90 分鐘。請考生認真答題,切勿輕視。一、請填寫 BOOL , float, 指針變量 與“零值”比較的 if 語句。(1
11、0 分) 提示:這里“零值”可以是 0, 0.0 , FALSE 或者“空指針”。例如 int 變量 n 較的 if 語句為:if ( n = 0 ) if ( n != 0 )以此類推。與“零值”比二、以下為 Windows NT 下的 32 位 C+程序,請計算 sizeof 的值(10 分)三、簡答題(25 分)1、頭文件中的 ifndef/define/endif 干什么用?#ifndef xy_h #define xy_h #endif2、#include<filename.h>標準自定義的目錄和 #include“filename.h” 有什么區別?3、const 有什
12、么用途?(請至少說明兩種)本義:不變的,修飾常量,返回指針不可變,不可值給一個非,用于指針傳值,使用權其不充,常駐,物別是自定義類4、在 C+ 程序中調用被 C 編譯器編譯后的函數,為什么要加 extern “C”采用外部連接,編譯5、請簡述以下兩個 for 循環的優缺點?charstr = “Hello” ; char*p = str ;intn = 10;請計算sizeof (str ) = 6 sizeof ( p ) = 4 sizeof ( n ) =4void Func ( char str100)請計算sizeof( str ) = 4void *p = malloc( 100
13、);請計算sizeof ( p ) =4請寫出 BOOLflag 與“零值”比較的 if 語句:if(flag)請寫出 floatx 與“零值”比較的 if 語句:if(x<0.001&&x>-0.001)請寫出 char*p 與“零值”比較的 if 語句:if(NULL=p)四、有關內存的思考題(20 分)void GetMemory(char *p)p = (char *)malloc(100);void Test(void)char *str = NULL; GetMemory(str); strcpy(str, "hello world"
14、); printf(str);請問運行 Test 函數會有什么樣的結果? 答:char *GetMemory(void)char p = "hello world" return p;void Test(void)char *str = NULL; str = GetMemory(); printf(str);請問運行 Test 函數會有什么樣的結果? 答:返,出現亂碼Void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL; GetMemory(&am
15、p;str, 100); strcpy(str, "hello"); printf(str);請問運行 Test 函數會有什么樣的結果? 答:void Test(void)char *str = (char *) malloc(100); strcpy(str, “hello”);free(str); if(str != NULL)strcpy(str, “world”); printf(str);請問運行 Test 函數會有什么樣的結果? 答:/ 第一個for (i=0; i<N; i+)if (condition) DoSomething();elseDoOthe
16、rthing();/ 第二個if (condition)for (i=0; i<N; i+) DoSomething();elsefor (i=0; i<N; i+) DoOtherthing();優點:可缺點:若 n 大,則效率不高優點: 缺點:五、編寫 strcpy 函數(10 分) 已知 strcpy 函數的原型是char *strcpy(char *strDest, const char *strSrc);其中 strDest 是目的字符串,strSrc 是源字符串。(1)不調用C+/C 的字符串庫函數,請編寫函數 strcpy(2)strcpy 能把 strSrc 的內容
17、到 strDest,為什么還要 char * 類型的返回值?六、編寫類 String 的構造函數、析構函數和賦值函數(25 分) 已知類 String 的原型為:class Stringpublic:String(const char *str = NULL); String(const String &other); String(void);/普通構造函數/ 拷貝構造函數/ 析構函數String & operateprivate:=(const String&other);/ 賦值函數char*m_data;/ 用于保存字符串;請編寫 String 的上述 4 個函
18、數。附錄 C :C+/C 試題的與評分標準一、請填寫 BOOL , float,指針變量與“零值”比較的if語句。(10 分)二、以下為 Windows NT 下的 32 位 C+程序,請計算 sizeof 的值(10 分)三、簡答題(25 分)1、頭文件中的 ifndef/define/endif 干什么用?(5 分)答:防止該頭文件被重復2、#include<filename.h>。和#include“filename.h” 有什么區別?(5 分),編譯器從標準庫路徑開始搜索 filename.h,編譯器從用戶的工作路徑開始搜索 filename.h答:對于#include&l
19、t;filename.h>對于#include“filename.h”3、const 有什么用途?(請至少說明兩種)(5 分)答:(1)可以定義 const 常量(2)const 可以修飾函數的參數、返回值,甚至函數的定義體。被 const 修飾的東西都受到強制保護,可以預防意外的變動,能提高程序的健壯性。charstr = “Hello” ; char*p = str ;intn = 10;請計算sizeof (str ) = 6 (2 分) sizeof ( p ) = 4 (2 分) sizeof ( n ) = 4 (2 分)void Func ( char str100)請計算
20、sizeof( str ) =4(2 分)void *p = malloc( 100 );請計算sizeof ( p ) =4(2 分)請寫出 BOOLflag 與“零值”比較的 if 語句。(3 分)標準: if ( flag ) if ( !flag )如下寫法均屬不良風格,不得分。if (flag = TRUE) if (flag = 1 ) if (flag = FALSE) if (flag = 0)請寫出 floatx 與“零值”比較的 if 語句。(4 分)標準 示例:const float EPSINON = 0.00001;if (x >= - EPSINON) &am
21、p;& (x <= EPSINON)不可將浮點變量用“=”或“!=”與數字比較,應該設法轉化成“>=”或“<=”此類形式。如下是錯誤的寫法,不得分。if (x = 0.0) if (x != 0.0)請寫出 char*p 與“零值”比較的 if 語句。(3 分)標準:if (p = NULL)if (p != NULL)如下寫法均屬不良風格,不得分。if (p = 0) if (p != 0) if (p)if (!)4、在 C+ 程序中調用被 C 編譯器編譯后的函數,為什么要加 extern “C”? (5 分)答:C+語言支持函數重載,C 語言不支持函數重載。函數
22、被 C+編譯后在庫中的名字與 C語言的不同。假設某個函數的原型為: void foo(int x, int y);該函數被 C 編譯器編譯后在庫中的名字為_foo,而 C+編譯器則會產生像_foo_int_int之類的名字。C+提供了 C 連接交換指定符號 extern“C”來解決名字匹配問題。5、請簡述以下兩個 for 循環的優缺點(5 分)四、有關內存的思考題(每小題 5 分,共 20 分)void GetMemory(char *p)p = (char *)malloc(100);void Test(void)char *str = NULL; GetMemory(str); strcp
23、y(str, "hello world"); printf(str);請問運行 Test 函數會有什么樣的結果? 答:程序。因為 GetMemory 并不能傳遞動態內存, Test 函數中的 str 一直都是 NULL。strcpy(str, "hello world"); 將使程序崩潰。char *GetMemory(void)char p = "hello world" return p;void Test(void)char *str = NULL; str = GetMemory(); printf(str);請問運行 Tes
24、t 函數會有什么樣的結果? 答:可能是亂碼。因為 GetMemory 返回的是指向“棧內存”的指針,該指針的地址不是 NULL,但其原現的內容已經被清除,新內容不可知。void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = (char *) malloc(100);for (i=0; i<N; i+)if (condition) DoSomething();elseDoOtherthing();if (condition)for (i=0; i<N; i+) DoSom
25、ething();elsefor (i=0; i<N; i+) DoOtherthing();優點:程序簡潔缺點:多執行了 N-1 次邏輯 ,并且打斷了循環“流水線”作業,使得編譯器不能對循環進行優化處理,降低了效率。優點:循環的效率高缺點:程序不簡潔五、編寫 strcpy 函數(10 分) 已知 strcpy 函數的原型是char *strcpy(char *strDest, const char *strSrc);其中 strDest 是目的字符串,strSrc 是源字符串。(1)不調用C+/C 的字符串庫函數,請編寫函數 strcpychar *strcpy(char *strDe
26、st, const char *strSrc);assert(strDest!=NULL) && (strSrc !=NULL);char *address = strDest;/2分2分2分!= 0 )while( (*strDest+ = * strSrc+) NULL ;return address ;/ 2分(2)strcpy 能把 strSrc 的內容答:為了實現鏈式表達式。到 strDest,為什么還要 char * 類型的返回值?/ 2 分例如int length = strlen( strcpy( strDest, “hello world”) );六、編寫類
27、String 的構造函數、析構函數和賦值函數(25 分) 已知類 String 的原型為:class Stringpublic:String(const char *str = NULL); String(const String &other); String(void);/普通構造函數/ 拷貝構造函數/ 析構函數String & operateprivate:=(const String&other);/ 賦值函數char*m_data;/ 用于保存字符串;請編寫 String 的上述 4 個函數。標準:/ String 的析構函數void Test(void)char *str = NULL; GetMemory(&str, 100); strcpy(str, "hello"); printf(str);請問運行 Test 函數會有什么樣的結果? 答:(1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《質量控制年終工作總結》課件
- 《課件設計能力的培養》
- 高壓作業安全試題(含答案解析)
- 1月維修電工高級考試模擬題(附答案解析)
- 證券投資分析方法考核試卷
- 蛋品加工安全風險評估與控制考核試卷
- 設計在包裝領域的環保策略考核試卷
- 《化學品事故應急》課件
- 學校元旦文藝晚會策劃活動方案
- 2025年高質量轎車用深沖鋼板項目發展計劃
- 新能源系統 課件 第10章 多能互補、可持續能源系統
- 井下動火安全技術措施
- 理解詞語句子的方法PPT
- 熱線心理咨詢技術-課件
- 碰撞與沖擊動力學
- 全等三角形第一課時課件
- 歌曲《我們》歌詞
- 頸部腫塊診斷及鑒別診斷課件
- 汽車前保險杠結構及安全能分析學士學位參考
- 配電室八項制度(八張)
- 清算方案模板9篇
評論
0/150
提交評論