freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

c語言經典面試題-資料下載頁

2025-03-24 04:49本頁面
  

【正文】 B)define MIN(A,B) (A = B ? A : B )都應判0分;(2)防止宏的副作用。宏定義define MIN(A,B) ((A) = (B) ? (A) : (B))對MIN(*p++, b)的作用結果是:((*p++) = (b) ? (*p++) : (*p++))這個表達式會產生副作用,指針p會作三次++自增操作。除此之外,另一個應該判0分的解答是:define MIN(A,B) ((A) = (B) ? (A) : (B))。這個解答在宏定義的后面加“?!?,顯示編寫者對宏的概念模糊不清,只能被無情地判0分并被面試官淘汰。試題4:為什么標準頭文件都有類似以下的結構?ifndef __INCvxWorkshdefine __INCvxWorkshifdef __cplusplusextern C {endif/*...*/ifdef __cplusplus}endifendif /* __INCvxWorksh */解答:頭文件中的編譯宏ifndef __INCvxWorkshdefine __INCvxWorkshendif的作用是防止被重復引用。作為一種面向對象的語言,C++支持函數重載,而過程式語言C則不支持。函數被C++編譯后在symbol庫中的名字與C語言的不同。例如,假設某個函數的原型為:void foo(int x, int y)。該函數被C編譯器編譯后在symbol庫中的名字為_foo,而C++編譯器則會產生像_foo_int_int之類的名字。_foo_int_int這樣的名字包含了函數名和函數參數數量及類型信息,C++就是考這種機制來實現函數重載的。為了實現C和C++的混合編程,C++提供了C連接交換指定符號extern C來解決名字匹配問題,函數聲明前加上externC后,則編譯器就會按照C語言的方式將該函數編譯為_foo,這樣C語言中就可以調用C++的函數了。試題5:編寫一個函數,作用是把一個char組成的字符串循環(huán)右移n個。比如原來是“abcdefghi”如果n=2,移位后應該是“hiabcdefgh”函數頭是這樣的://pStr是指向以39。39。結尾的字符串的指針//steps是要求移動的nvoid LoopMove ( char * pStr, int steps ){//請?zhí)畛?..}解答:正確解答1:void LoopMove ( char *pStr, int steps ){int n = strlen( pStr ) steps。char tmp[MAX_LEN]。strcpy ( tmp, pStr + n )。strcpy ( tmp + steps, pStr)。*( tmp + strlen ( pStr ) ) = 39。39。strcpy( pStr, tmp )。}正確解答2:void LoopMove ( char *pStr, int steps ){int n = strlen( pStr ) steps。char tmp[MAX_LEN]。memcpy( tmp, pStr + n, steps )。memcpy(pStr + steps, pStr, n )。memcpy(pStr, tmp, steps )。}剖析:這個試題主要考查面試者對標準庫函數的熟練程度,在需要的時候引用庫函數可以很大程度上簡化程序編寫的工作量。最頻繁被使用的庫函數包括:(1) strcpy(2) memcpy(3) memset試題6:已知WAV文件格式如下表,打開一個WAV文件,以適當的數據結構組織WAV文件頭并解析WAV格式的各項信息。WAVE文件格式說明表偏移地址字節(jié)數數據類型內 容文件頭00H4 CharRIFF標志04H4int32文件長度08H4CharWAVE標志0CH4Charfmt標志10H4 過渡字節(jié)(不定)14H2int16格式類別16H2int16通道數18H2int16 采樣率(每秒樣本數),表示每個通道的播放速度1CH4int32波形音頻數據傳送速率20H2int16數據塊的調整數(按字節(jié)算的)22H2 每樣本的數據位數24H4Char數據標記符"data"28H4int32語音數據的長度解答:將WAV文件格式定義為結構體WAVEFORMAT:typedef struct tagWaveFormat{char cRiffFlag[4]。UIN32 nFileLen。char cWaveFlag[4]。char cFmtFlag[4]。char cTransition[4]。UIN16 nFormatTag 。UIN16 nChannels。UIN16 nSamplesPerSec。UIN32 nAvgBytesperSec。UIN16 nBlockAlign。UIN16 nBitNumPerSample。char cDataFlag[4]。UIN16 nAudioLength。} WAVEFORMAT。假設WAV文件內容讀出后存放在指針buffer開始的內存單元內,則分析文件格式的代碼很簡單,為:WAVEFORMAT waveFormat。memcpy( amp。waveFormat, buffer,sizeof( WAVEFORMAT ) )。直接通過訪問waveFormat的成員,就可以獲得特定WAV文件的各項格式信息。剖析:試題6考查面試者組織數據結構的能力,有經驗的程序設計者將屬于一個整體的數據成員組織為一個結構體,利用指針類型轉換,可以將memcpy、memset等函數直接用于結構體地址,進行結構體的整體操作。透過這個題可以看出面試者的程序設計經驗是否豐富。試題7:編寫類String的構造函數、析構函數和賦值函數,已知類String的原型為:class String{public:String(const char *str = NULL)。 // 普通構造函數String(const String amp。other)。 // 拷貝構造函數~ String(void)。 // 析構函數String amp。 operate =(const String amp。other)。 // 賦值函數private:char *m_data。 // 用于保存字符串}。解答://普通構造函數String::String(const char *str){if(str==NULL){m_data = new char[1]。 // 得分點:對空字符串自動申請存放結束標志39。39。的空//加分點:對m_data加NULL 判斷*m_data = 39。\039。}else{int length = strlen(str)。m_data = new char[length+1]。 // 若能加 NULL 判斷則更好strcpy(m_data, str)。}}// String的析構函數String::~String(void){delete [] m_data。 // 或delete m_data。}//拷貝構造函數String::String(const String amp。other)    // 得分點:輸入參數為const型{int length = strlen()。m_data = new char[length+1]。     //加分點:對m_data加NULL 判斷strcpy(m_data, )。}//賦值函數String amp。 String:perate =(const String amp。other) // 得分點:輸入參數為const型{if(this == amp。other)   //得分點:檢查自賦值return *this。delete [] m_data。     //得分點:釋放原有的內存資源int length = strlen( )。m_data = new char[length+1]。  //加分點:對m_data加NULL 判斷strcpy( m_data, )。return *this。         //得分點:返回本對象的引用}剖析:能夠準確無誤地編寫出String類的構造函數、拷貝構造函數、賦值函數和析構函數的面試者至少已經具備了C++基本功的60%以上!在這個類中包括了指針類成員變量m_data,當類中包括指針類成員變量時,一定要重載其拷貝構造函數、賦值函數和析構函數,這既是對C++程序員的基本要求,也是《Effective C++》中特別強調的條款。仔細學習這個類,特別注意加注釋的得分點和加分點的意義,這樣就具備了60%以上的C++基本功!試題8:請說出static和const關鍵字盡可能多的作用解答:static關鍵字至少有下列n個作用:(1)函數體內static變量的作用范圍為該函數體,不同于auto變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值;(2)在模塊內的static全局變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問;(3)在模塊內的static函數只可被這一模塊內的其它函數調用,這個函數的使用范圍被限制在聲明它的模塊內;(4)在類中的static成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝;(5)在類中的static成員函數屬于整個類所擁有,這個函數不接收this指針,因而只能訪問類的static成員變量。const關鍵字至少有下列n個作用:(1)欲阻止一個變量被改變,可以使用const關鍵字。在定義該const變量時,通常需要對它進行初始化,因為以后就沒有機會再去改變它了;(2)對指針來說,可以指定指針本身為const,也可以指定指針所指的數據為const,或二者同時指定為const;(3)在一個函數聲明中,const可以修飾形參,表明它是一個輸入參數,在函數內部不能改變其值;(4)對于類的成員函數,若指定其為const類型,則表明其是一個常函數,不能修改類的成員變量;(5)對于類的成員函數,有時候必須指定其返回值為const類型,以使得其返回值不為“左值”。例如:const classA operator*(const classAamp。 a1,const classAamp。 a2)。operator*的返回結果必須是一個const對象。如果不是,這樣的變態(tài)代碼也不會編譯出錯:classA a, b, c。(a * b) = c。 // 對a*b的結果賦值操作(a * b) = c顯然不符合編程者的初衷,也沒有任何意義。剖析:驚訝嗎?小小的static和const居然有這么多功能,我們能回答幾個?如果只能回答1~2個,那還真得閉關再好好修煉修煉。這個題可以考查面試者對程序設計知識的掌握程度是初級、中級還是比較深入,沒有一定的知識廣度和深度,不可能對這個問題給出全面的解答。大多數人只能回答出static和const關鍵字的部分功能。試題1:請寫一個C函數,若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1解答:int checkCPU(){{union w{int a。char b。} c。 = 1。return ( == 1)。}}剖析:嵌入式系統(tǒng)開發(fā)者應該對Littleendian和Bigendian模式非常了解。采用Littleendian模式的CPU對操作數的存放方式是從低字節(jié)到高字節(jié),而Bigendian模式對操作數的存放方式是從高字節(jié)到低字節(jié)。例如,16bit寬的數0x1234在Littleendian模式CPU內存中的存放方式(假設從地址0x4000開始存放)為:內存地址存放內容0x40000x340x40010x12而在Bigendian模式CPU內存中的存放方式則為:內存地址存放內容0x40000x120x40010x3432bit寬的數0x12345678在Littleendian模式CPU內存中的存放方式(假設從地址0x4000開始存放)為:內存地址存放內容0x40000x780x40010x560x40020x340x40030x12而在Bigendian模式CPU內存中的存放方式則為:內存地址存放內容0x40000x120x40010x340x40020x560x40030x78聯合體union的存放順序是所有成員都從低地址開始存放,面試者的解答利用該特性,輕松地獲得了CPU對內存采用Littleendian還是Bigendian模式讀寫。如果誰能當場給出這個解答,那簡直就是一個天才的程序員。試題2:寫一個函數返回1+2+3+…+n的值(假定結果不會超過長整型變量的范圍)解答:int Sum( int n ){return ( (long)1 + n) * n / 2。  //或return (1l + n) * n / 2。}剖析:對于這個題,只能說,也許最簡單的答案就是最好的答案
點擊復制文檔內容
電大資料相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1