版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
C++語言筆試題目.多態(tài)類中的虛函數(shù)表是Compile-Time,還是Run-Time時建立的?答案:虛擬函數(shù)表是在編譯期就建立了,各個虛擬函數(shù)這時被組織成了一個虛擬函數(shù)的入口地址的數(shù)組.而對象的隱藏成員一虛擬函數(shù)表指針是在運行期一也就是構造函數(shù)被調(diào)用時進行初始化的,這是實現(xiàn)多態(tài)的關鍵..將一個!M-10M的文件,逆序存儲到另ー個文件,就是前ー個文件的最后一個字符存到新文件的第一個字符,以此類推。主函數(shù)執(zhí)行完畢后,是否可能會再執(zhí)行一段代碼?答案:可以,可以用一onexit注冊ー個函數(shù),它會在main之后執(zhí)行;如果你需要加入一段在main退出后執(zhí)行的代碼,可以使用atexitO函數(shù),注冊一個函數(shù)。語法:Windudeintatexit(void("function")(void));Windude#indudevoidfnl(void),fn2(void),fn3(void),fn4(void);intmain(void)atexit(fnl);atexit(fn2);atexit(fn3);atexit(fn4);printf("Thisisexecutedfirst.\n");)voidfnl(){printf("next.\n");)voidfn2(){printf("executedり;}voidfn3(){printf〈is");}voidfn4()printf("This");結果:Thisisexecutedfirst.Thisisexecutednext..ー個父類寫了一個virtual函數(shù),如果子類覆蓋它的函數(shù)不加virtual?也能實現(xiàn)多態(tài)?在子類的空間里,有沒有父類的這個函數(shù),或者父類的私有變量?(華為筆試題)答案:只要基類在定義成員函數(shù)時已經(jīng)聲明了virtue關鍵字,在派生類實現(xiàn)的時候覆蓋該函數(shù)時,virtue關鍵字可加可不加,不影響多態(tài)的實現(xiàn)。子類的空間里有父類的所有變量(static除外)。.給ー個字符串、例如“ababc”要求返回“ab”.因為“ab”連續(xù)重復出現(xiàn)且最長。用C/C++語言寫ー函數(shù)完成該算法,給出復雜度.對序列1、1、2、3、5、8、13oooo是Fab..數(shù)列2、3、5、13...是Fab..質(zhì)數(shù)數(shù)列,因為他們與自己前面的Fab...數(shù)列都互質(zhì)給出k,返回第k小的Fab..質(zhì)數(shù)個硬幣100真、1假,真假區(qū)別在于重量。請用無碳碼天平稱兩次給出真幣重還是假幣重的結論。.完成字符串拷貝可以使用sprintf、strcpy及memcpy函數(shù),請問這些函數(shù)有什么區(qū)別,你喜歡使用哪個,為什么?答案:這些函數(shù)的區(qū)別在于實現(xiàn)功能以及操作對象不同。函數(shù)操作的對象是字符串,完成從源字符串到目的字符串的拷貝功能。函數(shù)操作的對象不限于字符串:雖然目的對象是字符串,但是源對象可以是字符串、也可以是任意基本類型的數(shù)據(jù)。這個函數(shù)主要用來實現(xiàn)向字符串的轉換功能。如果源對象是字符串,并且指定%s格式符,也可實現(xiàn)字符串拷貝功能。函數(shù)顧名思義就是內(nèi)存拷貝,實現(xiàn)將一個內(nèi)存塊的內(nèi)容復制到另一個內(nèi)存塊這ー功能。內(nèi)存塊由其首地址以及長度確定。程序中出現(xiàn)的實體對象,不論是什么類型,其最終表現(xiàn)就是在內(nèi)存中占據(jù)一席之地。因此,memcpy的操作對象不局限于某ー類數(shù)據(jù)類型,或者說可適用于任意數(shù)據(jù)類型,只要能給出對象的起始地址和內(nèi)存長度信息、并且對象具有可操作性即可。鑒于memcpy函數(shù)等長拷貝的特點以及數(shù)據(jù)類型代表的物理意義,memcpy函數(shù)通常限于同種類型數(shù)據(jù)或?qū)ο笾g的拷貝,其中當然也包括字符串拷貝以及基本數(shù)據(jù)類型的拷貝。對于字符串拷貝來說,用上述三個函數(shù)都可以實現(xiàn),但是其實現(xiàn)的效率和使用的方便程度不同:strepy無疑是最合適的選擇:效率高且調(diào)用方便。snprintf要額外指定格式符并且進行格式轉化,麻煩且效率不高。memepy雖然高效,但是需要額外提供拷貝的內(nèi)存長度這ー參數(shù),易錯且使用不便;并且如果長度指定過大的話,還會帶來性能的下降。其實strepy函數(shù)一般是在內(nèi)部調(diào)用memcpy函數(shù)或者用匯編直接實現(xiàn)的,以達到高效的目的。因此,使用memepy和strepy拷貝字符串在性能上應該沒有什么大的差別。對于非字符串類型的數(shù)據(jù)的復制來說,strepy和snprintf一般就無能為カ了,可是對memepy卻沒有什么影響。但是,對于基本數(shù)據(jù)類型來說,盡管可以用memepy進行拷貝,由于有賦值運算符可以方便且高效地進行同種或兼容類型的數(shù)據(jù)之間的拷貝,所以這種情況下memepy幾乎不被使用。memepy的長處是用來實現(xiàn)對結構或者數(shù)組的拷貝,其目的是或者高效,或者使用方便,甚或兩者兼有。.變量的聲明和定義有什么區(qū)別?.請寫出下面代碼在32位平臺上的運行結果,并說明sizeof的性質(zhì):ttinclude^includeintmain(void)chara[30];char*b=(char*)malloc(20*sizeof(char)); printf("%d\n",sizeof(a));printf("%d\n",sizeof(b));printf("%d\n",sizeof(a[3]));printf("%d\n",sizeof(b+3));printf("%d\n",sizeof(*(b+4)));returnO;.請完成以下題目。注意,請勿直接調(diào)用ANSIC函數(shù)庫中的函數(shù)實現(xiàn)。a)請編寫ー個C函數(shù),該函數(shù)給出ー個字節(jié)中被置1的位的個數(shù),并請給出該題的至少ー個不同解法。第一種unsignedintTestAsOneO(charlog){inti;unsignedintnum=0,val;for(i=0;i>i;〃移位va1&=0x01;〃與1相與if(val)num++;returnnum;}第二種unsignedintTestAsOnel(char1og){inti;unsignedintnum=0,val;for(i=0;i>i;〃反碼?val&二0xOO; 〃與〇相與if(!val)num++;}returnnum;)b)請編寫ー個C函數(shù),該函數(shù)將給定的ー個字符串轉換成整數(shù)。intInvert(char*str)intnum=0;while(*str!=,\0")intdigital=*str-48;num=num*10+digital;str=str+l;;returnnum;c)請編寫ー個C函數(shù),該函數(shù)將給定的ー個整數(shù)轉換成字符串。voidIntToCharChange(intnum,char*pval){charstrval[100];inti,j;intvalO=0;intvail=0;valO=num;for(i=0;i99)return;source[j]二,\〇,;for(i=0;ie)請編寫ー個C函數(shù),該函數(shù)在給定的內(nèi)存區(qū)域搜索給定的字符,并返回該字符所在位置索弓I值。intsearch(char*cpSource,intn,charch)//起始地址,搜索長度,目標字符]inti;for(i=0;imaxlen) 〃統(tǒng)計最大子串長度]maxlen=len+1;len=0;}else{len=O;)i++;j++;}}returnmaxlen;)給出演示上述函數(shù)功能的ー個簡單程序,并請編寫對應的Makefile文件.我們需要編寫ー個圖形相關的應用程序,需要處理大量圖形(Shape)信息,圖形有矩形(Rectangle),正方形(Square),圓形(Circle)等種類,應用需要計算這些圖形的面積,并且可能需要在某個設備上進行顯示(使用在標準輸出上打印信息的方式做為示意)。a)請用面向?qū)ο蟮姆椒▽σ陨蠎眠M行設計,編寫可能需要的類b)請給出實現(xiàn)以上應用功能的示例性代碼,從某處獲取圖形信息,并且進行計算和繪制c)如果你的Square繼承自Rectangle,請給出理由,如果不是,請給出理由,并且請比較兩種方式的優(yōu)劣d)請問你所編寫的類,在如下代碼中會有何表現(xiàn),請解釋voidtest_rectangle_area(Rectangle&r){_width(10);_hEight(15);assert(()—150);).假設現(xiàn)有一個單向的鏈表,但是只知道只有一個指向該節(jié)點的指針P,并且假設這個節(jié)點不是尾節(jié)點,試編程實現(xiàn)刪除此節(jié)點參考:將下一個節(jié)點的內(nèi)容復制到本節(jié)點上,然后刪除下ー個節(jié)點;.寫ー個程序,把ー個100以內(nèi)的自然數(shù)分解因數(shù)。typedefstructnode{intdate;structnode*front,*next;}_Node;有兩個雙向循環(huán)鏈表A,B,知道其頭指針為:pHeadA,pHeadB,請寫ー函數(shù)將兩上鏈表中date值相同的結點刪除參考算法:.取出A的ー個元素d.收集B中有相同元素d的結點到垃圾箱,并從B里刪除.收集A中有相同元素d的結點到垃圾箱,并從A里刪除.刪除垃圾箱中的所有元素鏈的指針指向下ー個.重復「5,直到A鏈循環(huán)到頭了注意的是第3步,在2步執(zhí)行后垃圾箱不為空時オ執(zhí)行。上述算法還可以做一點點優(yōu)化:1.加入兩個變量cA,cB,分別記錄當前A中和B中的元素個數(shù)每次從較長者中取出ー個元素來,先從較小者中找起若沒有,則不必在較長者中浪費時間了ttinclude?structNODE{intdate;NODE*frent,*next;};voidredel(NODE*&ahead,NODE*&bhead){intboy=0;NODE*pa=ahead,*pb=bhead,*paa,*paaa,*paaaa,*pbb;while(pa->next!二ahead)intboys=pa->date;〃取pa中ー個值paaaa=pa;paa=pa;pb=bhead;while(pb->next!=bhead){if(boys==pb->date)〃如果pa,pb中有值相同{coutdatefrontー〉next二pbー〉next;pb->next-〉front二pb-〉front;bhead=bhead->next;pbb=pb;pb=pb->next;deletepbb;elseboy=lpb->front->next=pb->next;pb->next->front=pb->front;Pbb=pb;pb=pb->next;deletepbb;elsepb=pb->next;)while(paa->next!=ahead&&boy==l)if(paa->date==boys)coutdatenext;ahead=pa;paa->front->next=paa->next;paa->nextー〉front二paa->front;paaa=paa;paa=paa->next;deletepaaa;elsepaa->front->next=paa->next;paa->nextー〉front二paa->front;paaa=paa;paa=paa->next;deletepaaa;)else{paa=paaー〉next;))boy=0;if(paaaa==pa)pa=pa-〉next;
)coutdate二i;Aー〉next=newNODE;A->next->front=A;A=A->next;}A=A->front;deleteA->next;A->next=pHeadA;pHeadA->front=A;for(inti=l;idate=i;B->next=newNODE;B->next->front=B;B=B->next;)B=B->front;deleteB->next;B->next=pHeadB;pHeadB->front=B;redel(pHeadA,pHeadB);〃調(diào)用函redel(pHeadA,pHeadB);〃調(diào)用函數(shù)刪除相同結點!22.char*GetStr(){char*tmp;tmp=n123Mreturntmp;voidmain(){printf("%s",GetStr());會輸出123嗎?123創(chuàng)建在堆上還是棧上呢?123的空間是什么時候釋放的?參考:"123"是常量字符串,存儲在全局變量區(qū),和靜態(tài)變量一起。即不在堆,也不在棧在程序結束時自動釋放)字符指針、浮點數(shù)指針、以及函數(shù)指針這三種類型的變量哪個占用的內(nèi)存最大?為什么?答案:指針變量也占用內(nèi)存單元,而且所有指針變量占用內(nèi)存單元的數(shù)量都是相同的。就是說,不管是指向何種對象的指針變量,它們占用內(nèi)存的字節(jié)數(shù)都是ー樣的,并且要足夠把程序中所能用到的最大地址表示出來。2)類ClassB從ClassA派生,那么ClassA*a=newClassB;試問該表達是否合法?為什么?答案:派生類的指針指向基類的對象是錯誤的,不能通過編譯的;基類的指針可以指向派生類的對象,調(diào)用派生類的函數(shù)雞是動物,沒錯。雞可以執(zhí)行所有動物都具有的方法,例如“死亡”反過來,動物一定是雞嗎?動物都能執(zhí)行雞的某個方法嗎?比如說“下蛋”?3)如果ClassA中定義并實現(xiàn)虛函數(shù)intfunc(void),ClassB中也實現(xiàn)該函數(shù),那么上述變量a->func()將調(diào)用哪個類里面的函數(shù)?如果intfunc(void)不是虛函數(shù),情況又如何?為什么?答案:第一問調(diào)用的是B的。第二問調(diào)用A的。虛函數(shù)的ー個典型應用,虛函數(shù)只能借助于指針或者引用來達到多態(tài)的效果如果沒有定義成虛函數(shù):classA{public:voidprint(){coutclassB:publicA(public:voidprint(){coutintmain(){〃為了在以后便于區(qū)分,我這段main。代碼叫做mainlAa;Bb;A*pl=&a;A*p2=&b;pl->print();p2->print();結果是兩個ThisisA如果定義成虛函數(shù): classA{public:virtualvoidprint(){coutclassB:publicA(public:voidprint(){cout測試:4)char**p,a[16][8];問:p=a是否會導致程序在以后出現(xiàn)問題?為什么?參考:這個不會導致出現(xiàn)問題,但是要注意p的使用,如a[l][2]等價的為?(*(p+1)+2)而不是?(p+11),會的,這樣會出現(xiàn)編譯錯誤正確的是:chara[5][5];char(*p)[5];p=a;如下所述的ifelse和switch語句哪個的效率高?為什么?5)在同一個進程中,一個模塊是否可以通過指針操作破壞其它模塊的內(nèi)存,為什么?6)應用程序在運行時的內(nèi)存包括代碼區(qū)和數(shù)據(jù)區(qū),其中數(shù)據(jù)區(qū)又包括哪些部分?參考:對于ー個進程的內(nèi)存空間而言,可以在邏輯上分成3個部份:代碼區(qū),靜態(tài)數(shù)據(jù)區(qū)和動態(tài)數(shù)據(jù)區(qū)。動態(tài)數(shù)據(jù)區(qū)一般就是“堆?!?。棧是ー種線性結構,堆是ー種鏈式結構。進程的每個線程都有私有的“?!?。全局變量和靜態(tài)變量分配在靜態(tài)數(shù)據(jù)區(qū),本地變量分配在動態(tài)數(shù)據(jù)區(qū),即堆棧中。程序通過堆棧的基地址和偏移量來訪問本地變量。2:PictureProcessingUseC++,Java,orsimilarlanguagesor/andanymiddlewaresuehasEJBandJ2EEtoprocessapicturewithahighresolution(3MegaPixelsforexample).Usesomemethodologiestodegradetheresolutionofthepicturetomakeitquickerforbrowsing.Thendividethedegradedpictureinto9sectorsequally.Clickanyofthe9sectorswillresuItadetailedpictureforthissectorwiththesameresolutionasthatoftheoriginaIpicture.Thisassignmentisdesignedforyoutodemonstrateyourabilitytohandlepictures.25.用>,I,&實現(xiàn)ー個W0RD(2個字節(jié))的高低位交換!!intmain(){unsignedshorta=OxABCD;unsignedshortb;unsignedshortc,d;b=(a>8)&0x00ff;d=bIc;printf("\n%x11,b);printf("\n%x",c);printf("\n%x11,d);return0;}結果是CDAB2倆個字節(jié)是16位前八位為高位后八位為低位然后結合.要開辟P1,P2,P3,P4內(nèi)存來做緩沖,大小自定,但這四個緩沖的大小要一樣,并且是連續(xù)的.有一浮點型數(shù)組A,用C語言寫ー函數(shù)實現(xiàn)對浮點數(shù)組A進行降序排序,并輸出結果,要求要以數(shù)組A作為函數(shù)的入口.(建議用冒泡排序法)voidBubbleSort(doublearr[],intn){inti,j;intexchange=1;〃交換標志for(i=l;i=i;j—)〃對當前無序區(qū)R[i..n]自下向上掃描if(arr[j+l]>arr[j]){//交換記錄arr[0]=arr[j+1]; //R[〇]不是哨兵,僅做暫存單元arr[j+1]=arr[j];arr[j]=arr[0];exchange」;〃發(fā)生了交換,故將交換標志置為真)if(!exchange)〃本趟排序未發(fā)生交換,提前終止算法return;)〃endfor(外循環(huán))).找錯:ttinclude#includeclassBase{private:char*name;public:Base(char*className)(name=newchar[strlen(className)];strepy(name,className);:l~Base(){deletename;)char*copyName(){charnewname[256];strepy(newname,name);returnnewname;)char*getName(){returnname;}staticvoidprint(Basebase){printf("name:%s\n",);!};classSubclass:publicBase]public:Subclass(char*className):Base(className){}};intmain()(Base*pBase=newSubclass("test");Base::print(*pBase);printf("name:%s\n",pBase->getName());printf("newname:%s\n",pBase->copyName());returnO;.編寫一個函數(shù),函數(shù)接收ー個字符串,是由十六進制數(shù)組成的一組字符串,函數(shù)的功能是把接到的這組字符串轉換成十進制數(shù)字.并將十進制數(shù)字返回.答案:BOOLHexToDec(LPCTSTRshex,int&idee){inti,mid;intlen=lstrlen(shex);if(len>8)returnFALSE;mid=0;idee=0;for(i=0 ;i='0'&&shex[i]='a'&&shex[i]='A'&&shex[i]30.編寫ー個函數(shù)將一條字符串分成兩部分,將前半部分按ASCII碼升序排序,后半部分不變,最后再將前后兩部分交換,然后將該字符串輸出,測試字符串“ADZDDJKJFIEJHGI”31.找錯Voidtestl(){charstring[10];char*strl="0123456789";strepy(string,strl);Voidtest2(){charstring[10],strl[10];for(1=0;I32.找錯#defineMAX_SRM256DSNget_SRM_no(){staticintSRM_no;inti;for(1=0;I{SRM_no%=MAX_SRM;if(MY_==IDLE)(break;}jif(I>=MAX_SRM)return(NULLSRM);elsereturnSRMno;]33.寫出程序運行結果intsum(inta){autointc=0;staticintb=3;c+=l;b+=2;return(a+b+C);voidmain(){inti;inta=2;for(1=0;134.intfunc(inta){intb;switch(a){case1:30;case2:20;case3:16;default:0}returnb;}則func(1)=?35:inta[3];a[0]=0;a[l]=l;a[2]=2;int*p,*q;P二a;q=&a[2];則aEq-p]=?定義int**a則變量占有的內(nèi)存空間為:編寫ー個函數(shù),要求輸入年月日時分秒,輸出該年月日時分秒的下一秒。如輸入XX年12月31日23時59分59秒,則輸出XX年1月1日〇時〇分。秒。寫ー個函數(shù),判斷ー個int型的整數(shù)是否是2的嘉,即是否可以表示成2へX的形式我只知道是用遞推,大概寫了一下,如下:intisTwoPow(ints){if(s==l)returnFALSE;s=S>>1;if(s>1)IsTwoPow(s);return(s==l)?TRUE:FALSE;〃大概是這個意思,但是這一句似乎不該這么返回!39A,B從ー堆玻璃球里向外拿球,規(guī)則如下:(DA先拿,然后一人一次交替著拿;每次只能拿1個或2個或4個;誰拿最后ー個球,誰就是最后的失敗者;問A,B誰將是失敗者?寫出你的判斷步驟。40.已知:無序數(shù)組,折半查找,各元素值唯一。函數(shù)原型是:BinarySeach(intarrayロ,intiValue,intiCount)array是數(shù)組,在里面用折半查找的方法找等于iValue的值,找到返回1否則0,iCount是元素個數(shù)41.統(tǒng)計ー個字符串中字符出現(xiàn)的次數(shù)位以上的超大整數(shù)的加法43.ヌ寸如下電文:"CASTCASTSATATATASA"給出Huffman編碼。(*(*f)(int,int))(int)表示什么含義?=x+1,x+=l,x++,為這三個語句的效率排序。并說明為什么。46.中綴表達式A-(B+C/D)*E的后綴形式是什么?S1{chare;inti;);sizeof(Sl)=?classX{public:X();virtual~X();voidmyMemberFunc();staticvoidmyStaticFunc();virtualvoidmyVirtualFunc();private:inti;char*pstr;chara;sizeof(X)=?.找出兩個字符串中最大子字符串,如"abractyeyt","dgdsaeactyey"的最大子串為"actyet".有一百個整數(shù),其中有負數(shù),找出連續(xù)三個數(shù)之和最大的部分..寫ー程序?qū)崿F(xiàn)快速排序.假設數(shù)據(jù)輸入為ー文件快速算法描述如下AlgorithmPartitionInput:sequenceaO,...,an-lwithnelementsOutput:perm utationofthethatallelementsaO,...,ajarelessthanorequaltoallelementsai,…,an-l(i>j)Method:choosetheelementinthemiddleeascomparisonelementxleti=Oandj=n-lwhileijsearchthefirstelementaiwhicanorequaltoxsearchthelastelementajhanorequaltoxifijexchangeaiandajleti=i+landj=j-lAfterpartitioningthesequence,atsthetwopartsrecursivelybythesameprocedure.Therecursionendswheneveraofoneelementonly.sequencesuchofthesequenchisgreaterthwhichislesstQuicksorttrepartconsists51.寫ー算法檢測單向鏈表中是否存在環(huán)(whetherthereisaloopinalinklist),要求算法復雜度(Algorithm'scomplexity是0(n))并只使用常數(shù)空間(spaceisO(c)).注意,你只知道一個指向單向鏈表頭的指針。鏈表的長度是不定的,而且環(huán)出現(xiàn)的地方也是不定的,環(huán)有可能在頭,有可能在中間。而且要求是檢測,不能破壞環(huán)的結構.答:用兩個指針來遍歷這個單向鏈表,第一個指針pl,每次走ー步;第二個指針P2,每次走兩步;當p2指針追上pl的時候,就表明鏈表當中有環(huán)路了。inttestLinkRing(Link*head){Link*tl=head,*t2=head;while(tl->next&&t2->next){tl=tl->;next;if(NULL==(t2=t2ー>next->next))returnO;〃無環(huán)if(tl==t2)returnl;returnO;)如果要定位環(huán)路在鏈表當中的開始點發(fā)現(xiàn)p2和pl重合,確定了單向鏈表有環(huán)路了。接下來,讓p2回到鏈表的頭部,重新走,P1也繼續(xù)走,每次步長都走1,那么當pl和p2再次相遇的時候,就是環(huán)路的入口了。.設下列函數(shù)已經(jīng)通過了調(diào)試boolSort_Array(ArrayType*Pinputarray,ArrayType*Poutarray);該函數(shù)在內(nèi)存中排序,能把字節(jié)數(shù)最大為100M字節(jié)的ArrayType類型的數(shù)組排序。其中ArrayType是一個預定義的數(shù)組類型,Pinputarray,Poutarray分別為排序前的指針和排序后的指針。請用c語言的偽碼風格設計ー個算法,他調(diào)用上面給出的函數(shù)完成下列從輸入到輸出的任務輸入:排序前的大文件,名稱為char*pinoutfilename,其內(nèi)容為用分號分隔的ArrayType類型的數(shù)組元素,可裝滿4個100M字節(jié)的數(shù)組。輸出:排序后的大文件char*poutoutfilenameo.用最有效率的方法算出2乘以8等於幾?移位.選擇題.錯誤的轉義字符是(a)A.'\091'B.'WC.'O'D.ヽ’Strings="\"";//s="chare二'''‘ノ/c=’、是轉移字符.若數(shù)組名作實參而指針變量作形參,函數(shù)調(diào)用實參傳給形參的是(d)A.數(shù)組的長度B.數(shù)組第一個元素的值C.數(shù)組所有元素的值D.數(shù)組第一個元素的地址.變量的指針含意是指變量的(b)A.值B.地址C.存儲D.名字.某文件中定義的靜態(tài)全局變量(或稱靜態(tài)外部變量)其作用域是(d)??A.只限某個函數(shù)B.本文件C,跨文件D,不限制作用域靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于ー個源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯誤。.解二次方程:a*x*x+b*x+cintQuadratic(doublea,doubleb,doublec,double&xl,double&x2);返回值:解的個數(shù).最大公約數(shù)DWORDDivisor(DWORDdwFirst,DWORDdwSecond);返回值:最大公約數(shù).根據(jù)蒙特卡洛算法計算圓周率doublePl(DOWRDdwCount/?測試次數(shù)?/);返回值:PI.無符號整數(shù)乘法,乘數(shù)為32bit,結果為64bit提示:32bit整數(shù)分解為16bit相乘voidMultiply(DWORDdwFirst,DWORDdwSecond,DWORD&dwHigh,DWORD&dwLower);.鏈表排序(從小到大)節(jié)點定義為:structNode{intnValue;structNode*pNext;};最后一個節(jié)點的pNext二NULL.Node*SortChain(Node*pHead);返回值:鏈表頭冒泡排序,插入排序等。為避免繁瑣可以不交換指針,只交換值;也可以將值存入數(shù)組,對數(shù)組排序,再存入鏈表中。改錯并說明原因file:inta[10]={0};file:intmain(){externint*a;printf("%d\n",a[0]);returnO;}1#includeiin和#include的區(qū)別?對于#include編譯器從標準庫開始搜索;對于#include""編譯器從用戶工作路徑開始搜索2頭文件的作用是什么?ー、通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便向用戶公布,只要向用戶提供頭文件和二進制的庫即可。用戶只需要按照頭文件中的接口聲明來調(diào)用庫功能,而不必關心接口怎么實現(xiàn)的。編譯器會從庫中提取相應的代碼。二、頭文件能加強類型安全檢查。如果某個接口被實現(xiàn)或被使用時,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這ー簡單的規(guī)則能大大減輕程序員調(diào)試、改錯的負擔。3C++函數(shù)中值的傳遞方式有哪幾種?C++函數(shù)的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞。4內(nèi)存的分配方式的分配方式有幾種?答:ー、從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運行期間都存在。例如全局變量。二、在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結束時這些存儲單元自動被釋放。棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。三、從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運行的時候用malloc或new申請任意多少的內(nèi)存,程序員自己負責在何時用free或delete釋放內(nèi)存。動態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問題也最多。5實現(xiàn)雙向鏈表刪除ー個節(jié)點P,在節(jié)點P后插入ー個節(jié)點,寫出這兩個函數(shù);〃刪除操作StatusListDelete_DuL(DuLinkList&L,inti,ElemType&e)if(!(p=GetElemP_DuL(L,i)))〃此處得到i位置的節(jié)點指針,如果有需要也得寫出具體函數(shù)實現(xiàn)returnERROR;e=p->data;p->prior->next:zp->next;pー〉next->prior=p->pror;free(p);returnOK;〃插入操作St atusListlnse rt_DuL(DuLinkList&L,inti,ElemType&e){if(!(p=GetElemPDuL(L,i)))returnERROR;if(!(s=(DuLinkList)malloc(sizeof(DuLNode))))〃生成新節(jié)點returnERROR;s->data=e;s->prior=p;p->next->prior二s;pー〉next二s;s->next=p->next->next;returnOK;6寫ー個函數(shù),將其中的\t都轉換成4個空格。7Windows程序的入口是哪里?寫出Windows消息機制的流程.8如何定義和實現(xiàn)ー個類的成員函數(shù)為回調(diào)函數(shù)?9C++里面是不是所有的動作都是main()引起的?如果不是,請舉例.比如全局變量的初始化,就不是由main函數(shù)引起的舉例:classA{};Aa;〃a的構造函數(shù)限執(zhí)行intmain(){}10C++里面如何聲明constvoidf(void)函數(shù)為C程序中的庫函數(shù)11下列哪兩個是等同的intb;Aconstint*a=&b;Bconst*inta=&b;Cconstint*consta=&b;Dintconst*consta=&b;12內(nèi)聯(lián)函數(shù)在編譯時是否做參數(shù)類型檢查內(nèi)聯(lián)函數(shù)要做參數(shù)類型檢查,這是內(nèi)聯(lián)函數(shù)跟宏相比的優(yōu)勢13三個float:a,b,c問值(a+b)+c—(b+a)+c(a+b)+c==(a+c)+b兩者都不行。在比較float或double時,不能簡單地比較。由于計算誤差,相等的概率很低。應判斷兩數(shù)之差是否落在區(qū)間指向頭節(jié)點(ps->next=head),將ps設為頭節(jié)點操作下ー個元素等于是依次將每個元素翻到原頭節(jié)點前面。15設計ー個重采樣系統(tǒng),說明如何anti-alias16某個程序在ー個嵌入式系統(tǒng)(200M的CPU,50M的SDRAM)中已經(jīng)最化了,換到另ー個系統(tǒng)(300M的CPU,50M的SDRAM)中運行,還需要優(yōu)化嗎?.下面哪種排序法對12354最快aquicksortsortsort.哪種結構,平均來講,獲取ー個值最快binarytreehashtablestack19請問C++的類和C里面的struct有什么區(qū)別?class中默認的成員訪問權限是private的,而struct中則是public的20請講一講析構函數(shù)和虛函數(shù)的用法和作用?析構函數(shù)是特殊的類成員函數(shù),它沒有返回類型,沒有參數(shù),不能隨意調(diào)用,也沒有重載,只有在類對象的生命期結束的時候,由系統(tǒng)自動調(diào)用。有適放內(nèi)存空間的做用。虛函數(shù)是C++多態(tài)的ー種表現(xiàn),使用虛函數(shù),我們可以靈活的進行動態(tài)綁定,當然是以一定的開銷為代價。21全局變量和局部變量有什么區(qū)別?實怎么實現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?生命周期不同:全局變量隨主程序創(chuàng)建和創(chuàng)建,隨主程序銷毀而銷毀局部變量在局部函數(shù)內(nèi)部,甚至局部循環(huán)體等內(nèi)部存在,退出就不存在;內(nèi)存中分配在全局數(shù)據(jù)區(qū)使用方式不同:通過聲明后全局變量程序的各個部分都可以用到局部變量只能在局部使用;分配在棧區(qū)操作系統(tǒng)和編譯器通過內(nèi)存分配的位置來知道的,全局變量分配在全局數(shù)據(jù)段并且在程序開始運行的時候被加載。局部變量則分配在堆棧里面。22一些寄存器的題目,主要是尋址和內(nèi)存管理等ー些知識。238086是多少位的系統(tǒng)?在數(shù)據(jù)總線上是怎么實現(xiàn)的?多態(tài)。overload和override的區(qū)別。overload是重載,重載是ー種參數(shù)多態(tài)機制,即代碼通過參數(shù)的類型或個數(shù)不同而實現(xiàn)的多態(tài)機制。是一種靜態(tài)的綁定機制。override是覆蓋。覆蓋是ー種動態(tài)綁定的多態(tài)機制。即在父類和子類中同名元素有不同的實現(xiàn)代碼。執(zhí)行的是哪個代碼是根據(jù)運行時實際情況而定的。重載Overload特點publicboolwithdraw(doubleamt,stringname)publicdoublewithdraw(doubleamt)1、方法名必須相同2、參數(shù)列表必須不相同3、返回值類型可以不相同注意:override存在于繼繼承的關系類中。覆寫Override特點(三相同):publicoverrideboolwithdraw(...)1、方法名相同2、參數(shù)列表相同3、返回值類型相同注意:存在于同一類中,但是只有虛方法和抽象方法オ能被覆寫..完成下列程序**.*.?????????????????????????.* * ttincludettdefineN8intmain(){inti;intj;intk;returnO;)26完成程序,實現(xiàn)對數(shù)組的降序排序#ineludevoidsort( );intmain(){intarray[]={45,56,76,234,1,34,23,2,3};〃數(shù)字任〃意給出sort( );returnO;voidsort( )27費波那其數(shù)列,1,1,2,3,5……編寫程序求第十項??梢杂眠f歸,也可以用其他方法,但要說明你選擇的理由。ttincludeintPheponatch(int);intmain(){printf("ThelOthis%d",Pheponatch(10));returnO;intPheponatch(intN)28下列程序運行時會崩潰,請找出錯誤并改正,并且說明原因。ttinclude#includetypedefstruct{TNode*left;TNode*right;intvalue;}TNode;TNode*r〇ot=NULL;voidappend(intN);intmain(){append(63);append(45);append(32);append(77);append(96);append(21);append(17);//Again?數(shù)字任意給出voidappend(intN){TNode*NewNode=(TNode*)malloc(sizeof(TNode));NewNode->value二N;if(root==NULL)root=NewNode;return;}elseTNode*temp;temp=root;while((N>=&&!=NULL)||(N二&&!二NULL)temp二;while(N=)=NewNode;else=NewNode;return;}AclassBnetworkontheinternethasasubnetmaskof,whatisthemaximumnumberofhostspersubnet.一B類地址的子網(wǎng)掩碼是,問每個子網(wǎng)內(nèi)的最大主機數(shù)子網(wǎng)掩碼與iP相與得到子網(wǎng)號,化成二進制,即有12個"〇",2[2-2=4096-2=4094a.240b.255c.4094d.6553Whatisthedifference:betweeno(logn)ando(logn2),wherebothlogarithemshavebase2.a.o(logn2)isbiggerb.o(logn)isbiggerc.nodifference31.Foraclasswhatwouldhappenifwecallaclass'sconstructorfromwiththesameclass'pi1ationerrorb.linkingerrorc.stackoverflowd.noneoftheabove32.“new“inc++isa:A.libraryfunctionlikemallocincB.keywordC.operatorD.noneoftheabovemalloc是庫函數(shù),不在編譯器控制范圍之內(nèi);new是運算符,在編譯器控制范圍之內(nèi)。調(diào)用malloc時,從堆中申請內(nèi)存;調(diào)用new時,從堆中申請內(nèi)存并為內(nèi)存調(diào)用構造函數(shù)。Whichofthefollowinginformationisnotcontainedinaninode.a.fileownerb.filesizec.filenamed.diskaddressWhat'sthenumberofcomparisonsintheworstcasetomergetwosortedlistscontainingnelementseach.+1a.2n+1TimecomplexityofnalgorithmT(n),wherenistheinputsize,isT(n)=T(n-l)+l/nifn>lotherwiseltheorderofthisalgorithmis.a.log(n)b .nc.n2 d.nn.Thenumberofl?sinthebinaryrepresentationof3*4096+l5*256+5*16+3are.a.8 b.9c.10 d.12.設計函數(shù)intatoi(char*s)。.inti=(j=4,k=8,1=16,m=32);printf("%d”,i);輸出是多少?.解釋局部變量、全局變量和靜態(tài)變量的含義。.解釋堆和棧的區(qū)別。在傳統(tǒng)的C中堆和棧實際是ー塊物理內(nèi)存,堆主要用來動態(tài)分配內(nèi)存,從堆棧內(nèi)存的低端向上分配;而棧主要用來傳遞函數(shù)參數(shù)、返回值和局部參數(shù)內(nèi)存分配,是從堆棧內(nèi)存的高端向下分配,俗稱壓棧和出棧;堆是動態(tài)分配,比如用new.malloc分配,需要手工釋放,不然會導致memoryleak,棧是靜態(tài)分配,比如函數(shù)調(diào)用是需要分配堆棧,但堆棧能自動釋放..論述含參數(shù)的宏與函數(shù)的優(yōu)缺點。宏是編譯期的,函數(shù)是運行期的;宏不是實體,而函數(shù)是ー個可尋址的實體;宏只是編譯期替換,在程序里每遇到S(a,b),就用a*b代替,a和b兩個實體并沒有由宏實際產(chǎn)生,而函數(shù)S會在棧中定義兩個對象a和b。宏沒有生存期、作用域之類的概念,而函數(shù)就有。.以下三條輸出語句分別輸出什么?(易]charstrl[] ="abc";charstr2[] ="abc";constcharstr3[]="abc";constcharstr4[]="abc";constchar*str5="abc";constchar*str6="abc";cout43.非C++內(nèi)建型別A和B,在哪幾種情況下B能隱式轉化為A?[C++中等]答:classB:publicA{ }//B公有繼承自Aj可以是間接繼承的classB{operatorA();}//B實現(xiàn)了隱式轉化為A的轉classA{A(constB&);}//A實現(xiàn)了non-explicit的參數(shù)為B構造函數(shù)A&operator=(constA&)"/賦值操作,雖不是正宗的隱式類型轉換,但也可以勉強算ー個44.以下代碼中的兩個sizeof用法有問題嗎?[C易]voidUpperCase(charstrロ)〃將str中的小寫字母轉換成大寫字母(for(size_ti=0;i45.以下代碼有什么問題?[C難]voidchar2Hex(chare)〃將字符以16進制表示{charch= c/0xl0+'01;if(ch>'9')ch+=(,A'-'9'-l);charcl=c%0xl0+'0';if(cl>'9')cl+=('A'—'9'—D;cout46.以下代碼有什么問題?[C++易]structTest(Test(int){}Test(){}voidfun(){});voidmain(void)Testa(l);0;Testb();0;答:變量b定義出錯。按默認構造函數(shù)定義對象,不需要加括號。.以下代碼有什么問題?[C++易]cout8.以下代碼能夠編譯通過嗎,為什么?[C++易]unsignedintconstsizel=2;charstrl[sizel];unsignedinttemp=0;cin?temp;unsignedintconstsize2=temp;charstr2[size2];答:str2定義出錯,size2非編譯器期間常量,而數(shù)組定義要求長度必須為編譯期常量。.以下代碼中的輸出語句輸出〇嗎,為什么?[C++易]structCLSintm_i;CLS(inti):m_i(i){}CLS()(CLS(0);});CLSobj;cout50,以下兩條輸出語句分別輸出什么?[C++難]floata=;cout51.以下反向遍歷array數(shù)組的方法有什么錯誤?[STL易]vectorarray;_back(l);_back(2);_back(3);for(vector::size_typei=()-l;i>=0;一i)〃反向遍歷array數(shù)組(coutarray〇其次vector::size_type被定義為unsignedint,即無符號數(shù),這樣做為循環(huán)變量的i為〇時再減1就會變成最大的整數(shù),導致循環(huán)失去控制。.以下代碼有什么問題?[STL易]typedefvectorlntArray;IntArrayarray;_back(1);_back(2);_back(2);_back⑶;〃刪除array數(shù)組中所有的2for(IntArray::iteratoritor=();itor!=();++itor){if(2==*itor)(itor)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年反腐倡廉警示教育工作總結
- 美術鑒賞與創(chuàng)新思維
- 2006年貴州高考語文真題及答案
- 體育用品行政后勤工作總結
- 體育用品行業(yè)行政后勤工作總結
- 2023-2024年員工三級安全培訓考試題附答案【完整版】
- 2024企業(yè)主要負責人安全培訓考試題及答案(名校卷)
- 教師期末教學工作總結4篇
- 快樂的國慶節(jié)作文400字5篇
- 市場震動月度報告
- 河北省百師聯(lián)盟2023-2024學年高二上學期期末大聯(lián)考歷史試題(解析版)
- 2021年四川省涼山州九年級中考適應性考試理科綜合(試卷)
- 骨科疼痛的評估及護理
- 【MOOC】概率論與數(shù)理統(tǒng)計-南京郵電大學 中國大學慕課MOOC答案
- 2024年度軟件開發(fā)分包合同技術要求與交底2篇
- 居家養(yǎng)老人員培訓管理制度
- 抗菌藥物的合理應用培訓
- 初三數(shù)學老師家長會發(fā)言稿
- 湖北第二師范學院《操作系統(tǒng)》2023-2024學年期末試卷
- 2021-2022學年河北省唐山市高一上學期期末語文試題
- 舒適化醫(yī)療麻醉
評論
0/150
提交評論