




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+/C經典筆試題及答案C+/C試題 本試題僅用于考查C+/C程序員的基本編程技能。內容限于C+/C常用語法,不涉及數據結構、算法以及深奧的語法。考試成績能反映出考生的編程質量以及對C+/C的理解程度,但不能反映考生的智力和軟件開發能力。 筆試時間90分鐘。請考生認真答題,切勿輕視。一、請填寫BOOL , float, 指針變量 與“零值”比較的 if 語句。(10分)提示:這里“零值”可以是0, 0.0 , FALSE或者“空指針”。例如 int 變量 n 與“零值”比較的 i
2、f 語句為: if ( n = 0 ) if ( n != 0 )以此類推。請寫出 BOOL flag 與“零值”比較的 if 語句:請寫出 float x 與“零值”比較的 if 語句:請寫出 char *p 與“零值”比較的 if 語句:二、以下為Windows NT下的32位C+程序,請計算sizeof的值(10分) char s
3、tr = “Hello” ; char *p = str ;int n = 10;請計算sizeof (str ) = sizeof ( p ) =
4、160; sizeof ( n ) =void Func ( char str100)請計算sizeof( str ) = void *p = malloc( 100 );請計算sizeof ( p ) =三、簡答題(25分)1、頭文件中的 ifndef/define/endif 干什么用? 2、#include <filename.h> 和
5、 #include “filename.h” 有什么區別? 3、const 有什么用途?(請至少說明兩種) 4、在C+ 程序中調用被 C編譯器編譯后的函數,為什么要加 extern “C”聲明?5、請簡述以下兩個for循環的優缺點/ 第一個for (i=0; i<N; i+)if (condition) DoSomething();else DoOtherthing();/ 第二個if (condition)for (i=0; i<N; i+)
6、160; DoSomething();else for (i=0; i<N; i+) DoOtherthing();優點:缺點:優點:缺點:四、有關內存的思考題(20分)void GetMemory(char *p)p = (char *)malloc(100);void Test(void) char *str = NULL;GetMemory(str); strcpy(str, "hello world");print
7、f(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 =
8、NULL;GetMemory(&str, 100);strcpy(str, "hello"); printf(str); 請問運行Test函數會有什么樣的結果?答: void Test(void)char *str = (char *) malloc(100); strcpy(str, “hello”); free(str);
9、 if(str != NULL) strcpy(str, “world”); printf(str);請問運行Test函數會有什么樣的結果?答:五、編寫strcpy函數(10分)已知strcpy函數的原型是 char *strcpy(char *strDest, const char *strSrc); &
10、#160; 其中strDest是目的字符串,strSrc是源字符串。(1)不調用C+/C的字符串庫函數,請編寫函數 strcpy(2)strcpy能把strSrc的內容復制到strDest,為什么還要char * 類型的返回值?六、編寫類String的構造函數、析構函數和賦值函數(25分)已知類String的原型為: class String public:
11、60; String(const char *str = NULL); / 普通構造函數 String(const String &other); / 拷貝構造函數 String(void);
12、; / 析構函數 String & operate =(const String &other); / 賦值函數 private:
13、60; char *m_data; / 用于保存字符串 請編寫String的上述4個函數。C+/C試題的答案與評分標準一、請填寫BOOL , float, 指針變量 與“零值”比較的 if 語句。(10分)請寫出 BOOL&
14、#160; flag 與“零值”比較的 if 語句。(3分)標準答案: if ( flag ) if ( !flag )如下寫法均屬不良風格,不得分。 if (flag = TRUE) if (flag = 1 ) if (flag = FALSE) &
15、#160; if (flag = 0) 請寫出 float x 與“零值”比較的 if 語句。(4分)標準答案示例:const float EPSINON = 0.00001;if (x >= - EPSINON) && (x <= EPSINON)不可將浮點變量用“=”或“!=”與數字比較,應該設法轉化成“>=”或“<=”此類形式。 如
16、下是錯誤的寫法,不得分。 if (x = 0.0) if (x != 0.0) 請寫出 char *p 與“零值”比較的 if 語句。(3分)標準答案: if (p = NULL) if (p != NULL)如下寫法均屬不良風
17、格,不得分。 if (p = 0) if (p != 0) if (p) if (!) 二、以下為Windows NT下的32位C+程序,請計算sizeof的值(10分)
18、60; char str = “Hello” ; char *p = str ;int n = 10;請計算sizeof (str ) = 6 (2分) sizeof ( p ) =
19、 4 (2分) sizeof ( n ) = 4 (2分)void Func ( char str100)請計算sizeof( str ) = 4 (2分)void *p = malloc( 100 );請計算sizeof ( p ) = 4 &
20、#160; (2分)三、簡答題(25分)1、頭文件中的 ifndef/define/endif 干什么用?(5分)答:防止該頭文件被重復引用。2、#include <filename.h> 和 #include “filename.h” 有什么區別?(5分)答:對于#include <filename.h> ,編譯器從標準庫路徑開始搜索 filename.h
21、對于#include “filename.h” ,編譯器從用戶的工作路徑開始搜索 filename.h3、const 有什么用途?(請至少說明兩種)(5分)答:(1)可以定義 const 常量(2)const可以修飾函數的參數、返回值,甚至函數的定義體。被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程序的健壯性。4、在C+ 程序中調用被 C編譯器編譯后的函數,為什么要加 extern “C”? (5分)答:C+語言支持函數重載,C語言不支持函數重載。函數被C+編譯后在庫中的名字與C語言的不同。假設某個函數的原型為: void foo(int x, int
22、 y);該函數被C編譯器編譯后在庫中的名字為_foo,而C+編譯器則會產生像_foo_int_int之類的名字。C+提供了C連接交換指定符號extern“C”來解決名字匹配問題。5、請簡述以下兩個for循環的優缺點(5分)for (i=0; i<N; i+)if (condition) DoSomething();else DoOtherthing();if (condition)for (i=0; i<N; i+) DoSomething();
23、else for (i=0; i<N; i+) DoOtherthing();優點:程序簡潔缺點:多執行了N-1次邏輯判斷,并且打斷了循環“流水線”作業,使得編譯器不能對循環進行優化處理,降低了效率。優點:循環的效率高缺點:程序不簡潔四、有關內存的思考題(每小題5分,共20分)void GetMemory(char *p)p = (char *)malloc(100);void Test(void) char *str = NULL;GetMemory(str);
24、;strcpy(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(); &
25、#160; printf(str);請問運行Test函數會有什么樣的結果?答:可能是亂碼。因為GetMemory返回的是指向“棧內存”的指針,該指針的地址不是 NULL,但其原現的內容已經被清除,新內容不可知。void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello"); printf(str);
26、160; 請問運行Test函數會有什么樣的結果?答:(1)能夠輸出hello(2)內存泄漏void Test(void)char *str = (char *) malloc(100); strcpy(str, “hello”); free(str); if(str != NULL)
27、; strcpy(str, “world”); printf(str);請問運行Test函數會有什么樣的結果?答:篡改動態內存區的內容,后果難以預料,非常危險。因為free(str);之后,str成為野指針,if(str != NULL)語句不起作用。五、編寫strcpy函數(10分)已知strcpy函數的原型是 char *strcpy(char *strDest, const char *strSrc);
28、 其中strDest是目的字符串,strSrc是源字符串。(1)不調用C+/C的字符串庫函數,請編寫函數 strcpychar *strcpy(char *strDest, const char *strSrc); assert(strDest!=NULL) && (strSrc !=NULL); / 2分 char *address = strDest;
29、160; / 2分 while( (*strDest+ = * strSrc+) != 0 ) / 2分 NULL ; return address ;
30、 / 2分(2)strcpy能把strSrc的內容復制到strDest,為什么還要char * 類型的返回值?答:為了實現鏈式表達式。
31、 / 2分例如 int length = strlen( strcpy( strDest, “hello world”) );六、編寫類String的構造函數、析構函數和賦值函數(25分)已知類String的原型為:
32、160;class String public: String(const char *str = NULL); / 普通構造函數 String(const String &other); /
33、 拷貝構造函數 String(void); / 析構函數 String & operate =(const String &other);
34、60; / 賦值函數 private: char *m_data; / 用于保存字符串
35、0; 請編寫String的上述4個函數。標準答案:/ String的析構函數 String:String(void) / 3分 delete m_data;
36、60; / 由于m_data是內部數據類型,也可以寫成 delete m_data; / String的普通構造函數
37、0; String:String(const char *str) / 6分 if(str=NULL)
38、 m_data = new char1; / 若能加 NULL 判斷則更好 *m_data = 0; &
39、#160; &
40、#160; else int length = strlen(str); m_data = new charlength+1; / 若能加 NULL 判斷則更好
41、160; strcpy(m_data, str); / 拷貝構造函數 String:String(const String &other) / 3分 int length = strlen(other.m_data); m_data = new charlength+1; / 若能加 NUL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 門急診護理質量持續改進案例
- 昆明學院《歐美設計規范釋義》2023-2024學年第二學期期末試卷
- 咸寧市重點中學2024-2025學年高三第二學期4月模擬考試歷史試題含解析
- 天津市河東區天鐵一中學2024-2025學年初三下學期統練四生物試題含解析
- 江蘇省姜堰區實驗中學2025年高三月考試題(二)生物試題試卷含解析
- 珠海市2025年三下數學期末監測模擬試題含解析
- 武漢航海職業技術學院《筆譯理論與實踐》2023-2024學年第二學期期末試卷
- 四川省自貢市普高2024-2025學年高三下學期3月聯考歷史試題含解析
- 浙江農業商貿職業學院《行草行書草書技法》2023-2024學年第一學期期末試卷
- 蘇州科技大學天平學院《火電廠煙氣凈化Ⅰ》2023-2024學年第二學期期末試卷
- TB 10303-2020鐵路橋涵工程施工安全技術規程
- 神經外科顱內動脈瘤血管內介入栓塞治療手術知情同意書
- 小美滿合唱五線譜總譜
- 山東省濟南市章丘區2023-2024學年三年級下學期4月期中語文試題
- 《電力負荷聚合服務商需求響應系統技術規范》
- MOOC 基于STM32CubeMX和HAL驅動庫的嵌入式系統設計-電子科技大學 中國大學慕課答案
- 物業設施設備管理指南
- 2024年上海市閔行區高三語文二模作文指導與佳作:“溫故”和“知新”可以是什么關系呢
- 國外導引頭技術現狀及發展趨勢
- 小麥病蟲害防治無人機服務技術方案
- 腫瘤防治知識講座總結與反思
評論
0/150
提交評論