2023年計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題附答案_第1頁(yè)
2023年計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題附答案_第2頁(yè)
2023年計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題附答案_第3頁(yè)
2023年計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題附答案_第4頁(yè)
2023年計(jì)算機(jī)專業(yè)企業(yè)招聘筆試試題附答案_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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)介

面試準(zhǔn)備題(涉及高質(zhì)量c++題)constchar*,charconst*,char*const的區(qū)別問(wèn)題幾乎是C++面試中每次都會(huì)有的題目。事實(shí)上這個(gè)概念誰(shuí)都有只是三種聲明方式非常相似很容易記混。Bjarne在他的TheC++ProgrammingLanguage里面給出過(guò)一個(gè)助記的方法:把一個(gè)聲明從右向左讀。char*constcp;(*讀成pointerto)cpisaconstpointertocharconstchar*p;pisapointertoconstchar;charconst*p;同上由于C++里面沒(méi)有const*的運(yùn)算符,所以const只能屬于前面的類型。---------------------------------下面這個(gè)程序執(zhí)行后會(huì)有什么錯(cuò)誤或者效果:#defineMAX255intmain(){unsignedcharA[MAX],i;for(i=0;i<=MAX;i++)A[i]=i;}解答:MAX=255數(shù)組A的下標(biāo)范圍為:0..MAX-1,這是其一..其二.當(dāng)i循環(huán)到255時(shí),循環(huán)內(nèi)執(zhí)行:A[255]=255;這句自身沒(méi)有問(wèn)題..但是返回for(i=0;i<=MAX;i++)語(yǔ)句時(shí),由于unsignedchar的取值范圍在(0..255),i++以后i又為0了..無(wú)限循環(huán)下去.注:char類型為一個(gè)字節(jié),取值范圍是[-128,127],unsignedchar[0,255]---------------------------------編寫(xiě)用C語(yǔ)言實(shí)現(xiàn)的求n階階乘問(wèn)題的遞歸算法:longintfact(intn){intx;longinty;if(n<0){printf("error!");}if(n==0)return1;x=n-1;y=fact(x);return(n*y);}--------------------------------二分查找算法:1、遞歸方法實(shí)現(xiàn):intBSearch(elemtypea[],elemtypex,intlow,inthigh)/*在下屆為low,上界為high的數(shù)組a中折半查找數(shù)據(jù)元素x*/{intmid;if(low>high)return-1;mid=(low+high)/2;if(x==a[mid])returnmid;if(x<a[mid])return(BSearch(a,x,low,mid-1));elsereturn(BSearch(a,x,mid+1,high));}2、非遞歸方法實(shí)現(xiàn):intBSearch(elemtypea[],keytypekey,intn){intlow,high,mid;low=0;high=n-1;while(low<=high){mid=(low+high)/2;if(a[mid].key==key)returnmid;elseif(a[mid].key<key)low=mid+1;elsehigh=mid-1;}return-1;}--------------------------------非遞歸計(jì)算如下遞歸函數(shù)的值(斐波拉契):f(1)=1f(2)=1f(n)=f(n-1)+f(n-2)n>2解:intf(intn){inti,s,s1,s2;s1=1;/*s1用于保存f(n-1)的值*/s2=1;/*s2用于保存f(n-2)的值*/s=1;for(i=3;i<=n;i++){s=s1+s2;s2=s1;s1=s;}return(s);}------------------------------互換兩個(gè)數(shù),不用第三塊兒內(nèi)存:inta=……;intb=……;a=a+b;b=a-b;a=a-b;-------------------------------Q1:請(qǐng)你分別劃劃OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)圖,和TCP/IP的五層結(jié)構(gòu)圖?1、OSI每層功能及特點(diǎn)a物理層為數(shù)據(jù)鏈路層提供物理連接,在其上串行傳送比特流,即所傳送數(shù)據(jù)的單位是比特。此外,該層中還具有擬定連接設(shè)備的電氣特性和物理特性等功能。b數(shù)據(jù)鏈路層負(fù)責(zé)在網(wǎng)絡(luò)節(jié)點(diǎn)間的線路上通過(guò)檢測(cè)、流量控制和重發(fā)等手段,無(wú)差錯(cuò)地傳送以幀為單位的數(shù)據(jù)。為做到這一點(diǎn),在每一幀中必須同時(shí)帶有同步、地址、差錯(cuò)控制及流量控制等控制信息。c網(wǎng)絡(luò)層為了將數(shù)據(jù)分組從源(源端系統(tǒng))送到目的地(目的端系統(tǒng)),網(wǎng)絡(luò)層的任務(wù)就是選擇合適的路由和互換節(jié)點(diǎn),使源的傳輸層傳下來(lái)的分組信息可以對(duì)的無(wú)誤地按照地址找到目的地,并交付給相應(yīng)的傳輸層,即完畢網(wǎng)絡(luò)的尋址功能。d傳輸層傳輸層是高低層之間銜接的接口層。數(shù)據(jù)傳輸?shù)膯挝皇菆?bào)文,當(dāng)報(bào)文較長(zhǎng)時(shí)將它分割成若干分組,然后交給網(wǎng)絡(luò)層進(jìn)行傳輸。傳輸層是計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議分層中的最關(guān)鍵一層,該層以上各層將不再管理信息傳輸問(wèn)題。e會(huì)話層該層對(duì)傳輸?shù)膱?bào)文提供同步管理服務(wù)。在兩個(gè)不同系統(tǒng)的互相通信的應(yīng)用進(jìn)程之間建立、組織和協(xié)調(diào)交互。例如,擬定是雙工還是半雙工工作。f表達(dá)層該層的重要任務(wù)是把所傳送的數(shù)據(jù)的抽象語(yǔ)法變換為傳送語(yǔ)法,即把不同計(jì)算機(jī)內(nèi)部的不同表達(dá)形式轉(zhuǎn)換成網(wǎng)絡(luò)通信中的標(biāo)準(zhǔn)表達(dá)形式。此外,對(duì)傳送的數(shù)據(jù)加密(或解密)、正文壓縮(或還原)也是表達(dá)層的任務(wù)。g應(yīng)用層該層直接面向用戶,是OSI中的最高層。它的重要任務(wù)是為用戶提供應(yīng)用的接口,即提供不同計(jì)算機(jī)間的文獻(xiàn)傳送、訪問(wèn)與管理,電子郵件的內(nèi)容解決,不同計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)交互訪問(wèn)的虛擬終端功能等。2、TCP/IPa網(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)際層。b網(wǎng)際網(wǎng)層(IP層)該層涉及以下協(xié)議:IP(網(wǎng)際協(xié)議)、ICMP(InternetControlMessageProtocol,因特網(wǎng)控制報(bào)文協(xié)議)、ARP(AddressResolutionProtocol,地址解析協(xié)議)、RARP(ReverseAddressResolutionProtocol,反向地址解析協(xié)議)。該層負(fù)責(zé)相同或不同網(wǎng)絡(luò)中計(jì)算機(jī)之間的通信,重要解決數(shù)據(jù)報(bào)和路由。在IP層中,ARP協(xié)議用于將IP地址轉(zhuǎn)換成物理地址,RARP協(xié)議用于將物理地址轉(zhuǎn)換成IP地址,ICMP協(xié)議用于報(bào)告差錯(cuò)和傳送控制信息。IP協(xié)議在TCP/IP協(xié)議組中處在核心地位。c傳輸層該層提供TCP(傳輸控制協(xié)議)和UDP(UserDat(yī)agramProtocol,用戶數(shù)據(jù)報(bào)協(xié)議)兩個(gè)協(xié)議,它們都建立在IP協(xié)議的基礎(chǔ)上,其中TCP提供可靠的面向連接服務(wù),UDP提供簡(jiǎn)樸的無(wú)連接服務(wù)。傳輸層提供端到端,即應(yīng)用程序之間的通信,重要功能是數(shù)據(jù)格式化、數(shù)據(jù)確認(rèn)和丟失重傳等。d應(yīng)用層TCP/IP協(xié)議的應(yīng)用層相稱于OSI模型的會(huì)話層、表達(dá)層和應(yīng)用層,它向用戶提供一組常用的應(yīng)用層協(xié)議,其中涉及:Telnet、SMTP、DNS等。此外,在應(yīng)用層中還包具有用戶應(yīng)用程序,它們均是建立在TCP/IP協(xié)議組之上的專用程序。3、OSI參考模型和TCP/IP參考模型的區(qū)別:aOSI模型有7層,TCP/IP只有4層;bOSI先于協(xié)議出現(xiàn),因此不會(huì)偏向于任何一組特定的協(xié)議,通用性更強(qiáng),但有些功能不知該放哪一層上,因此不得不加入一些子層;TCP/IP后于協(xié)議出現(xiàn),僅是將已有協(xié)議的一個(gè)描述,因此兩者配合的非常好;但他不適合其他的協(xié)議棧,不容易描述其他非TCP/IP的網(wǎng)絡(luò);cOSI中網(wǎng)絡(luò)層同時(shí)支持無(wú)連接和面向連接的通信,但在傳輸層上只支持面向連接的通信;TCP/IP中網(wǎng)絡(luò)層只支持無(wú)連接通信,傳輸層同時(shí)支持兩種通信;d在技術(shù)發(fā)生變化時(shí),OSI模型比TCP/IP模型中的協(xié)議更容易被替換。----------------------------------------Q2:請(qǐng)你具體的解釋一下IP協(xié)議的定義,在哪個(gè)層上面,重要有什么作用?TCP與UDP呢?解:與IP協(xié)議配套使用的尚有三個(gè)協(xié)議:ARP-地址解析協(xié)議RARP-逆地址解析協(xié)議ICMP-因特網(wǎng)控制報(bào)文協(xié)議ICMPIP協(xié)議-網(wǎng)際協(xié)議IP地址、IP包頭----------------------------------------Q3:請(qǐng)問(wèn)互換機(jī)和路由器分別的實(shí)現(xiàn)原理是什么?分別在哪個(gè)層次上面實(shí)現(xiàn)的?將網(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ā)器(repeater)。2.數(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ò)互聯(lián),由于這僅僅是把一個(gè)網(wǎng)絡(luò)擴(kuò)大了,而這仍然是一個(gè)網(wǎng)絡(luò)。高層網(wǎng)關(guān)由于比較復(fù)雜,目前使用得較少。因此一般討論網(wǎng)絡(luò)互連時(shí)都是指用互換機(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)部網(wǎng)關(guān)協(xié)議IGP和外部網(wǎng)關(guān)協(xié)議EGP第三層互換機(jī)和路由器的區(qū)別:在第三層互換技術(shù)出現(xiàn)之前,幾乎沒(méi)有必要將路由功能器件和路由器區(qū)別開(kāi)來(lái),他們完全是相同的:提供路由功能正在路由器的工作,然而,現(xiàn)在第三層互換機(jī)完全可以執(zhí)行傳統(tǒng)路由器的大多數(shù)功能。綜上所述,互換機(jī)一般用于LAN-WAN的連接,互換機(jī)歸于網(wǎng)橋,是數(shù)據(jù)鏈路層的設(shè)備,有些互換機(jī)也可實(shí)現(xiàn)第三層的互換。路由器用于WAN-WAN之間的連接,可以解決異性網(wǎng)絡(luò)之間轉(zhuǎn)發(fā)分組,作用于網(wǎng)絡(luò)層。他們只是從一條線路上接受輸入分組,然后向另一條線路轉(zhuǎn)發(fā)。這兩條線路也許分屬于不同的網(wǎng)絡(luò),并采用不同協(xié)議。相比較而言,路由器的功能較互換機(jī)要強(qiáng)大,但速度相對(duì)也慢,價(jià)格昂貴,第三層互換機(jī)既有互換機(jī)線速轉(zhuǎn)發(fā)報(bào)文能力,又有路由器良好的控制功能,因此得以廣播應(yīng)用。-----------------------------------------------Q4:請(qǐng)問(wèn)C++的類和C里面的struct有什么區(qū)別?c++中的類具有成員保護(hù)功能,并且具有繼承,多態(tài)這類oo特點(diǎn),而c里的struct沒(méi)有-----------------------------------------------Q5:請(qǐng)講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?析構(gòu)函數(shù)也是特殊的類成員函數(shù),它沒(méi)有返回類型,沒(méi)有參數(shù),不能隨意調(diào)用,也沒(méi)有重載。知識(shí)在類對(duì)象生命期結(jié)束的時(shí)候,由系統(tǒng)自動(dòng)調(diào)用釋放在構(gòu)造函數(shù)中分派的資源。這種在運(yùn)營(yíng)時(shí),能依據(jù)其類型確認(rèn)調(diào)用那個(gè)函數(shù)的能力稱為多態(tài)性,或稱遲后聯(lián)編。另:析構(gòu)函數(shù)一般在對(duì)象撤消前做收尾工作,比如回收內(nèi)存等工作,虛擬函數(shù)的功能是使子類可以用同名的函數(shù)對(duì)父類函數(shù)進(jìn)行重載,并且在調(diào)用時(shí)自動(dòng)調(diào)用子類重載函數(shù),假如是純虛函數(shù),則純粹是為了在子類重載時(shí)有個(gè)統(tǒng)一的命名而已。-----------------------------------------------Q6:全局變量和局部變量有什么區(qū)別?實(shí)怎么實(shí)現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?全局變量的生命周期是整個(gè)程序運(yùn)營(yíng)的時(shí)間,而局部變量的生命周期則是局部函數(shù)或過(guò)程調(diào)用的時(shí)間段。其實(shí)現(xiàn)是由編譯器在編譯時(shí)采用不同內(nèi)存分派方法。全局變量在main函數(shù)調(diào)用后,就開(kāi)始分派,假如是靜態(tài)變量則是在main函數(shù)前就已經(jīng)初始化了。而局部變量則是在用戶棧中動(dòng)態(tài)分派的(還是建議看編譯原理中的活動(dòng)記錄這一塊)----------------------------------------------Q7:一些寄存器的題目,重要是尋址和內(nèi)存管理等一些知識(shí)。。。。--------------------------------------------Q8:8086是多少位的系統(tǒng)?在數(shù)據(jù)總線上是怎么實(shí)現(xiàn)的?8086系統(tǒng)是16位系統(tǒng),其數(shù)據(jù)總線是20位----------------------------------------------------------------------------C++一、請(qǐng)?zhí)顚?xiě)BOOL,float,指針變量與“零值”比較的if語(yǔ)句。(10分)請(qǐng)寫(xiě)出BOOLflag與“零值”比較的if語(yǔ)句。(3分)標(biāo)準(zhǔn)答案:if(flag)if(!flag)如下寫(xiě)法均屬不良風(fēng)格,不得分。if(flag==TRUE)if(flag==1)if(flag==FALSE)if(flag==0)請(qǐng)寫(xiě)出floatx與“零值”比較的if語(yǔ)句。(4分)標(biāo)準(zhǔn)答案示例:constfloatEPSINON=0.00001;if((x>=-EPSINON)&&(x<=EPSINON)不可將浮點(diǎn)變量用“==”或“!=”與數(shù)字比較,應(yīng)當(dāng)設(shè)法轉(zhuǎn)化成“>=”或“<=”此類形式。如下是錯(cuò)誤的寫(xiě)法,不得分。if(x==0.0)if(x!=0.0)請(qǐng)寫(xiě)出char*p與“零值”比較的if語(yǔ)句。(3分)標(biāo)準(zhǔn)答案:if(p==NULL)if(p!=NULL)如下寫(xiě)法均屬不良風(fēng)格,不得分。if(p==0)if(p!=0)if(p)if(!)二、以下為WindowsNT下的32位C++程序,請(qǐng)計(jì)算sizeof的值(10分)voidFunc(charstr[100]){請(qǐng)計(jì)算sizeof(str)=4(2分)}charstr[]=“Hello”;char*p=str;intn=10;請(qǐng)計(jì)算sizeof(str)=6(2分)sizeof(p)=4(2分)sizeof(n)=4(2分)void*p=malloc(100);請(qǐng)計(jì)算sizeof(p)=4(2分)三、簡(jiǎn)答題(25分)1、頭文獻(xiàn)中的ifndef/define/endif干什么用?(5分)答:防止該頭文獻(xiàn)被反復(fù)引用。2、#include<filename.h>和#include“filename.h”有什么區(qū)別?(5分)答:對(duì)于#include<filename.h>,編譯器從標(biāo)準(zhǔn)庫(kù)途徑開(kāi)始搜索filename.h對(duì)于#include“filename.h”,編譯器從用戶的工作途徑開(kāi)始搜索filename.h3、const有什么用途?(請(qǐng)至少說(shuō)明兩種)(5分)答:(1)可以定義const常量(2)const可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被const修飾的東西都受到強(qiáng)制保護(hù),可以防止意外的變動(dòng),能提高程序的健壯性。4、在C++程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加extern“C”?(5分)答:C++語(yǔ)言支持函數(shù)重載,C語(yǔ)言不支持函數(shù)重載。函數(shù)被C++編譯后在庫(kù)中的名字與C語(yǔ)言的不同。假設(shè)某個(gè)函數(shù)的原型為:voidfoo(intx,inty);該函數(shù)被C編譯器編譯后在庫(kù)中的名字為_(kāi)foo,而C++編譯器則會(huì)產(chǎn)生像_foo_int_int之類的名字。C++提供了C連接互換指定符號(hào)extern“C”來(lái)解決名字匹配問(wèn)題。5、請(qǐng)簡(jiǎn)述以下兩個(gè)for循環(huán)的優(yōu)缺陷(5分)for(i=0;i<N;i++){if(condition)DoSomething();elseDoOtherthing();}if(condition){for(i=0;i<N;i++)DoSomething();}else{for(i=0;i<N;i++)DoOtherthing();}優(yōu)點(diǎn):程序簡(jiǎn)潔缺陷:多執(zhí)行了N-1次邏輯判斷,并且打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對(duì)循環(huán)進(jìn)行優(yōu)化解決,減少了效率。優(yōu)點(diǎn):循環(huán)的效率高缺陷:程序不簡(jiǎn)潔四、有關(guān)內(nèi)存的思考題(每小題5分,共20分)voidGetMemory(char*p){p=(char*)malloc(100);}voidTest(void){char*str=NULL;GetMemory(str);strcpy(str,"helloworld");printf(str);}請(qǐng)問(wèn)運(yùn)營(yíng)Test函數(shù)會(huì)有什么樣的結(jié)果?答:程序崩潰。由于GetMemory并不能傳遞動(dòng)態(tài)內(nèi)存,Test函數(shù)中的str一直都是NULL。strcpy(str,"helloworld");將使程序崩潰。char*GetMemory(void){charp[]="helloworld";returnp;}voidTest(void){char*str=NULL;str=GetMemory();printf(str);}請(qǐng)問(wèn)運(yùn)營(yíng)Test函數(shù)會(huì)有什么樣的結(jié)果?答:也許是亂碼。由于GetMemory返回的是指向“棧內(nèi)存”的指針,該指針的地址不是NULL,但其原現(xiàn)的內(nèi)容已經(jīng)被清除,新內(nèi)容不可知。voidGetMemory2(char**p,intnum){*p=(char*)malloc(num);}voidTest(void){char*str=NULL;GetMemory(&str,100);strcpy(str,"hello");printf(str);}請(qǐng)問(wèn)運(yùn)營(yíng)Test函數(shù)會(huì)有什么樣的結(jié)果?答:(1)可以輸出hello(2)內(nèi)存泄漏voidTest(void){char*str=(char*)malloc(100);strcpy(str,“hello”);free(str);if(str!=NULL){strcpy(str,“world”);printf(str);}}請(qǐng)問(wèn)運(yùn)營(yíng)Test函數(shù)會(huì)有什么樣的結(jié)果?答:篡改動(dòng)態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預(yù)料,非常危險(xiǎn)。由于free(str);之后,str成為野指針,if(str!=NULL)語(yǔ)句不起作用。五、編寫(xiě)strcpy函數(shù)(10分)已知strcpy函數(shù)的原型是char*strcpy(char*strDest,constchar*strSrc);其中strDest是目的字符串,strSrc是源字符串。(1)不調(diào)用C++/C的字符串庫(kù)函數(shù),請(qǐng)編寫(xiě)函數(shù)strcpychar*strcpy(char*strDest,constchar*strSrc);{assert((strDest!=NULL)&&(strSrc?。絅ULL));//2分char*address=strDest;//2分while((*strDest++=*strSrc++)!=‘\0’NULL;returnaddress;//2分}(2)strcpy能把strSrc的內(nèi)容復(fù)制到strDest,為什么還要char*類型的返回值?答:為了實(shí)現(xiàn)鏈?zhǔn)奖磉_(dá)式。//2分例如intlength=strlen(strcpy(strDest,“helloworld”));六、編寫(xiě)類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(25分)已知類String的原型為:classString{public:String(constchar*str=NULL);//普通構(gòu)造函數(shù)String(constString&other);//拷貝構(gòu)造函數(shù)~String(void);//析構(gòu)函數(shù)String&operate=(constString&other);//賦值函數(shù)private:char*m_dat(yī)a;//用于保存字符串};請(qǐng)編寫(xiě)String的上述4個(gè)函數(shù)。標(biāo)準(zhǔn)答案://String的析構(gòu)函數(shù)String::~String(void)//3分{delete[]m_data;//由于m_data是內(nèi)部數(shù)據(jù)類型,也可以寫(xiě)成deletem_dat(yī)a;}//String的普通構(gòu)造函數(shù)String::String(constchar*str)//6分{if(str==NULL){m_data=newchar[1];//若能加NULL判斷則更好*m_data=‘\0’;}else{intlength=strlen(str);m_data=newchar[length+1];//若能加NULL判斷則更好strcpy(m_data,str);}}//拷貝構(gòu)造函數(shù)String::String(constString&other)//3分{intlength=strlen(other.m_data);m_data=newchar[length+1];//若能加NULL判斷則更好strcpy(m_data,other.m_dat(yī)a);}//賦值函數(shù)String&String::operate=(constString&other)//13分{//(1)檢查自賦值//4分if(this==&other)return*this;//(2)釋放原有的內(nèi)存資源//3分delete[]m_data;//(3)分派新的內(nèi)存資源,并復(fù)制內(nèi)容//3分intlength=strlen(other.m_data);m_data=newchar[length+1];//若能加NULL判斷則更好strcpy(m_data,other.m_data);//(4)返回本對(duì)象的引用//3分return*this;}-------------------------------winsocket編程#include<Winsock2.h>#include<stdio.h>voidmain(){WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){WSACleanup();return;}SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));listen(sockSrv,5);SOCKADDR_INaddrClient;intlen=sizeof(SOCKADDR);while(1){SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);charsendBuf[100];sprint(sendBuf,"Welcome%sto",inet_ntoa(addrClient.sin_addr));send(sockConn,sendBuf,strlen(sendBuf)+1,0);charrecvBuf[100];recv(sockConn,recvBuf);printf("%s\n",recvBuf);closesocket(sockConn);WSACleanup();}}注:這是Server端;File->New->Win32ConsoleApplication,工程名:TcpSrv;然后,File->New->C++SourceFile,文獻(xiàn)名:TcpSrv;在該工程的Setting的Link的Object/librarymodules項(xiàng)要加入ws2_32.lib-------------------------------------------#include<Winsock2.h>#include<stdio.h>voidmain(){WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){WSACleanup();return;}SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");addrSrv.sin_family=AF_INET;addrSrv.sin_porthtons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));charrecvBuf[100];recv(sockClient,recvBuf,100,0);printf("%s\n",recvBuf);send(sockClient,"Thisiszhangsan",strlen("Thisiszhangsan")+1,0);closesocket(sockClient);WSACleanup();}注:這是Client端;File->New->Win32ConsoleApplication,工程名:TcpClient;然后,File->New->C++SourceFile,文獻(xiàn)名:TcpClient;同理,在該工程的Setting的Link的Object/librarymodules項(xiàng)要加入ws2_32.lib--------------------------------------------C++#include<iostream.h>classhuman{public:human(){human_num++;};stat(yī)icinthuman_num;~human(){human_num--;print();}voidprint(){cout<<"humannumis:"<<human_num<<endl;}protected:private:};inthuman::human_num=0;humanf1(humanx){x.print();returnx;}intmain(intargc,char*argv[]){humanh1;h1.print();humanh2=f1(h1);h2.print();return0;}輸出:1100-1-2----------------------------分析:humanh1;//調(diào)用構(gòu)造函數(shù),---hum_num=1;h1.print();//輸出:"humanis1"humanh2=f1(h1);//再調(diào)用f1(h1)的過(guò)程中,由于函數(shù)參數(shù)是按值傳遞對(duì)象,調(diào)用默認(rèn)的復(fù)制構(gòu)造函數(shù),它并沒(méi)有對(duì)hum_num++,所以hum_num仍=1,所以x.print()輸出:"humanis1";在推出f1函數(shù)時(shí),要銷毀X,調(diào)用析構(gòu)函數(shù)(human_num--),輸出:"humanis0"(,由于該函數(shù)返回一個(gè)human對(duì)象,所以又調(diào)用默認(rèn)構(gòu)造函數(shù),創(chuàng)建一個(gè)臨時(shí)對(duì)象(human_num=0;),把臨時(shí)對(duì)象賦給h2,又調(diào)用默認(rèn)構(gòu)造函數(shù)(human_num=0);h2.print();//輸出:humanis0;//在退出main()函數(shù)是,先銷毀h2,調(diào)用析構(gòu)函數(shù)(human_num--),輸出"human_numis-1"然后銷毀h1,調(diào)用析構(gòu)函數(shù)(--),輸出"human_numis-2"-----------------------------冒泡排序:voidBubbleSort(elemtypex[],intn){inti,j;elemtypetemp;for(i=1;i<n;i++)for(j=0;j<n-i;j++){if(x[j].key>x[j+1].key){temp=x[j];x[j]=x[j+1];x[j+1]=temp;}}}-------------------------------c語(yǔ)言文獻(xiàn)讀寫(xiě)#include"stdio.h"main(){FILE*fp;charch,filename[10];scanf("%s",filename);if((fp=fopen(filename,"w")==NULL){printf("cann'topenfile\n");exit(0);}ch=getchar();while(ch!='#'){fputc(ch,fp);putchar(ch);ch=getchar();}fclose(fp);}-----------------------------------c指針int*p[n];-----指針數(shù)組,每個(gè)元素均為指向整型數(shù)據(jù)的指針。int(*)p[n];------p為指向一維數(shù)組的指針,這個(gè)一維數(shù)組有n個(gè)整型數(shù)據(jù)。int*p();----------函數(shù)帶回指針,指針指向返回的值。int(*)p();------p為指向函數(shù)的指針。-----------------------------------Windows的消息機(jī)制1Windows是一個(gè)消息(Message)驅(qū)動(dòng)系統(tǒng)。Windows的消息提供了應(yīng)用程序之間、應(yīng)用程序與Windows系統(tǒng)之間進(jìn)行通信的手段。應(yīng)用程序想要實(shí)現(xiàn)的功能由消息來(lái)觸發(fā),并且靠對(duì)消息的響應(yīng)和解決來(lái)完畢。Windows系統(tǒng)中有兩種消息隊(duì)列:系統(tǒng)消息隊(duì)列和應(yīng)用程序消息隊(duì)列。計(jì)算機(jī)的所有輸入設(shè)備由Windows監(jiān)控。當(dāng)一個(gè)事件發(fā)生時(shí),Windows先將輸入的消息放入系統(tǒng)消息隊(duì)列中,再將消息拷貝到相應(yīng)的應(yīng)用程序消息隊(duì)列中。應(yīng)用程序的消息解決程序?qū)⒎磸?fù)檢測(cè)消息隊(duì)列,并把檢測(cè)到的每個(gè)消息發(fā)送到相應(yīng)的窗口函數(shù)中。這便是一個(gè)事件從發(fā)生至到達(dá)窗口函數(shù)必須經(jīng)歷的過(guò)程。必須注意的是,消息并非是搶占性的,無(wú)論事件的緩急,總是按照到達(dá)的先后派對(duì),依次解決(一些系統(tǒng)消息除外),這樣也許使一些實(shí)時(shí)外部事件得不到及時(shí)解決。-----------------------------------Windows的消息機(jī)制2Windows中的消息是放在相應(yīng)的進(jìn)程的消息隊(duì)列里的??梢酝ㄟ^(guò)GetMessage取得,并且對(duì)于一般的消息,此函數(shù)返回非零值,但是對(duì)于WM_QUIT消息,返回零??梢酝ㄟ^(guò)這個(gè)特性,結(jié)束程序。當(dāng)取得消息之后,應(yīng)當(dāng)先轉(zhuǎn)換消息,再分發(fā)消息。所謂轉(zhuǎn)換,就是把鍵盤(pán)碼的轉(zhuǎn)換,所謂分發(fā),就是把消息分發(fā)給相應(yīng)的窗口,由相應(yīng)的窗口解決消息,這樣相應(yīng)窗體的消息解決函數(shù)就會(huì)被調(diào)用。兩個(gè)函數(shù)可以實(shí)現(xiàn)這兩個(gè)功能:TranslateMessage和DispatchMessage。此外,需要注意,當(dāng)我們點(diǎn)擊窗口的關(guān)閉按鈕關(guān)閉窗口時(shí),程序并沒(méi)有自動(dòng)退出,而是向程序發(fā)送了一個(gè)WM_DESTROY消息(其實(shí)過(guò)程是這樣的,一方面向程序發(fā)送WM_CLO(píng)SE消息,默認(rèn)的解決程序是調(diào)用DestroyWindow銷毀窗體,從而引發(fā)WM_DESTROY消息),此時(shí)在窗體中我們要響應(yīng)這個(gè)消息,假如需要退出程序,那么就要向程序發(fā)送WM_QUIT消息(通過(guò)PostQuitMessage實(shí)現(xiàn))。一個(gè)窗體假如想要調(diào)用自己的消息解決函數(shù),可以使用SendMessage向自己發(fā)消息。如上所述,大部分(注意是大部分)的消息是這樣傳遞的:一方面放到進(jìn)程的消息隊(duì)列中,之后由GetMessage取出,轉(zhuǎn)換后,分發(fā)給相應(yīng)的窗口。這種消息成為存儲(chǔ)式消息。存儲(chǔ)式消息基本上是使用者輸入的結(jié)果,以擊鍵(如WM_KEYDOWN和WM_KEYUP訊息)、擊鍵產(chǎn)生的字符(WM_CHAR)、鼠標(biāo)移動(dòng)(WM_MOUSEMOVE)和鼠標(biāo)按鈕(WM_LBUTTO(shè)NDOWN)的形式給出。存儲(chǔ)式消息還包

溫馨提示

  • 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)論