試題和資料(深圳IT行業(yè)C語(yǔ)言筆試)_第1頁(yè)
試題和資料(深圳IT行業(yè)C語(yǔ)言筆試)_第2頁(yè)
試題和資料(深圳IT行業(yè)C語(yǔ)言筆試)_第3頁(yè)
試題和資料(深圳IT行業(yè)C語(yǔ)言筆試)_第4頁(yè)
試題和資料(深圳IT行業(yè)C語(yǔ)言筆試)_第5頁(yè)
已閱讀5頁(yè),還剩165頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

分鐘,只有一支手電,并且同時(shí)最多只能兩個(gè)人一起過(guò)橋。請(qǐng)問(wèn),如何安排,能夠在//這樣轉(zhuǎn)向定義應(yīng)該不算違規(guī)吧!^#defineCmp(x,y)compareintcompare(inta,intb){inti=31;while((i^-1)&&!((areturn(i^-1)?(((a>>i)&1)?1:-1)}#defineCOMPARE(a,b)((a)-(b))//<0:a<b=0:a==b>3.兩個(gè)數(shù)相乘,小數(shù)點(diǎn)后位數(shù)沒(méi)有限制,請(qǐng)寫一個(gè)算法提示:l=length(a)+length(b)-du51(郁郁思揚(yáng))的答案:變?yōu)檎麛?shù)求就行了.輸入的時(shí)候記一下,小數(shù)點(diǎn)位置..輸出再下面的是大整數(shù)的運(yùn)算.{if(!head->next&&!head->data}{head=newNode;head->data=0,head->next=0;/{p=q->next;p1=q;bbit=*bp-48;//把當(dāng)前位轉(zhuǎn)為整型while(*ap||temp)//若被乘數(shù)不空{(diào){p=newNode;p->data=0;p->next=0;p1->next=p;}p1->data=temp1%10;//留當(dāng)前位p1=p;p=p->next;//被乘數(shù)到下一位}ap=a;bp++;q=q->next;}p=head;{p=head->next;}}{cin.getline(test1,Mcin.getline(test2,MMul(strrev(test1),strrev(tes}上面大整數(shù)已經(jīng)寫了.你加幾個(gè)東西就行了.{if(!head->next&&!head->data}{head=newNode;head->data=0,head->next=0;/{p=q->next;p1=q;bbit=*bp-48;//把當(dāng)前位轉(zhuǎn)為整型while(*ap||temp)//若被乘數(shù)不空{(diào){p=newNode;p->data=0;p->next=0;p1->next=p;}p1->data=temp1%10;//留當(dāng)前位p1=p;p=p->next;//被乘數(shù)到下一位}ap=a;bp++;q=q->next;}p=head;{p=head->next;}}{chartest1[MAX],test2[cin.getline(test1,Mcin.getline(test2,MA{pos+=strlen(test1)-(p-test1)-1;{p++;}{pos+=strlen(test2)-(p-test2)-1;{p++;}Mul(strrev(test1),strrev(test2),}5.讓你在100000000個(gè)浮點(diǎn)數(shù)中找出最大的10000個(gè),要//本算法使用快排,O(n*lg(n))//最低可以找到線性算法,使用預(yù)先區(qū)域統(tǒng)計(jì)劃分!類試于構(gòu)造QuadTrees!寫起來(lái)代碼會(huì)長(zhǎng)些!{}{intn=0;while(scanf("%d",&a[n])==1)nfor(inti=0;i<3;i++)printf("%d",a);}TotalTimeCost:(1+2)+(1答:typedefstructDulNode{ElemTypedata;StatusListDelete_DuL(DuLinkList&L,inti,ElemType&e){if(!(p=GetElemP_DuL(L,i)))//此處得到i位置的節(jié)點(diǎn)指針,如果有需要也得寫出具體函數(shù)p->prior->next=p->next;p->next->prior=p->pror;free(p);}StatusListInsert_DuL(DuLinkList&L,int{if(!(s=(DuLinkList)malloc(sizeof(DuLp->prior->next=s;p->prior=s;returnOK;}2.寫一個(gè)函數(shù),將其中的\t都轉(zhuǎn)換成4個(gè)空格。答:函數(shù)實(shí)現(xiàn)為:char*convert(char*st{inti=0;while(*strSrc&&i<length)//跳{if(*strSrc=='\t')//將\t轉(zhuǎn)換成4{for(intj=0;j<4;j++)*cp++='';}}}答:接收窗口的句柄調(diào)用相應(yīng)的窗口過(guò)程。而在沒(méi)有消息時(shí)消息循環(huán)就將控制權(quán)交給系統(tǒng)。答:所謂的回調(diào)函數(shù),就是預(yù)先在系統(tǒng)的對(duì)函數(shù)進(jìn)行注冊(cè),讓系統(tǒng)知道這個(gè)函數(shù)的存在,以后,當(dāng)某個(gè)事件發(fā)生時(shí),再調(diào)用這個(gè)函數(shù)對(duì)事件進(jìn)行響應(yīng)。5.C++里面是不是所有的動(dòng)作都是main()引起的?如果不是,請(qǐng)舉例。答:不是,比如中斷引起的中斷處理不是直接由main()引起的,而是由外部事件引起的。intb;答:各式表示的意思分別為:Cconstint*consta=&b;//a和*a都是Dintconst*consta=&b;//a和*a都是con總結(jié)個(gè)技巧:如果const位于星號(hào)的左側(cè),則const就是用來(lái)修飾指針?biāo)赶虻淖兞浚粗羔樦赶驗(yàn)槌A?;如果const位于星號(hào)的右側(cè),const就是修飾指針本身,即指針本身是常量。表達(dá)式用內(nèi)聯(lián)函數(shù)的函數(shù)體來(lái)代替。答:C錯(cuò)誤,左側(cè)不是一個(gè)有效變量,不能賦值,可改為(++a)charstr[]=“”sizeof(str)=1)sizeof(p)=2)sizeof(n)=3)voidFoo(charstr[100]){sizeof(str)=4)}sizeof(p)=5)答1)17(2)4(3)4(4)4(5)4(1).頭文件中的ifndef/define/endif干什么用?預(yù)處理答:前者用來(lái)包含開發(fā)環(huán)境提供的庫(kù)頭文件,后者用來(lái)包含自己編寫的頭文件。答:函數(shù)和變量被C++編譯后在符號(hào)庫(kù)中的名字與C語(yǔ)言的不同,被extern"C"修飾的變量函數(shù)。C++提供了一個(gè)C連接交換指定符號(hào)extern“C”來(lái)解決這個(gè)問(wèn)題。(1).}printf(str);}答:輸出“hello”(2).printf(str);}}(3).charp[]="helloworld";}str=GetMemory();printf(str);}其中strDest是目的字符串,strSrc是源字符串。答:VC源碼:{cp++;}答:不是,其它數(shù)據(jù)類型轉(zhuǎn)換到CStrin7.C++中為什么用模板類。(2)它是類型無(wú)關(guān)的,因此具有很高的可復(fù)用性。(3)它在編譯時(shí)而不是運(yùn)行時(shí)檢查數(shù)據(jù)類型8.CSingleLock是干什么的。9.NEWTEXTMETRIC是什么。10.程序什么時(shí)候應(yīng)該使用線程,什么時(shí)候單線程效率高。的運(yùn)行部分,這樣的程序會(huì)利于理解和修改。其他情況都使用單線程。12.Linux有內(nèi)核級(jí)線程么。控制用戶線程。這種線程甚至在象DOS這樣的操作系統(tǒng)中也可實(shí)現(xiàn),但戶程序完成,這有些類似Windows3.x的協(xié)作式多任務(wù)。另外一種則需要內(nèi)核的參與,由被定制或修改以適應(yīng)特殊應(yīng)用的要求,但是當(dāng)一個(gè)線程因I/O而處于等待狀態(tài)時(shí),整個(gè)進(jìn)制,有利于發(fā)揮多處理器的并發(fā)優(yōu)勢(shì),但卻占用了更多的系統(tǒng)開支。WindowsNT和OS/2支持內(nèi)核線程。Lin答:棧:存放局部變量,函數(shù)調(diào)用參數(shù),函數(shù)返回值,函數(shù)返回地址。堆:程序運(yùn)行時(shí)動(dòng)態(tài)申請(qǐng),new和mall近堆還是遠(yuǎn)堆不是很清楚。14.使用線程是如何防止出現(xiàn)大的波峰。度效率和限制資源使用的好處,線程池中的線程達(dá)到最大數(shù)時(shí),其他線程就會(huì)排隊(duì)等候。由程序員在程序中顯式地指定。志。也就是說(shuō)基本上處于不能使用的狀態(tài)。戶所修改。因而行級(jí)鎖即可保證數(shù)據(jù)的一致性又能提高數(shù)據(jù)操作的迸發(fā)性。自然邊界上對(duì)齊。原因在于,為了訪問(wèn)未對(duì)齊的內(nèi)存,處理器需要作兩次內(nèi)存訪問(wèn);然而,對(duì)齊的內(nèi)存訪問(wèn)僅需要一次訪問(wèn)。21.對(duì)數(shù)據(jù)庫(kù)的一張表進(jìn)行操作,同時(shí)要對(duì)另一張表進(jìn)行操22.TCP/IP建立連接的過(guò)程?(3-wayshake)答:在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k即SYN+ACK包,此時(shí)服務(wù)此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。答:Internet控制報(bào)文協(xié)議,處于網(wǎng)絡(luò)層(IP層)保對(duì)數(shù)據(jù)的處理必須符合由這些SQL語(yǔ)句所定義的規(guī)則。25.winsock建立連接的主要實(shí)現(xiàn)步驟?答:服務(wù)器端:socker(建)立套接字,綁定(bind)并監(jiān)端連接。套接字上寫讀數(shù)據(jù),直至數(shù)據(jù)交換完畢,closesocket()關(guān)閉套接字。服務(wù)器端:accept發(fā)現(xiàn)有客戶端連接,建立一個(gè)新的套接字,自身重新開始等待連接。該新產(chǎn)生的套接字使用send()和recv寫讀數(shù)據(jù),直至數(shù)據(jù)交換完畢,c接字。1.載入時(shí)動(dòng)態(tài)鏈接(load-timedynamiclinking模塊非常明確調(diào)用某個(gè)導(dǎo)出函數(shù),使們就像本地函數(shù)一樣。這需要鏈接時(shí)鏈接那些函數(shù)所在DLL的導(dǎo)入庫(kù),導(dǎo)入庫(kù)向系統(tǒng)提供了載入DLL時(shí)所需的信息及DLL函函數(shù)的出口地址,然后就可以通過(guò)返回的函數(shù)指針調(diào)用DLL函數(shù)了。如此即可避免導(dǎo)入庫(kù)文件了。答:Internet上產(chǎn)生的許多新的應(yīng)用,特別是高帶寬的多媒體應(yīng)用,對(duì)如何節(jié)約網(wǎng)絡(luò)資源的前提下保證服務(wù)質(zhì)量。typedefstructdoublecyclelink{DoubleCycleLinkT*find遍歷整個(gè)雙向循環(huán)鏈表,將第一個(gè)與key值相同的結(jié)點(diǎn)移出鏈表,并返回。若沒(méi)有找到則返回NULL。答:DoubleCycleLinkT*fin{p=link->next;while(p->next!=link)//鏈{if(p->key==key)//查找到key值相同,刪除該節(jié)點(diǎn){p->prev->next=p->next;p->next->prev=p->prev;p=p->next;//否則查找下一節(jié)點(diǎn)}if(p->next==link)returnNULL;//沒(méi)找到,返回NULL}*voidprintTriangle(constunsignedcharlin輸入行數(shù),打印三角形。答:voidprintTriangle(constunsignedcharli{for(inti=1;i<=line;i++){for(intj=0;j<(line*2-1);j++)//5行每行需打印9個(gè)字符{if(i%2==1)//奇數(shù)行{if(j%2==(line-1)%2&&j>=(line-1-i/2*2)&&j<=(line-1+i/2*2))if(j%2==(line)%2&&j>=(line-2-(i/2-1)*2)&&j<=(line+(i/2-1)*2))printf("*");}printf("\n");}}答:{{if(!*s2)}}{chari=0;{}}答:是個(gè)死循環(huán),無(wú)限次啊,無(wú)限次。答:#defineMIN(365*24*6{intx=10,y=3;printf("%d\n",y=x/y);}intF(intx){}{printf("%d\n",F(3+5));}:?{數(shù)最多的成員就可。答:明這個(gè)數(shù)據(jù)包不能繼續(xù)向前傳送,因?yàn)槠銽TL已經(jīng)過(guò)期了。t知道這個(gè)路由器存在于這個(gè)路徑上,接著traceroute再送出另一個(gè)TTL是2的數(shù)據(jù)包,發(fā)現(xiàn)第2個(gè)路由器這個(gè)重復(fù)的動(dòng)作一直持續(xù)到某個(gè)datagram抵達(dá)□□*□□□□□□***□□□□□□*****□□□□□□*******□□□□□□*********□□□□□□***********□□*************□□□□□□***************□□□□□*****************□□□□□□*******************□□□□□□*****************□□□□□□***************□□□□□□*************□□□□□□***********□□□□□□*********□□□□□□*******□□□□□□*****□□□□□□***□□□□□□*□□□□{答:{charch='*';for(inti=0;i<maxsize;++i){{intk=(maxsize+1-2*i)/2;{}printf(format,ch);printf("\n");stars[maxsize-1-(2*(i+1)-maintk=(2*(i+2)-maxsize-1)/2;strcat(format,tmp);strcat(format,"c");strcat(format,stars);printf(format,ch);printf("\n");}}{}輸出結(jié)果:for(inti=10;(i++^--i)=答:5.Emailrelay和Emailaccess分別用了什么協(xié)議?(其他還有很多,略)A.rom,B.flashC.eepromD答:存取存儲(chǔ)器,也就是內(nèi)存了。不管是堆還是棧都是放在內(nèi)存里的。答:x在PC機(jī)上的內(nèi)存存放順序?yàn)?8563412,高字節(jié)在前,低字節(jié)在后,因此輸出chara[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23答:*(*(*(a+i/6)+(i/3%2)){}{}答:輸出結(jié)果為:Ab,因?yàn)樵趂un函數(shù)里,指針a指向s++{{}{}voidAllocte(intsize)(3){}{{}voidSaveString(constchar*pText)co{}{{buffer1.SaveString("Microsprintf(buffer1.GetBuffe}將voidSaveString(constchar*pText)co{strcpy(m_pBuffer,pText);}voidSaveString(constchar*pText)(1){Allocte(strlen(pText)+1);(2)strcpy(m_pBuffer,pText);}原因:(1)const成員函數(shù)表示不會(huì)修改數(shù)據(jù)成員,而{}{{}//copy“Welcome”tonastrcat(name,GetName()//printout}#include<malloc.h>//malloc函{//charname[]="MSRAsiachar*name=(char*)malloc(strlen("MSRAsia"}voidmain(intargc,c{//for(inti=0;i<=32;i+for(inti=0;i<=31;i++)//數(shù)組越界{}//copy“Welcome”tonastrcat(name,"Welcome");///Appendablankchar//Appendstringtonamechar*p=GetName();放//printoutprintf(name);}{{printf("FuncAcalled}{printf("FuncBcalled{{printf("FuncABcalled}{printf("FuncBBcalled{}答:pa2->FuncB();輸出intFindSubString(char{{{}{}}{{}{}}voidModifyString(char*pTe{{intcount=FindSubStrin{{}}{}}{chartext[32]="XYBC}*{intj;}答:{inti;intj;intk;{{printf("*");printf(".");}printf("\n");}}{intarray[]={45,56,76,234,1,34,23,2,3};//}{}待排序數(shù)組。不知道這樣做是否符合題意。{for(inti=0;i<num-1;i++)for(intj=i+1;j<num;j++)if(array[i]<array[j]){}但要說(shuō)明你選擇的理由。intPheponatch(int);{printf("The10this%d",Pheponatch(10));}intPheponatch(intN){答:太深,則堆棧會(huì)溢出。intPheponatch(intN){if(N==2||N==1)returnPheponatch(N-1)+Pheponatch(N-}typedefstructTNode{{append(17);//Again}{TNode*NewNode=(TNode*NewNode->value=N;{{while((N>=temp->value&&temp->left!=NULL)||(N<temp->valu{while(N>=temp->value&&temp->left!=NUwhile(N<temp->value&&temp->right!=NU}}答:{TNode*NewNode=(TNode*NewNode->value=N;NewNode->left=NULL;NewNode->right=NULL;if(root==NULL){{//while((N>=temp->value&&temp->left!=NULL)||(N<temp->value&&temp->right!=NULL))//易引起死循環(huán),去掉while(N>=temp->value&&temp->left!=NUwhile(N<temp->value&&temp->right!=NU{temp->left->right=NewNNewNode->left=temp->left;NewNode->right=temp;{temp->right->left=NewNNewNode->right=temp->right;NewNode->left=temp;}}{}{{}}答:strcpy使用錯(cuò)誤,strcpy只有遇到字符串末尾的'\0'才會(huì)結(jié)束,而str1并沒(méi)有結(jié)尾標(biāo)志,voidtest3(char*st{{}}str1剛好為10個(gè)字符+1結(jié)尾符,string就得不到結(jié)尾符了。可將strlen(str1)<=10改為strlen(str1)<10。{for(I=0;I<MAX_SRM;I++,S{{}}答:我不知道這段代碼的具體功能,但明顯2,由于static的聲明,使該函數(shù)成為不可重入(即不可預(yù)測(cè)結(jié)果)函數(shù),因?yàn)榱糠旁诔绦虻娜执鎯?chǔ)區(qū)中,每次調(diào)用的時(shí)候還可以保持原來(lái)的賦值聲明。{}{{}}該題比較簡(jiǎn)單。只要注意b聲明為static靜態(tài)全局變量,其值在下次調(diào)用時(shí)是可以保持住原來(lái)的賦值的就可以。{{}}答:a[q-p]=a[2]=2;這題是要告訴我們指針答:此處定義的是指向指針的指針數(shù)組,對(duì)于32位系統(tǒng),指針占答:/*輸入年月日時(shí)分秒,輸出年月日時(shí)分秒的下一秒,輸出仍然在原內(nèi)存空間*/{intnDays;{break;if(*nYear%400==0||*nYear%100!=0&&*nYe{{}break;break;}(*nSecond)++;//秒加1{{{{{}}}}/*示例可運(yùn)行代碼*/{intnYear=2004,nMonth=12,nDate=31,nHour=23,nMinute=59,nSecboolres=NextMinute(&nYear,&nMonth,&nDate,&nHour,&nMinute,&nSecond);printf("Theresult:%d-%d-%d%d:%d:%d",nYear,nMonth,nDate,nHour,nMinute,nSecond);printf("Inputerror!\n");}constchar*,charconst*,char*const的區(qū)別問(wèn)題幾乎是C++面試中每次都會(huì)有的題目。事實(shí)上這個(gè)概念誰(shuí)都有只是三種聲明方式非常相似很容易記混。Bjarne在他的TheC++ProgrammingLanguage里面給出過(guò)一個(gè)助記的把一個(gè)聲明從右向左讀。{}解答:數(shù)組A的下標(biāo)范圍為:0..MAX-1這句本身沒(méi)有問(wèn)題..但是返回for(i=0;ilongintfact(intn){{printf("error!");}}二分查找算法:intBSearch(elemtypea[],elemtypex,intlow,inthigh)/*在下屆為low,上界為high的數(shù)組a中折半查找數(shù)據(jù)元素x*/{if(x<a[mid])return(BSearch(a,x,low,elsereturn(BSearch(a,x,mid+}intBSearch(elemtypea[],keytypeke{{if(a[mid].key==key)retelseif(a[mid].key<key)low=mid+1;}}非遞歸計(jì)算如下遞歸函數(shù)的值(斐波拉契):解:{inti,s,s1,s2;{}}交換兩個(gè)數(shù),不用第三塊兒內(nèi)存:intb=……;a物理層為數(shù)據(jù)鏈路層提供物理連接,在其上串行傳送比特流,即所傳送數(shù)據(jù)的單位是比特。此外,該層中還具有確定連接設(shè)備的電氣特性和物理特性等功能。b數(shù)據(jù)鏈路層負(fù)責(zé)在網(wǎng)絡(luò)節(jié)點(diǎn)間的線路上通過(guò)檢測(cè)、流量控制和重發(fā)等手段,無(wú)差錯(cuò)地傳量控制等控制信息。目的地,并交付給相應(yīng)的傳輸層,即完成網(wǎng)絡(luò)的尋址功能。d傳輸層傳輸層是高低層之間銜接的接口層。數(shù)據(jù)傳輸?shù)膯挝皇菆?bào)文,當(dāng)報(bào)文該層以上各層將不再管理信息傳輸問(wèn)題。e會(huì)話層該層對(duì)傳輸?shù)膱?bào)文提供同步管理服務(wù)。在兩個(gè)不同系統(tǒng)的互相通信的應(yīng)用進(jìn)程之間建立、組織和協(xié)調(diào)交互。例如,確定是雙工還是半雙工工作。f表示層該層的主要任務(wù)是把所傳送的數(shù)據(jù)的抽象語(yǔ)法變換為傳送語(yǔ)法,即把不同計(jì)算機(jī)內(nèi)部的不同表示形式轉(zhuǎn)換成網(wǎng)絡(luò)通信中的標(biāo)準(zhǔn)表示形式。此外,對(duì)傳送的數(shù)據(jù)加密(或解交互訪問(wèn)的虛擬終端功能等。a網(wǎng)絡(luò)接口層這是TCP/IP協(xié)議的最低一層,包括有多種邏輯鏈路控制和媒體訪問(wèn)協(xié)議。網(wǎng)絡(luò)接口層的功能是接收IP數(shù)據(jù)報(bào)并通過(guò)特定的網(wǎng)絡(luò)進(jìn)行傳輸,或從網(wǎng)絡(luò)上接收物理幀,抽取出IP數(shù)據(jù)報(bào)并轉(zhuǎn)交給網(wǎng)際層。算機(jī)之間的通信,主要處理數(shù)據(jù)報(bào)和路由。在IP層中,ARP協(xié)議用于將IP地址轉(zhuǎn)換成物理地址,RARP協(xié)議用于將物理地址轉(zhuǎn)換成IP地址,ICIP協(xié)議在TCP/IP協(xié)議組中處于核心地位?;?shù)據(jù)確認(rèn)和丟失重傳等。d應(yīng)用層TCP/IP協(xié)議的應(yīng)用層相當(dāng)于OSI模型的會(huì)話層、表示層和應(yīng)用層,它向用戶有用戶應(yīng)用程序,它們均是建立在TCP/IP協(xié)議組之上的專用程序。bOSI先于協(xié)議出現(xiàn),因此不會(huì)偏向于任何一組特定的協(xié)議該放哪一層上,因此不得不加入一些子層;TCP/IP后于協(xié)議出現(xiàn),僅是將已有協(xié)議的一個(gè)描述,因此兩者配合的非常好;但他不適合其他的協(xié)議棧,不容易描述其他非TCP/I絡(luò);cOSI中網(wǎng)絡(luò)層同時(shí)支持無(wú)連接和面向連接的通信,但在d在技術(shù)發(fā)生變化時(shí),OSI模型比TCP/IP模型中的協(xié)議更容易被替換。--將網(wǎng)絡(luò)互相連接起來(lái)要使用一些中間設(shè)備(或中間系統(tǒng)ISO的術(shù)語(yǔ)稱之為中繼(relay)系統(tǒng)。根據(jù)中繼系統(tǒng)所在的層次,可以有以下五種中繼系統(tǒng):1.物理層(即常說(shuō)的第一層、層L1)中繼系統(tǒng),即轉(zhuǎn)發(fā)器(repe2.數(shù)據(jù)鏈路層(即第二層,層L2即網(wǎng)橋或橋接器(bridge)。3.網(wǎng)絡(luò)層(第三層,層L3)中繼系統(tǒng),即路由器(router)。4.網(wǎng)橋和路由器的混合物橋路器(brouter)兼有網(wǎng)橋和路由器的功能。5.在網(wǎng)絡(luò)層以上的中繼系統(tǒng),即網(wǎng)關(guān)(gateway).當(dāng)中繼系統(tǒng)是轉(zhuǎn)發(fā)器時(shí),一般不稱之為網(wǎng)絡(luò)互是指用交換機(jī)和路由器進(jìn)行互聯(lián)的網(wǎng)絡(luò)。本文主要闡述交換機(jī)和路由器及其區(qū)別。第二層交換機(jī)和路由器的區(qū)別:傳統(tǒng)交換機(jī)從網(wǎng)橋發(fā)展而來(lái),屬于OSI第二層即數(shù)據(jù)鏈路層設(shè)備。它根據(jù)MAC地址尋址,通過(guò)站表選擇路由,站表的建立和維護(hù)由交換機(jī)自動(dòng)進(jìn)行。路由器屬于OSI第三層即網(wǎng)絡(luò)層設(shè)備,它根據(jù)IP地址進(jìn)行尋址,通過(guò)路由表路由協(xié)議產(chǎn)生。因特網(wǎng)的路由選擇協(xié)議:內(nèi)第三層交換機(jī)和路由器的區(qū)別:器的大多數(shù)功能。綜上所述,交換機(jī)一般用于LAN-WAN的連接,交換機(jī)歸于網(wǎng)橋,是數(shù)據(jù)鏈路層的設(shè)備,有些交換機(jī)也可實(shí)現(xiàn)第三層的交換。路由器用于WAN-WAN之間的連接,可以解決異性又有路由器良好的控制功能,因此得以廣播應(yīng)用。知識(shí)在類對(duì)象生命期結(jié)束的時(shí)候,由系統(tǒng)自動(dòng)調(diào)用釋放在構(gòu)造函數(shù)中分配的資源。這種在運(yùn)行時(shí),能依據(jù)其類型確認(rèn)調(diào)用那個(gè)函數(shù)的能力稱為多態(tài)性,或稱遲后聯(lián)編。另:在子類重載時(shí)有個(gè)統(tǒng)一的命名而已。用的時(shí)間段。其實(shí)現(xiàn)是由編譯器在編譯時(shí)采用不同內(nèi)存分配方法。全局變量在m用后,就開始分配,如果是靜態(tài)變量則是在main函數(shù)前就已經(jīng)初始化了。而局部變量則是在用Q7:一些寄存器的題目,主要是尋址和內(nèi)存管理等一些知識(shí)。標(biāo)準(zhǔn)答案:如下寫法均屬不良風(fēng)格,不得分。if(flag==TRUE)if(flag==FALSE)if(flag==0)標(biāo)準(zhǔn)答案示例:if((x>=-EPSINON)&&(x<=比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”此類形式。如下是錯(cuò)誤的寫法,不得分。標(biāo)準(zhǔn)答案:if(p==NULL)如下寫法均屬不良風(fēng)格,不得分。if(p==0)if(p)if(!){sizeof(str)=4(2分)}sizeof(str)=6(2分)sizeof(p)=4(2分)sizeof(n)=4(2分)sizeof(p)=4(2分)答:防止該頭文件被重復(fù)引用。答1)可以定義const常量(2)const可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。答:C++語(yǔ)言支持函數(shù)重載,C語(yǔ)言不支持函數(shù)重載。函數(shù)與C語(yǔ)言的不同。假設(shè)某個(gè)函數(shù)的原型為:voidfoo(intx,inty);_foo_int_int之類的名字。C++提供了C連接交換指定符號(hào)extern“C”來(lái)解決名字{if(condition)}if(condition){{}率。{}{strcpy(str,"helloworld");printf(str);}答:程序崩潰。Test函數(shù)中的str一直都是NULstrcpy(str,"helloworld");將使程序崩潰。{charp[]="helloworld";}{str=GetMemory();printf(str);}答:可能是亂碼。因?yàn)镚etMemory返回的是指向“棧內(nèi)存”現(xiàn)的內(nèi)容已經(jīng)被清除,新內(nèi)容不可知。{}{printf(str);}答:1.AclassBnetworkontheintemaximumnumberofhostspersubnet.答:C對(duì)于B類網(wǎng)絡(luò)地址,子網(wǎng)掩碼255.2具體計(jì)算公式見:/blogview.asp?logID=95&cateI2.Whatisthedifference:betweeno(logn)a.o(logn^2)isbiggerb.o(llogn^2=2*logn(n^2a.compilationerrorbc.stackoverflowd.noneoftheab答:C相當(dāng)于遞歸調(diào)用,不停的在棧上分配空間使棧溢出。b.keywordc.operatord.noneoftheabove答:C注意new/delete都是C直接支持的運(yùn)算符,其他可能錯(cuò)認(rèn)為是庫(kù)函數(shù)的的有sizeof()和typeid()及C++新增的四個(gè)類型轉(zhuǎn)換運(yùn)算符。5.Whichofthefollowinginformationisnotcontained答:C每個(gè)文件的信息存儲(chǔ)在inodes中。通常inode信息包含兩部分:1)文件的所有者、類型、文件名只是與inode相關(guān)聯(lián),inode再提供對(duì)數(shù)據(jù)塊的訪問(wèn)。具體情況要看UNIX文件系統(tǒng)的書。答:B假設(shè)兩個(gè)排好序的數(shù)組為a{1,3}和b{2,4}(此種交錯(cuò)為最壞情況)要排序成一個(gè)數(shù)組n>1otherwise1theorder答:a解得:T(n)=1+1+1/2+1/3+……當(dāng)n很大時(shí),有:1+1/2+1/3+1/4+1/5+1/6+...1/n=0.577215664參見:/xuebao/2003-3/pages/oulachangshu8.Thenumberof'1'inthebinaryrepresentatio答:C分解為:11*1000000000000+1111*100000000+101*10000+11=過(guò)程。答:1.實(shí)模式,又叫實(shí)地址模式,CPU完全按照8086的實(shí)際尋址方法訪問(wèn)從00000h--FFFFFh(1MB大?。┑牡刂贩秶膬?nèi)存,在這種模式下,CPU只能做單任務(wù)運(yùn)行物理地址=左移4位的段地址+偏移地址,即:物理地址是由16位的段地址和16位的段內(nèi)偏移地址組成的。模式下,系統(tǒng)運(yùn)行于多任務(wù),設(shè)計(jì)這種模式的原因和好處是:保護(hù)模式增加了尋址空間,和特權(quán)級(jí),各應(yīng)用程序和操作系統(tǒng)的代碼和核心是被保護(hù)的,這也是多任務(wù)支持鍵和保護(hù)這個(gè)名字的由來(lái))。尋址過(guò)程為:物理地址=由段地址查詢?nèi)置瓒位?偏移地址,即:物理地址由影像寄存器中的基址加上16位或者32{virtualvoiddoSth(){printf("IamA"{virtualvoiddoSth(){printf("IamB"答:誰(shuí)知道怎么處理補(bǔ)上吧。?(答:即要求列出線程同步方法,具體答案可見下面一題。答:這些對(duì)象都是用于線程同步的對(duì)象。臨界區(qū):一種保證在某一時(shí)刻只有一個(gè)線程能訪問(wèn)數(shù)據(jù)的簡(jiǎn)便辦LeaveCriticalSection。互斥對(duì)象:互斥對(duì)象跟臨界區(qū)相似,但它不僅僅能夠在同一應(yīng)用程序不同線程中的安全共享,而且可以在不同應(yīng)用程序的線程之間實(shí)現(xiàn)對(duì)資源的安全共享,當(dāng)然下面兩者也有這個(gè)特點(diǎn)。主要API函數(shù)有,創(chuàng)建互斥量:CreateMutex,打開一個(gè)存在的互斥量:同時(shí)訪問(wèn)共享資源的線程最大數(shù)目。它的API函數(shù)和使用方法都與互斥對(duì)象相似,如創(chuàng)建事件:用來(lái)通知其他進(jìn)程/線程某件操作已經(jīng)完成。API函數(shù)有創(chuàng)殊點(diǎn)的是可以用函數(shù)SetEvent人工設(shè)置事件為有無(wú)信號(hào)狀使用函數(shù)SetEvent。答:三者都是函數(shù)調(diào)用的約定。函數(shù)在返回前清理傳送參數(shù)的內(nèi)存棧。分也是不同的。注意:?jiǎn)卧~間的間隔不一定是一個(gè)空格。答:可執(zhí)行程序代碼如下,假設(shè)該文本已存入text這個(gè)數(shù)組里。{chartext[1000]={"Asatechnointi=0,count=0;boolflag=false;//前面的字符是否為字母while(text[i]&&i<100{if(flag&&!((text[i]>='a'&&text[i]<='z')||(text[i]>='A'&}elseif(!flag&&((text[i]>='a'&&text[i]<='z')||(text[i]>='A'&&text[i]<='Z')))}}}個(gè)棋盤放置8個(gè)皇后,并使它們互相無(wú)法威脅到彼此。答:以下是可執(zhí)行C代碼,采用非遞歸解法,你如果想了解皇后問(wèn)題的算法的詳細(xì)過(guò)程可看下面網(wǎng)址:/infoview/2005031720203563221270.h一樣的。#defineQUEEN8/intqueen[QUEEN];//下標(biāo)代表所在列號(hào),值代boolrow_YN[QUEEN];boolpassive_YN[2*QUEEN-1];boolnegative_YN[2*QUEEN{boolflag=false;while(row>=0)//跳出條件是回溯到無(wú)法{queen[row]++;if(queen[row]>=QUEEN)//{if(row>=0)//回溯時(shí)要清理如下行{row_YN[queen[row]]=falpassive_YN[queen[row]+row]=false;negative_YN[QUEEN-1+row-que}{if(row_YN[queen[row]]={//以下檢查當(dāng)前棋子是否與之前的棋子斜線if(flag)//flag{if(row==QUEEN-1)//列到達(dá)最后,即最后一個(gè)皇后也{cout<<"***第"<<count<<"種解法***"<<for(inti=0;i<QUEEN;i++)cout<<"第"<<i<<"列皇后在第"<<queen[i]<<"}row_YN[queen[row]]=trpassive_YN[queen[row]+row]=trnegative_YN[QUEEN-1+row-queen[row]]=true;//當(dāng)前行負(fù)斜率方向上也有棋子row_YN[queen[row]]=falpassive_YN[queen[row]+row]=false;negative_YN[QUEEN-1+row-queen[row]}}}}cout<<QUEEN<<"皇后問(wèn)題一共有"<<count<<"種解法"<<endl;}確結(jié)果。思路是:將大數(shù)當(dāng)作字符串進(jìn)行處理,也就是將大數(shù)用10進(jìn)擬人們手工進(jìn)行“豎式計(jì)算”的過(guò)程編寫乘法。intstr_num(charstr[])//計(jì)算字符串的長(zhǎng)度,等效于strlen(str);{inti=0,num_str=0;}}voidplace(intnum_str,charstr[])//將字符串高低顛倒。{for(i=0,j=num_str-1;i<}voidtransition(unsignedinta[],charstr1[])//數(shù)字字符轉(zhuǎn)化為數(shù)字。{inti=0;}voidmultiply_int(unsignedinta[],unsignedintb[],unsignedintc[])//大數(shù)相乘算法,入口為整形數(shù)組。{inti=0,j=0;{}voidoutput(intsign,unsignedintc[],intquan)//數(shù)據(jù)輸出。{intsign_temp=0,i=0;{}{}}voidmultiply_string(charstr1[],charstr2[],unsignedintc[])//大數(shù)相乘,入口為字符串。{unsignedinta[MAX]={0},b[MAX]={0};}intsign_comp(charstr1[],charstr2[])//符號(hào)判斷,如果為負(fù)數(shù)將作相應(yīng)處理。{inti=0,sign_num=0;}}}intformat(charstr[])//將輸入的字符串進(jìn)行格式化。以得到字符的一些標(biāo)志信息和相應(yīng)格式的新數(shù)據(jù)串。{intpoint=0,quan=0,i=0,j,k=0,sign_point=0,nu{}}}}{for(j=sign_point;j<nu_}place(num_str,str);}voidclear(charstr[])//清空函數(shù)。{inti;{}voidmain(void)//主函數(shù)。{charstr1[MAX]={0},str2[MAX]={0};intquan1=0,quan2=0unsignedintc[MAX*2+1]={0};{cout<<"Pleaseinputthefirstcout<<"Pleaseinputthesecond{}}while(quan1==-1||quan2==-1||str1multiply_string(str1,str2,}指針,一直被認(rèn)為是C語(yǔ)言中的精華。只有掌握了指針,你才能說(shuō)你學(xué)會(huì)了C語(yǔ)言。相當(dāng)初,我是把指針這一章足足看了三遍才算是“學(xué)了這一章”下面的大家也會(huì)有所幫助。指針是一個(gè)特殊的變量,它里面存儲(chǔ)的數(shù)值被解釋成為內(nèi)存里的一個(gè)地址。要搞清一個(gè)指針需要搞清指針的四方面的內(nèi)容:指針的類類型,指針的值或者叫指針?biāo)赶虻膬?nèi)存區(qū),還有指針本身所占據(jù)的我們分別說(shuō)明。先聲明幾個(gè)指針?lè)胖隼樱豪唬?+的復(fù)雜類型聲明>>。從語(yǔ)法的角度看,你只要把指針聲明語(yǔ)句里的指針名字去掉,剩下的部分就是這個(gè)指針的類型。這是指針本身所具有的類型。讓我們看看例一中類型:(4)int(*ptr)[3];/器將把那片內(nèi)存區(qū)里的內(nèi)容當(dāng)做什么來(lái)看待。從語(yǔ)法上看,你只須把指針聲明語(yǔ)句中的指針名字和名字左邊的(4)int(*ptr)[3];//指針在指針的算術(shù)運(yùn)算中,指針?biāo)赶虻念愋陀泻艽蟮淖饔?。指針的類?即指針本身的類型)和指針?biāo)鶃?lái)越熟悉時(shí),你會(huì)發(fā)現(xiàn),把與指針攪和在一起的“類型”這個(gè)少書,發(fā)現(xiàn)有些寫得差的書中,就把指針的這兩個(gè)概念攪在一來(lái)前后矛盾,越看越糊涂。指針的值是指針本身存儲(chǔ)的數(shù)值,這個(gè)值將被編譯器當(dāng)作32位程序里內(nèi)存地址全都是32位長(zhǎng)。指針?biāo)赶虻膬?nèi)存區(qū)就是從指針的值所代表的那個(gè)內(nèi)存區(qū)域,就相當(dāng)于說(shuō)該指針的值是這塊內(nèi)存區(qū)域的首地址。指針?biāo)赶虻膬?nèi)存區(qū)和指針?biāo)赶虻念愋褪莾蓚€(gè)完全不同,指針?biāo)赶虻念愋鸵呀?jīng)有了,但由于指針還未初始化,所以它所指向的內(nèi)存區(qū)是不存在的,或者說(shuō)是無(wú)意義的。以后,每遇到一個(gè)指針,都應(yīng)該問(wèn)問(wèn):這個(gè)指針的類型是什么?指針本身占了多大的內(nèi)存?你只要用函數(shù)s指針本身占據(jù)的內(nèi)存這個(gè)概念在判斷一個(gè)指針表達(dá)式=======================部分字符串處理函數(shù)puts(字符數(shù)組)將一個(gè)字符串輸出到終端。gets(字符數(shù)組)從終端輸入一個(gè)字符串到字符數(shù)組,并且得到一個(gè)函數(shù)值首地址strcat(字符數(shù)組1,字符數(shù)組2)連接兩個(gè)字符數(shù)返回負(fù)數(shù)。Strlen(字符數(shù)組)求字符串長(zhǎng)度。Strupr(字符串)將字符串中的小寫字母以上是一些比較常用的字符串處理函數(shù)。變量分配存儲(chǔ)空間。C語(yǔ)言中,變量的存儲(chǔ)方法分為兩大類:靜態(tài)存儲(chǔ)類和動(dòng)態(tài)存儲(chǔ)類,具體包括:自動(dòng)的函數(shù)中的局部變量如不作專門說(shuō)明,都之a(chǎn)uto的,即動(dòng)態(tài)存儲(chǔ)的,auto可以省略。局部變數(shù)可以作為register變量,其它不行。能在本文件中引用了,而不能被其它文件引用。局部變量:自動(dòng)變量,即動(dòng)態(tài)局部變量(離開函數(shù),(形參可定義為自動(dòng)變量和寄存器變量)要調(diào)用此函數(shù)的文件中,一般要用extern說(shuō)明。c編譯系統(tǒng)在對(duì)程序進(jìn)行通常的編譯之前,先進(jìn)行預(yù)處理。c提供的預(yù)處理功能主要有以下用一個(gè)指定的標(biāo)識(shí)符來(lái)代表一個(gè)字符串,形式:#幾點(diǎn)說(shuō)明:2)宏定義不作語(yǔ)法檢查,只有在編譯被宏5)可以用#undef命令終止宏定義的作用域這和函數(shù)有些類似,但他們是不同的:編譯。<>表示系統(tǒng)直接按指定的標(biāo)準(zhǔn)方式檢索目錄。所以用""保險(xiǎn)一點(diǎn)。條件編譯指不對(duì)整個(gè)程序都編譯,而是編譯滿足條件的那部分。條件編譯有以下幾種形式:#endif它的作用:當(dāng)標(biāo)識(shí)符在前面已經(jīng)被定義過(guò)(一般用#define則對(duì)程序段1編譯,否則對(duì)程序段2編譯。2)#ifndef標(biāo)識(shí)符#endif它的作用和#ifdef相反,當(dāng)標(biāo)識(shí)符沒(méi)被定義過(guò),對(duì)程序段1編譯,否則對(duì)程序段2編譯。3)#if表達(dá)式#endifconstinti=5;intj=0;j=i;//合法constinti=5;//合法constintj;//非法,導(dǎo)致編譯錯(cuò)誤externconstinti;//合法externconstintj=10;//非法,常量不可以被再次賦值用const方法可以使編譯器對(duì)處理內(nèi)容有更多了解。constlong&i=10;/*dapingguo提醒:由于以后的引用中,以致在以后的代碼中沒(méi)有錯(cuò)誤,為有優(yōu)化措施,即使constlongi=10;charh=I;//沒(méi)有錯(cuò)charh=i;//編譯警告,可能由于數(shù)的截短帶來(lái)錯(cuò)誤賦值。constcharstring[]="abcdefghprintf(STRING);//為STRIprintf(string);//為string一次分printf(STRING);//為STRINprintf(string);由于const定義常量從匯編的角度來(lái)看而不是象#define一樣給出的是立即數(shù),所以,const定義程序運(yùn)行過(guò)程中只有一份拷貝,而#define定義的常量若干個(gè)拷貝。constinti=value();dapingguo說(shuō):假定對(duì)ROM編寫程序時(shí),由于目標(biāo)代碼的不可改本語(yǔ)句將會(huì)無(wú)效,不過(guò)可以變通一下:值有不會(huì)被修改。觀察以下一段代碼:constinti=0;p=100;通過(guò)強(qiáng)制類型轉(zhuǎn)換,將地址賦給變量,再作修改即可以改變const常量值。8.請(qǐng)分清數(shù)值常量和指針常量,以下聲明頗為玩味:intii=0;constinti=0;//i是常量,i的值不會(huì)被修改p1i=ⅈ//合法*p2i=100;關(guān)于C++中的const關(guān)鍵字的用法非常靈活,而使用const將大大改善程序的健壯性,參考了康建東兄的const使用詳解一文,對(duì)其中進(jìn)行了一些補(bǔ)充,寫下了本文。優(yōu)點(diǎn):const常量有數(shù)據(jù)類型,而宏常量沒(méi)有數(shù)據(jù)類型。編譯器可以對(duì)前者進(jìn)行類型安全檢2.const修飾類的數(shù)據(jù)成員。如:{}const數(shù)據(jù)成員只在某個(gè)對(duì)象生存期內(nèi)是常量,而對(duì)于整個(gè)類而言卻是可變的。因?yàn)轭惪梢詣?chuàng)建多個(gè)對(duì)象,不同的對(duì)象其const數(shù)據(jù)成員的值可以不同。所以不能在類聲明中初始化const數(shù)據(jù)成員,因?yàn)轭惖膶?duì)象未被創(chuàng)建時(shí),編譯器不知道c{intarray[size];}const數(shù)據(jù)成員的初始化只能在類的構(gòu)造函數(shù)的初始化表中進(jìn)行。要想建立在整個(gè)類中都恒}型是整數(shù),其最大值有限,且不能表示浮點(diǎn)數(shù)。3.const修飾指針的情況,見下式:intb=500;系,我們可以參考《Effectivec++》Item21上的做法,是修飾指針本身,即指針本身是常量。因此,[1]和[2]的情況相同,都是指針?biāo)赶虻膬?nèi)容能*a=3;[3]為指針本身是常量,而指針?biāo)赶虻膬?nèi)容不是常量,這種情況下不能對(duì)指針本身進(jìn)行更改操作,如a++是錯(cuò)誤的;[4]為指針本身和指向的內(nèi)容均為常量。2)指針const常量初始化的情或者:constA*c=newconstA&e=f;//這樣般的成員函數(shù);5.另外const的一些強(qiáng)大的功能在于它在函數(shù)聲明中的應(yīng)用。在一個(gè)函數(shù)聲明中,const情況,以下會(huì)逐漸的說(shuō)明用法:A&operator=(constA&voidfun1()const;/調(diào)用函數(shù)的時(shí)候,用相應(yīng)的變量初始化const常量,則在函數(shù)體中,按照const所修飾的部原對(duì)象的屬性。用“值傳遞”方式,由于函數(shù)將自動(dòng)產(chǎn)生臨時(shí)變量用于復(fù)制該參數(shù),該參數(shù)本就不需要保護(hù),所以不用const修飾。是為了提高效率。例如,將voidFunc(Aa)對(duì)于內(nèi)部數(shù)據(jù)類型的輸入?yún)?shù),不要將“值傳遞”的方式改為“const引用傳遞”。否則既達(dá)不到提高效率的目的,又降低了函數(shù)的可理解性。例如voidFunc(intx)不應(yīng)該改為voidFunc(constint&x)operator*(constRational&lhs,constRatio{returnRational(lhs.numerator()}返回值用const修飾可以防止允許這樣的操作發(fā)生產(chǎn)生新對(duì)象的時(shí)候。重載。通常,不建議用const修飾函數(shù)的返回值類型為某個(gè)對(duì)象或?qū)δ硞€(gè)對(duì)象引用的情況。原因如下:如果返回值為某個(gè)對(duì)象為const(constAtest=A實(shí)例)或某個(gè)對(duì)象的引用為少用到。2.如果給采用“指針傳遞”方式的函數(shù)返回值加const的內(nèi)容不能被修改,該返回值只能被賦給加const修飾的如下語(yǔ)句將出現(xiàn)編譯錯(cuò)誤:正確的用法是:3.函數(shù)返回值采用“引用傳遞”的場(chǎng)合不多,這種方式一般只出現(xiàn)在類的賻值函數(shù)中,目的是為了實(shí)現(xiàn)鏈?zhǔn)奖磉_(dá)。如:A&operate=(constA&other);//負(fù)}Aa,b,c;//a,ba=b=c;(a=b)=c;確。(a=b)=c就不正確了。constA&operator=(const一般放在函數(shù)體后,形如:voidfun()任何不會(huì)修改數(shù)據(jù)成員的函數(shù)都因該聲明為const類型。如果在編寫const成員函數(shù)時(shí),不慎修改了數(shù)據(jù)成員,或者調(diào)用了其他非con的健壯性。如:{public:voidPush(intelem);intGetCount(void)const;//constprivate:{}2要避免最一般的賦值操作錯(cuò)誤,如將const變量賦值,具體可見思考3在參數(shù)中使用const應(yīng)該使用引用或指針,而不是一般的對(duì)象實(shí)4const在成員函數(shù)中的三種用法(參數(shù)、返回值、函數(shù))要很好的使用;指向的是一個(gè)常量,所以不正確;2這種方法正確,因?yàn)槁暶髦羔標(biāo)赶虻膬?nèi)容可變;3這種做法不正確;在constA::operator=(constA時(shí)侯,問(wèn)題就出現(xiàn)了:簡(jiǎn)單的strcpy函數(shù)都可看出面試者在技術(shù)上究竟達(dá)strcpy函數(shù)嗎?我們都覺得自己能,可是我們寫讀者可從本文看到strcpy函數(shù)從2分到10外,還有一些面試題考查面試者敏捷的思維能力。深入剖析則可進(jìn)一步增強(qiáng)自身的內(nèi)功。{}{inti;{}}voidtest3(char*st{{}}解答:試題1字符串str1需要11個(gè)字節(jié)才能存放下(包節(jié)的空間,strcpy會(huì)導(dǎo)致數(shù)組越界;性可以給7分,在此基礎(chǔ)上指出庫(kù)函數(shù)所占用的1個(gè)字節(jié)。剖析:考查對(duì)基本功的掌握:(1)字符串以’\0’結(jié)尾;(2)對(duì)數(shù)組越界把握的敏感度;幾個(gè)不同得分的答案:{}{}{}//為了實(shí)現(xiàn)鏈?zhǔn)讲僮?,將目的地址返回,?分!{}真不是蓋的!需要多么扎實(shí)的基本功才能寫一個(gè)完美的s(4)對(duì)strlen的掌握,它沒(méi)有包括字符串末尾讀者看了不同分值的strcpy版本,應(yīng)該也可以寫出一個(gè)10分的strlen函數(shù)了,完美的版本為:intstrlen(c{}{strcpy(str,"helloworld");}{charp[]="helloworld";}{}{}{}{}解答:charp[]="helloworld";的p[]數(shù)組為函數(shù)內(nèi)的局部自動(dòng)變量,在函數(shù)返回后,內(nèi)存已經(jīng)被釋放。這是許多程序員常犯的錯(cuò)誤,其根源在于不理解變量的生存期。試題6的getmemory避免了試題4的問(wèn)題,傳入getmemory的參數(shù)為字符串指針的指后未判斷內(nèi)存是否申請(qǐng)成功,應(yīng)加上:{}個(gè)“野”指針,應(yīng)加上:剖析:試題4~7考查面試者對(duì)內(nèi)存操作的理解程度,基本功扎實(shí)的答其中50~60的錯(cuò)誤。但是要完全解答正確,卻也絕非易事。對(duì)內(nèi)存操作的考查主要集中在:(1)指針的理解;(2)變量的生存期及作用范圍;(3)良好的動(dòng)態(tài)內(nèi)存申請(qǐng)和釋放習(xí)慣。再看看下面的一段程序有什么錯(cuò)誤:{}{}解答:bool型變量:if(!var)float型變量:剖析:但是未能清晰地表達(dá)程序的意思。慣。{}sizeof(p)=?解答:剖析:func(charstr[100])函數(shù)中數(shù)組名作為函數(shù)形參時(shí),在函數(shù)體內(nèi),數(shù)組名失去了本身的減等操作,可以被修改。數(shù)組名的本質(zhì)如下:(1)數(shù)組名指代一種數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)就是數(shù)組;例如:charstr[10];(2)數(shù)組名可以轉(zhuǎn)換為指向其指代實(shí)體的指針,而且是一個(gè)指針常量,不能作自增、charstr[10];(3)數(shù)組名作為函數(shù)形參時(shí),淪為普通指針。f解答:剖析:行的是一對(duì)一的替換。程序員對(duì)宏定義的使用要非常小心,特別要注意兩個(gè)問(wèn)題:(1)謹(jǐn)慎地將宏定義中的“參數(shù)”和整個(gè)宏用用括弧括起來(lái)。所以,嚴(yán)格地講,下述解答:都應(yīng)判0分;(2)防止宏的副作用。宏定義#definemin(a,b)((a)<=(b)這個(gè)解答在宏定義的后面加“;”,顯示編寫者對(duì)宏的概念模糊不清,只能被無(wú)情地判0分并被面試官淘汰。#ifndef__incvxworksh#ifdef__cplusplus#endif/*...*/#ifdef__cplusplus}#endif#endif/*__incvxworksh*/解答:#ifndef__incvxworksh#endif的作用是防止被重復(fù)引用。作為一種面向?qū)ο蟮恼Z(yǔ)言,c++支持函數(shù)重載,而過(guò)程式語(yǔ)言c則不支持。函數(shù)被c++編譯后在symbol庫(kù)中的名字與c語(yǔ)言的不同。例如,假設(shè)某個(gè)函數(shù)的原型為:該函數(shù)被c編譯器編譯后在symbol庫(kù)中的名字為_foo,而c++編譯器則會(huì)產(chǎn)生像c++就是考這種機(jī)制來(lái)實(shí)現(xiàn)函數(shù)重載的。為了實(shí)現(xiàn)c和c++的混合編程,c++提供了c連接交換指定符號(hào)extern"c"來(lái)解決名字匹配問(wèn)題,函數(shù)聲明前加上extern"c"后,則編譯器就會(huì)按照c語(yǔ)言的方式將該函數(shù)編譯為試題5:編寫一個(gè)函數(shù),作用是把一個(gè)char組成的字符串循環(huán)右移n個(gè)。比如原來(lái)是“abcdefghi”如果n=2,移位后應(yīng)該是“hiabcdefgh”函數(shù)頭是這樣的://pstr是指向以'\0'結(jié)尾的字符串的{}解答:{strcpy(pstr,tmp);}{memcpy(tmp,pstr+n,steps);memcpy(pstr+steps,pstr,nmemcpy(pstr,tmp,steps);}剖析:程度上簡(jiǎn)化程序編寫的工作量。最頻繁被使用的庫(kù)函數(shù)包括:文件頭并解析wav格式的各項(xiàng)信息。解答:typedefstructtagwaveformat{uin16nsamplesperseuin32navgbytesperseuin16nbitnumpersampl假設(shè)wav文件內(nèi)容讀出后存放在指針buffer開始的內(nèi)存單元內(nèi),則分析文件格式的代碼很簡(jiǎn)單,為:waveformatwaveformmemcpy(&waveformat,buffer,sizeof(waveformat));直接通過(guò)訪問(wèn)waveformat的成員,就可以獲得特定wav文件的各項(xiàng)格式信息。剖析:?jiǎn)T組織為一個(gè)結(jié)構(gòu)體,利用指針類型轉(zhuǎn)換,可以將memcpy、memset等函數(shù)直接用于結(jié)構(gòu)體地址,進(jìn)行結(jié)構(gòu)體的整體操作。透過(guò)這個(gè)題可以看出面試者的程序設(shè)計(jì)經(jīng)驗(yàn)是否豐富。{public:string(conststring&other);~~string&operate=(conststriprivate:解答:{{m_data=newchar[1];//得分點(diǎn):對(duì)空字符串自動(dòng)申請(qǐng)存放結(jié)束標(biāo)志'\0//加分點(diǎn):對(duì)m_data加null判斷{m_data=newchar[length+1];//若能加null判}{}string::string(constst{intlength=strlen(other.m_data=newchar[length+strcpy(m_data,other.m_dat}//加分點(diǎn):對(duì)m_data加null判斷string&string::operate=(conststring&other

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論