




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
表示已有答案表示沒有處理表示答案不確定C++筆試題1.多態(tài)類中的虛函數(shù)表是Compile-Time,還是Run-Time時(shí)建立的?答案:虛擬函數(shù)友是在編譯期就建立了,各個(gè)虛擬函數(shù)這時(shí)被組織成了?個(gè)虛擬函數(shù)的入口地址的數(shù)組.而對(duì)象的隱藏成員一虛擬函數(shù)表指針是在運(yùn)行期一也就是構(gòu)造函數(shù)被調(diào)用時(shí)進(jìn)行初始化的,這是實(shí)現(xiàn)多態(tài)的關(guān)鍵.3.main主函數(shù)執(zhí)行完畢后,是否可能會(huì)再執(zhí)行一段代碼?(朗訊的一道筆試題)答案:可以,可以用_onexit注冊(cè)個(gè)函數(shù),它會(huì)在main之后執(zhí)行;如果你需要加入一段五main退出后執(zhí)行的代碼,可以使用atexit()函數(shù),注冊(cè)一個(gè)函數(shù)。語法:#include<stdlib.h>intatexit(void("function")(void));#include<stdlib.h>#include<stdio.h>voidfnl(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");}結(jié)果:Thisisexecutedfirst.Thisisexecutednext..一個(gè)父類寫了一個(gè)virtual函數(shù),如果子類覆蓋它的函數(shù)不加virtual,也能實(shí)現(xiàn)多態(tài)?在子類的空間里,有沒有父類的這個(gè)函數(shù),或者父類的私有變量?(華為筆試題)答案:只要基類在定義成員函數(shù)時(shí)已經(jīng)聲明了virtue關(guān)鍵字,在派生類實(shí)現(xiàn)的時(shí)候覆蓋該函數(shù)時(shí),virtue關(guān)鍵字可加可不加,不影響多態(tài)的實(shí)現(xiàn)。子類的空間里有父類的所有變量(static除外)。
.給一個(gè)字符串、例如“ababc”要求返回“ab”.因?yàn)椤癮b”連續(xù)重復(fù)出現(xiàn)且最長。用C/C++語言寫一函數(shù)完成該算法,給出復(fù)雜度.對(duì)序列1、1、2、3、5、8、13是Fab..數(shù)列2、3、5、13...是Fab..質(zhì)數(shù)數(shù)列,因?yàn)樗麄兣c自己前面的Fab...數(shù)列都互質(zhì)給出k,返回第k小的Fab..質(zhì)數(shù).101個(gè)硬幣100真、1假,真假區(qū)別在于重量。請(qǐng)用無硅碼天平稱兩次給出真幣重還是假幣重的結(jié)論。.完成字符串拷貝可以使用sprintf、strcpy及memcpy函數(shù),請(qǐng)問這些函數(shù)有什么區(qū)別,你喜歡使用哪個(gè),為什么?答案:這些函數(shù)的區(qū)別在于實(shí)現(xiàn)功能以及操作對(duì)象不同。strcpy函數(shù)操作的對(duì)象是字符串,完成從源字符串到目的字符串的拷貝功能。snprintf函數(shù)操作的對(duì)象不限于字符串:雖然目的對(duì)象是字符串,但是源對(duì)象可以是字符串、也可以是任意基本類型的數(shù)據(jù)。這個(gè)函數(shù)主要用來實(shí)現(xiàn)(字符串或基本數(shù)據(jù)類型)向字符串的轉(zhuǎn)換功能。如果源對(duì)象是字符串,并且指定%s格式符,也可實(shí)現(xiàn)字符串拷貝功能。memcpy函數(shù)顧名思義就是內(nèi)存拷貝,實(shí)現(xiàn)將一個(gè)內(nèi)存塊的內(nèi)容復(fù)制到另一個(gè)內(nèi)存塊這一功能。內(nèi)存塊由其首地址以及長度確定。程序中出現(xiàn)的實(shí)體對(duì)象,不論是什么類型,其最終表現(xiàn)就是在內(nèi)存中占據(jù)?席之地(?個(gè)內(nèi)存區(qū)間或塊)。因此,memcpy的操作對(duì)象不局限于某?類數(shù)據(jù)類型,或者說可適用于任意數(shù)據(jù)類型,只要能給出對(duì)象的起始地址和內(nèi)存長度信息、并且對(duì)象具有可操作性即可。鑒于memcpy函數(shù)等長拷貝的特點(diǎn)以及數(shù)據(jù)類型代表的物理意義,memcpy函數(shù)通常限于同種類型數(shù)據(jù)或?qū)ο笾g的拷貝,其中當(dāng)然也包括字符串拷貝以及基本數(shù)據(jù)類型的拷貝。對(duì)于字符串拷貝來說,用上述三個(gè)函數(shù)都可以實(shí)現(xiàn),但是其實(shí)現(xiàn)的效率和使用的方便程度不同:strcpy無疑是最合適的選擇:效率高且調(diào)用方便。snprintf要額外指定格式符并且進(jìn)行格式轉(zhuǎn)化,麻煩且效率不高。memcpy雖然高效,但是需要額外提供拷貝的內(nèi)存長度這一參數(shù),易錯(cuò)且使用不便;并且如果長度指定過大的話(最優(yōu)長度是源字符串長度+1),還會(huì)帶來性能的下降。其實(shí)strcpy函數(shù)一般是在內(nèi)部調(diào)用memcpy函數(shù)或者用匯編直接實(shí)現(xiàn)的,以達(dá)到高效的目的。因此,使用memcpy和strcpy拷貝字符串在性能上應(yīng)該沒有什么大的差別。對(duì)于非字符串類型的數(shù)據(jù)的復(fù)制來說,strcpy和snprintf一般就無能為力了,可是對(duì)memcpy卻沒有什么影響。但是,對(duì)于基本數(shù)據(jù)類型來說,盡管可以用memcpy進(jìn)行拷貝,由于有賦值運(yùn)算符可以方便且高效地進(jìn)行同種或兼容類型的數(shù)據(jù)之間的拷貝,所以這種情況下memcpy兒乎不被使用。memcpy的長處是用來實(shí)現(xiàn)(通常是內(nèi)部實(shí)現(xiàn)居多)對(duì)結(jié)構(gòu)或者數(shù)組的拷貝,其目的是或者高效,或者使用方便,甚或兩者兼有。.變量的聲明和定義有什么區(qū)別?.請(qǐng)寫出下面代碼在32位平臺(tái)上的運(yùn)行結(jié)果,并說明sizeof的性質(zhì):#include<stdio.h>#include<stdlib.h>intmain(void)chara[30];printf("%d\n”,sizeof(a));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)));return0;12.請(qǐng)完成以下題目。注意,請(qǐng)勿直接調(diào)用ANSIC函數(shù)庫中的函數(shù)實(shí)現(xiàn)。a)請(qǐng)編寫一個(gè)C函數(shù),該函數(shù)給出一個(gè)字節(jié)中被置1的位的個(gè)數(shù),并請(qǐng)給出該題的至少一個(gè)不同解法。第一種unsignedintTestAsOneO(charlog){inti;unsignedintnum=0,val;for(i=0;i<8; i++)(val= log ?i;〃移位val&二0x01;〃與1相與if(val)num++;)returnnum;}第二種unsignedintTestAsOnel(charlog)(inti;unsignedintnum=0,val;for(i=0;i<8; i++)(val= Clog) ?i;〃反碼?val&二0x00; 〃與。相與if(!val)num++;)returnnum;}b)請(qǐng)編寫一個(gè)C函數(shù),該函數(shù)將給定的一個(gè)字符串轉(zhuǎn)換成整數(shù)。intInvert(char*str){intnum=0;while(*str!=,\0J)(intdigital=*str-48;num=num*10+digital;str=str+l;)returnnum;)c)請(qǐng)編寫一個(gè)C函數(shù),該函數(shù)將給定的一個(gè)整數(shù)轉(zhuǎn)換成字符串。voidIntToCharChange(intnum,char*pval)charstrval[100];inti,j;intvalO=0;intval1=o;valO=num;for(i=0;i<100; i++)(vail=valO% 10;〃取余valO=valO/ 10;〃取整strval[i]=vail+48;//數(shù)字一字符if(valO< 10)(i++;strval[i]=valO+48;break;)ifor(j=0;j<=i; j++)〃倒置(pval[j]\=strval[i-j];jpval[j]='\0';d)請(qǐng)編寫一個(gè)C函數(shù),該函數(shù)將一個(gè)字符串逆序。voidAntitoneValue(char*father,char*child)(inti;charsource[100];intj= 0;while(father[j])〃放入source,[j]為長度(source[j] =father[j];j++:if(j> 99){return;})source[j] = '\0";for(i=0;i<j; i++)(child[i] = source[j-i-l]: 〃反序}child[i] = '\0';)e)請(qǐng)編寫一個(gè)C函數(shù),該函數(shù)在給定的內(nèi)存區(qū)域搜索給定的字符,并返回該字符所在位置索引值。intsearch(char*cpSource,intn,charch)〃起始地址,搜索長度,目標(biāo)字符for(i=0;i<n&&*(cpSource+i)!=ch;++i):returni;)f)請(qǐng)編寫一個(gè)C函數(shù),該函數(shù)在一個(gè)字符串中找到可能的最長的子字符串,該字符串是由同一字符組成的。intChildString(char*p)〃自己寫(Char*q=p;intstringlen=O,i=0,j=l,len=O,maxlen=l;while(*q!='\0*) 〃不能用strlen,求得長度stringlen(Stringlen++;q++;}while(i<Stringlen)(if(*(p+i)==*(p+j)&&j<Stringlen)(len++; 〃統(tǒng)計(jì)子串長度i++;j++;}else(if(len>maxlen) 〃統(tǒng)計(jì)最大子串長度{maxlen=len+l;len=O;)else{len=O;)i++;j++;))returnmaxlen;)給出演示上述函數(shù)功能的一個(gè)簡單程序,并請(qǐng)編寫對(duì)應(yīng)的Makefile文件13.我們需要編寫一個(gè)圖形相關(guān)的應(yīng)用程序,需要處理大量圖形(Shape)信息,圖形有矩形(Rectangle),正方形(Square),圓形(Circle)等種類,應(yīng)用需要計(jì)算這些圖形的面積,并且可能需要在某個(gè)設(shè)備上進(jìn)行顯示(使用在標(biāo)準(zhǔn)輸出上打印信息的方式做為示意)。a)請(qǐng)用面向?qū)ο蟮姆椒▽?duì)以上應(yīng)用進(jìn)行設(shè)計(jì),編寫可能需要的類b)請(qǐng)給出實(shí)現(xiàn)以上應(yīng)用功能的示例性代碼,從某處獲取圖形信息,并且進(jìn)行計(jì)算和繪制c)如果你的Square繼承自Rectangle,請(qǐng)給出理由,如果不是,請(qǐng)給出理由,并且請(qǐng)比較兩種方式的優(yōu)劣d)請(qǐng)問你所編寫的類,在如下代碼中會(huì)有何表現(xiàn),請(qǐng)解釋voidtest_rectangle_area(Rectanglefer)r.set_width(10);r.setheight(15);assert(r.area()==150);.假設(shè)現(xiàn)有一個(gè)單向的鏈表,但是只知道只有一個(gè)指向該節(jié)點(diǎn)的指針p,并且假設(shè)這個(gè)節(jié)點(diǎn)不是尾節(jié)點(diǎn),試編程實(shí)現(xiàn)刪除此節(jié)點(diǎn)參考:將下一個(gè)節(jié)點(diǎn)的內(nèi)容復(fù)制到本節(jié)點(diǎn)上,然后刪除下一個(gè)節(jié)點(diǎn);.寫一個(gè)程序,把一個(gè)100以內(nèi)的自然數(shù)分解因數(shù)。(自然數(shù)分解因數(shù)就是將一個(gè)自然數(shù)分解為幾個(gè)素?cái)?shù)的乘積,提示,由于該數(shù)不是很大,所以可以將質(zhì)數(shù)保存在數(shù)組中,以加快計(jì)算速度).編寫一個(gè)Identify的分配、釋放的函數(shù),為1一10000之間的自然數(shù)。.分別實(shí)現(xiàn)itoa和atoi..Considerthefollowingcode:#include<stdio.h>#include<string.h>intmain(intargc,char*argv[]){inti=1;charbuf[4];strcpy(buf,"AAAA");printf("%d'n',i);return0;Whencompiledandexecutedonx86,whydoesthisprogramusuallynotoutputwhattheprogrammerintended? 在x86上為什么不能得到預(yù)期結(jié)果NameseveralwaysinwhichthesecurityproblemthatcausesthisprogramnottooutputwhattheprogrammerintendedcanbepreventedWITHOUTchangingthecode.參考:第一個(gè)問題:32位情況:x86卜,棧方向向上生長.在main的棧中,先分配i空間(4byte),然后分配4個(gè)字節(jié)的buf(地址在i的上面,比i小).strcpy越界,用0把buf開始的第4(0開始)個(gè)字節(jié)覆蓋掉了.而x86是LSB排列順序,所以真好覆蓋了i的內(nèi)個(gè)數(shù)字1.所以顯示出數(shù)字0.16位情況同樣分析即可.第2問?.intw=l,x=2,y=3,z=4;m=(w<x)?w:x;m=(m<y)?m:y;m=(m<2)?m:z;說出結(jié)果printf(*m=%d*,m);說出結(jié)果答案:1.說出結(jié)果 ???#include<stdio.h>main()FILE*fp;inti,a[4]={l,2,3,4},b;fp=fopen(z,data.dat","wb");〃這里幫忙解釋一下for(i=0;i<4;i++)fwrite(&a[i],sizeof(int),1,fp);//這里也幫忙看一下fclose(fp);fp=fopenC*data.dat*,"rb");fseek(fp,-2L*sizeof(int),SEEK_END);〃還有這里fread(&b,sizeof(int),1,fp);〃這里還有也看一下fclose(fp);printf(*b=%d\n*,b);}21,有雙向循環(huán)鏈表結(jié)點(diǎn):(華為面試題)typedefstructnode(intdate;structnode*front,*next;}_Node;看兩個(gè)雙向循環(huán)鏈表A,B,知道其頭指針為:pHeadA,pHeadB,請(qǐng)寫一函數(shù)將兩上鏈表中date值相同的結(jié)點(diǎn)刪除參考算法:,取出A的一個(gè)元素d.收集B中有相同元素d的結(jié)點(diǎn)到垃圾箱,并從B里刪除.收集A中有相同元素d的結(jié)點(diǎn)到垃圾箱,并從A里刪除.刪除垃圾箱中的所有元素.A鏈的指針指向下一個(gè).重復(fù)1'5,直到A鏈循環(huán)到頭了注意的是第3步,在2步執(zhí)行后垃圾箱不為空時(shí)才執(zhí)行。上述算法還可以做一點(diǎn)點(diǎn)優(yōu)化:1.加入兩個(gè)變量cA, cB,分別記錄當(dāng)前A中和B中的元素個(gè)數(shù)每次從較長者中取出一個(gè)元素來,先從較小者中找起若沒有,則不必在較長者中浪費(fèi)時(shí)間了#include<iostream.h> ?structNODE{intdate;NODE*front,*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中一個(gè)值paaaa=pa;paa=pa;pb=bhead;while(pb->next!=bhead)if(boys==pb->date) 〃如果pa,pb中有值相同cout?endl;cout?*delete B:*<<paa->date?*if(pb==bhead)(boy=l;pb->front->next=pb->next;pb->next->front=pb->front;bhead=bhead->next;pbb=pb;pb=pb->next;deletepbb;}else(boy=l;pb->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)(cout?*delete A:*?paa->date?*if(paa==pa)(pa=pa->next;ahead=pa;paa->front->next=paa->next;paa->next->front=paa->front;paaa=paa;paa=paa->next;deletepaaa;}else(paa->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;)cout<<endl;}intmainO(NODE*A,*pHeadA,*B,*pHeadB;A=newNODE;B二new NODE;pHeadA=A;pHeadB=B;for(int i=l;i<21;++i)(A->date=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;i<33;i+=2)(B->date=i;B->next=newNODE;B->next->front=B;B=B->next;)B=B->front;deleteB->next;B->next=pHeadB;〃生成鏈表A,并賦初值!〃生成鏈表B,〃生成鏈表A,并賦初值!〃生成鏈表B,并賦初值!redel(pHeadA,pHeadB);〃調(diào)用函數(shù)刪除相同結(jié)點(diǎn)!22.char*GetStr()(char*tmp;tmp=〃123"returntmp;voidmain()printf(線s”,GetStr());會(huì)輸出123嗎?123創(chuàng)建在堆上還是棧上呢?123的空間是什么時(shí)候釋放的?參考:"123”是常量字符串,存儲(chǔ)在全局變量區(qū),和靜態(tài)變量一起。即不在堆,也不在棧在程序結(jié)束時(shí)自動(dòng)釋放23.1)字符指針、浮點(diǎn)數(shù)指針、以及函數(shù)指針這三種類型的變量哪個(gè)占用的內(nèi)存最大?為什么?答案:指針變量也占用內(nèi)存單元,而且所有指針變量占用內(nèi)存單元的數(shù)量都是相同的。就是說,不管是指向何種對(duì)?象的指針變量,它們占用內(nèi)存的字節(jié)數(shù)都是?樣的,并且要足夠把程序中所能用到的最大地址表示出來(通常是一個(gè)機(jī)器字長)。2)類ClassB從ClassA派生,那么ClassA*a=newClassB(-);試問該表達(dá)是否合法?為什么?答案:派生類的指針指向基類的對(duì)象是錯(cuò)誤的,不能通過編譯的:基類的指針可以指向派生類的對(duì)象,調(diào)用派生類的函數(shù)雞是動(dòng)物,沒錯(cuò)。(動(dòng)物的指針指向雞的實(shí)例)雞可以執(zhí)行所有動(dòng)物都具有的方法,例如“死亡”反過來,動(dòng)物一定是雞嗎?(雞的指針指向動(dòng)物或者動(dòng)物的某個(gè)派生類的實(shí)例)動(dòng)物都能執(zhí)行雞的某個(gè)方法嗎?比如說“下蛋”?3)如果ClassA中定義并實(shí)現(xiàn)虛函數(shù)intfunc(void),ClassB中也實(shí)現(xiàn)該函數(shù),那么上述變量a->func()將調(diào)用哪個(gè)類里面的函數(shù)?如果intfunc(void)不是虛函數(shù),情況又如何?為什么?答案:第一問調(diào)用的是B的。第二問調(diào)用A的。虛函數(shù)的一個(gè)典型應(yīng)用,虛函數(shù)只能借助于指針或者引用來達(dá)到多態(tài)的效果如果沒有定義成虛函數(shù): classA{public:voidprint(){cout?wThisisA"?endl;});classB:publicA{public:voidprint(){cout?>,Thisis?endl;});intmain(){ 〃為了在以后便于區(qū)分,我這段main。代碼叫做mainlAa;Bb;A*pl=&a;A*p2=&b;pl->print();p2->print();)結(jié)果是兩個(gè)ThisisA如果定義成虛函數(shù): classA(public:virtualvoidprint(){cout?wThisisAw?endl;}〃現(xiàn)在成了虛函數(shù)了};classB:publicA{public:voidprint(){cout<<MThisisBw?endl;}〃這里不需要在前面加上關(guān)鍵字virtual,只需在把基類的成員函數(shù)設(shè)為virtual,其派生類的相應(yīng)的函數(shù)也會(huì)自動(dòng)變?yōu)樘摵瘮?shù));再運(yùn)行main輸出的結(jié)果就是ThisisA和ThisisB測(cè)試:4)char**p,a[16][8];問:p=a是否會(huì)導(dǎo)致程序在以后出現(xiàn)問題?為什么?參考:這個(gè)不會(huì)導(dǎo)致出現(xiàn)問題,但是要注意P的使用,如a[l][2]等價(jià)的為*(*(p+l)+2)而不是*(p+ll),會(huì)的,這樣會(huì)出現(xiàn)編譯錯(cuò)誤正確的是:chara[5][5];char(*p)[5];p=a;如下所述的ifelse和switch語句哪個(gè)的效率高?為什么?5)在同一個(gè)進(jìn)程中,一個(gè)模塊是否可以通過指針操作破壞其它模塊的內(nèi)存,為什么?(華為)6)應(yīng)用程序在運(yùn)行時(shí)的內(nèi)存包括代碼區(qū)和數(shù)據(jù)區(qū),其中數(shù)據(jù)區(qū)又包括哪些部分?參考:對(duì)于一個(gè)進(jìn)程的內(nèi)存空間而言,可以在邏輯上分成3個(gè)部份:代碼區(qū),靜態(tài)數(shù)據(jù)區(qū)和動(dòng)態(tài)數(shù)據(jù)區(qū)。動(dòng)態(tài)數(shù)據(jù)區(qū)一般就是“堆?!?。棧是一種線性結(jié)構(gòu),堆是一種鏈?zhǔn)浇Y(jié)構(gòu)。進(jìn)程的每個(gè)線程都有私有的“枝”。全局變量和靜態(tài)變量分配在靜態(tài)數(shù)據(jù)區(qū),木地變量分配在動(dòng)態(tài)數(shù)據(jù)區(qū),即堆棧中。程序通過堆棧的基地址和偏移量來訪問本地變量。.Assignment2:PictureProcessingUseC++,Java,orsimilarlanguagesor/andanymiddlewaresuchasEJBandJ2EEtoprocessapicturewithahighresolution(3MegaPixelsforexample).Usesomemethodologiestodegradetheresolutionofthepicturetomakeitquickerforbrowsing.Thendividethedegradedpictureinto9sectorsequally.Clickanyofthe9sectorswillresultadetailedpictureforthissectorwiththesameresolutionasthatoftheoriginalpicture.Thisassignmentisdesignedforyoutodemonstrateyourabilitytohandlepictures..用?,?,I,&實(shí)現(xiàn)一個(gè)WORD(2個(gè)字節(jié))的高低位交換!!intmain()(unsignedshorta=OxABCD;unsignedshortb;unsignedshortc,d;b=(a?8)&0xff00;c=(a?8)&0x00ff;d=b|c;printf('\n%x”,b);printf("\n%x",c);printf('\n%x”,d);return0;}結(jié)果是CDAB2倆個(gè)字節(jié)是16位前八位為高位后八位為低位然后結(jié)合.要開辟Pl,P2,P3,P4內(nèi)存來做緩沖,大小自定,但這四個(gè)緩沖的大小要一樣,并且是連續(xù)的.有一浮點(diǎn)型數(shù)組A,用C語言寫一函數(shù)實(shí)現(xiàn)對(duì)浮點(diǎn)數(shù)組A進(jìn)行降序排序,并輸出結(jié)果,要求要以數(shù)組A作為函數(shù)的入口.(建議用冒泡排序法)voidBubbleSort(double arr[], intn){inti,j;intexchange= 1;〃交換標(biāo)志for(i=l;i<n;i++){〃最多做n-1趟排序exchanged;〃本趟排序開始前,交換標(biāo)志應(yīng)為假for(j=n-l;j>=i;j—) 〃對(duì)當(dāng)前無序區(qū)R[i..n]自下向上掃描if(arr[j+l]>arr[j]){〃交換記錄arr[0]=arr[j+1]; //R[0]不是哨兵,僅做暫存單元arr[j+l]=arr[j];arr[j]=arr[0];exchange=l; 〃發(fā)生了交換,故將交換標(biāo)志置為真}if(!exchange) //本趟排序未發(fā)生交換,提前終止算法return;)〃endfor(外循環(huán))).找錯(cuò):#include<string.h>#include<stdio.h>classBase{private:char*name;public:Base(char*className){name=newchar[strlen(className)];strcpy(name,className);)'Base(){deletename;}char*copyName0|charnewname[256];strcpy(newname,name);returnnewname;)char*getName(){returnname;}staticvoidprint(Basebase){printfCyname:%s\n”,base,name);});classSubclass:publicBase{public:Subclass(char*className):Base(className){}};intmain()Base*pBase=newSubclass("test");Base::print(*pBase);printf(^name:%s\n”,pBase->getName());printf(z,newname:%s\n”,pBase->copyName());return0;.編寫一個(gè)函數(shù),函數(shù)接收一個(gè)字符串,是由十六進(jìn)制數(shù)組成的一組字符串,函數(shù)的功能是把接到的這組字符串轉(zhuǎn)換成十進(jìn)制數(shù)字.并將十進(jìn)制數(shù)字返回.答案:BOOLHexToDec(LPCTSTRshex,int&idee)inti,mid;intlen二=lstrlen(shexif(len>8)returnFALSE;mid=o;idee=o;for(i=0;i<len;)if(shex[i]>=0,&&shex[i]<=9')mid = shex[i]-'O';TOC\o"1-5"\h\zelse if( shex[i]>=,a&&shex[i]<=,f* )mid = shex[i],a' +10;else if( shex[i]>=,A*&&shex[i]<=,F(xiàn)* )mid = shex[i]-'A' +10;elsereturnFALSE;mid?= ((len-i-1)?2); //移位表示變?yōu)?的n次方倍idee=idc+mid;}returnTRUE;).編寫一個(gè)函數(shù)將一條字符串分成兩部分,將前半部分按ASCH碼升序排序,后半部分不變,(如果字符串是奇數(shù)則中間的字符不變,)最后再將前后兩部分交換,然后將該字符串輸出,測(cè)試字符串“ADZDDJKJFIEJHGI”.找錯(cuò)Voidtestl(){charstring[10];char*strl="0123456789”;strepy(string,strl);)Voidtest2(){charstring[10],strl[10];for(1=0;I<10;I++){strl[i]='a';}strepy(string,strl);Voidtest3(char*strl){charstring[10];if(strlen(strl)<=10){strcpy(string,strl);).找錯(cuò)^defineMAX__SRM256DSNget_SRM_no(){staticintSRM_no;intI;for(1=0;1(SRM_no%=MAX_SRM;if(MY_SRM.state==IDLE)(break;}}if(I>=MAX_SRM)return(NULL_SRM);elsereturnSRMno;}. 寫出程序運(yùn)行結(jié)果intsum(inta){autointc=0;staticintb=3;c+=l;b+=2;return(a+b+C);)voidmain(){intI;inta=2;for(I=0;I<5;I++){printf("%d,”,sum(a));)}.intfunc(inta){intb;switch(a){case1:30;20;16;default:0)returnb;則func(l)=?:inta[3];a[0]=0;a[l]=l;a[2]=2;int*p,*q;p=a;q=&a⑵;則a[q-p]=?.定義int**a[3][4],則變量占有的內(nèi)存空間為:.編寫一個(gè)函數(shù),要求輸入年月日時(shí)分秒,輸出該年月日時(shí)分秒的下一秒。如輸入2004年12月31日23時(shí)59分59秒,貝U輸出2005年1月1日0時(shí)0分0秒。.寫一個(gè)函數(shù),判斷一個(gè)int型的整數(shù)是否是2的'幕,即是否可以表示成2'X的形式(不可以用循環(huán))我只知道是用遞推,大概寫了一下,如下:intIsTwoPow(ints){if(s==l)returnFALSE;s=s?l;if(s>l)IsTwoPow(s);return(s==l)?TRUE:FALSE;〃大概是這個(gè)意思,但是這一句似乎不該這么返回!}A,B從一堆玻璃球(共100個(gè))里向外拿球,規(guī)則如下:(1)A先拿,然后一人一次交替著拿;(2)每次只能拿1個(gè)或2個(gè)或4個(gè);(3)誰拿最后一個(gè)球,誰就是最后的失敗者;問A,B誰將是失敗者?寫出你的判斷步驟。.已知:無序數(shù)組,折半查找,各元素值唯-o函數(shù)原型是:Binary_Seach(intarray[],intiValue,intiCount)array是數(shù)組,在里面用折半查找的方法找等于iValue的值,找到返回1否則0,iCount是元素個(gè)數(shù).統(tǒng)計(jì)一個(gè)字符串中字符出現(xiàn)的次數(shù).100位以上的超大整數(shù)的加法(主要考慮數(shù)據(jù)結(jié)構(gòu)和加法的實(shí)現(xiàn)).對(duì)如下電文:"CASTCASTSATATATASA”給出Huffman編碼。.int(*(*f)(int,int))(int)表示什么含義?.x=x+l,x+=Lx++,為這三個(gè)語句的效率排序。并說明為什么。.中綴表達(dá)式A-(B+C/D)*E的后綴形式是什么?.structS1{charc;inti;};sizeof(SI)=?classX{public:X();virtual、X();voidmyMemberFunc();staticvoidmyStaticFunc();virtualvoidmyVirtualFunc();private:inti;char*pstr;chara;)sizeof(X)=?.找出兩個(gè)字符串中最大子字符串,如"abractyeyt","dgdsaeactyey”的最大子串為"actyet*.有一百個(gè)整數(shù),其中有負(fù)數(shù),找出連續(xù)三個(gè)數(shù)之和最大的部分..寫一程序?qū)崿F(xiàn)快速排序.假設(shè)數(shù)據(jù)輸入為一文件快速算法描述如下AlgorithmPartitionInput:sequencea0,...,an-lwithnelementsOutput:permutationofthesequencesuchthatallelementsaO,...,ajarelessthanorequaltoallelementsai,...,an-1(i>j)Method:choosetheelementinthemiddleofthesequenceascomparisonelementxleti=0andj=n-1whileijsearchthefirstelementaiwhichisgreaterthanorequaltoxsearchthelastelementajwhichislessthanorequaltoxifijexchangeaiandajleti=i+1andj=j-1Afterpartitioningthesequence,Quicksorttreatsthetwopartsrecursivelybythesameprocedure.Therecursionendswheneverapartconsistsofoneelementonly..寫一算法檢測(cè)單向鏈表中是否存在環(huán)(whetherthereisaloopinalinklist),要求算法復(fù)雜度(Algorithm'scomplexity是0(n))并只使用常數(shù)空間(spaceis0(c)).注意,你只知道一個(gè)指向單向鏈表頭的指針。鏈表的氏度是不定的,而且環(huán)出現(xiàn)的地方也是不定的,環(huán)有可能在頭,有可能在中間.而且要求是檢*,不能破壞環(huán)的結(jié)構(gòu).(M0T0)答:用兩個(gè)指針來遍歷這個(gè)單向鏈表,第一個(gè)指針pl,每次走一步:第二個(gè)指針p2,每次走兩步;當(dāng)P2指針追上pl的時(shí)候,就表明鏈表當(dāng)中有環(huán)路了。inttestLinkRing(Link*head){Link*tl=head,*t2=head;while(tl->next&&t2->next)tl=tl->;next;if(NULL==(t2=t2->next->next))return0;〃無環(huán)if(tl==t2)return1;)return0;)如果要定位環(huán)路在鏈表當(dāng)中的開始點(diǎn)發(fā)現(xiàn)P2和pl而合,確定了單向鏈表有環(huán)路了。接下來,讓p2回到鏈表的頭部,建新走,P1也繼續(xù)走,每次步長都走1,那么當(dāng)P1和P2再次相遇的時(shí)候,就是環(huán)路的入口了。.設(shè)下列函數(shù)已經(jīng)通過了調(diào)試boolSort_Array(ArrayType*Pinputarray,ArrayType*Poutarray);該函數(shù)在而存中排序,能把字節(jié)數(shù)最大為100M字節(jié)的ArrayType類型的數(shù)組排序。其中ArrayType是一個(gè)預(yù)定義的數(shù)組類型(細(xì)節(jié)無關(guān)緊要),Pinputarray,Poutarray分別為排序前的指針和排序后的指針。請(qǐng)用c語言的偽碼風(fēng)格設(shè)計(jì)一個(gè)算法,他調(diào)用上面給出的函數(shù)完成下列從輸入到輸出的任務(wù)輸入:排序前的大文件,名稱為char*pinoutfilename,其內(nèi)容為用分號(hào)分隔的ArrayType類型的數(shù)組元素,可裝滿4個(gè)100M字節(jié)的數(shù)組。輸出:排序后的大文件char*poutoutfi1ename?.用最有效率的方法算出2乘以8等於幾?移位.選擇題.錯(cuò)誤的轉(zhuǎn)義字符是(a)A.'\091'B.'\\'C.'\0'D.'\''Strings="\"; 〃s="charc=';//c=''是轉(zhuǎn)移字符.若數(shù)組名作實(shí)參而指針變量作形參,函數(shù)調(diào)用實(shí)參傳給形參的是(d)A.數(shù)組的長度B,數(shù)組第一個(gè)元素的值C.數(shù)組所有元素的值D.數(shù)組第一個(gè)元素的地址.變量的指針含意是指變量的(b)A.值B.地址C.存儲(chǔ)D.名字5.某文件中定義的靜態(tài)全局變量(或稱靜態(tài)外部變量)其作用域是(d)??A.只限某個(gè)函數(shù)B.本文件C.跨文件D.不限制作用域靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于?個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯(cuò)誤。55..解二次方程:a*x*x+b*x+cintQuadratic(doublea,doubleb,doublec,double&xl,double&x2);返回值:解的個(gè)數(shù).最大公約數(shù)DWORDDivisor(DWORDdwFirst,DWORDdwSecond);返回值:最大公約數(shù).根據(jù)蒙特卡洛算法計(jì)算圓周率doublePI(DOWRDdwCount/*測(cè)試次數(shù)*/):返回值:PI.無符號(hào)整數(shù)乘法,乘數(shù)為32bit,結(jié)果為64bit提示:32bit整數(shù)分解為16bit相乘voidMultiply(DWORDdwFirst,DWORDdwSecond,DWORD&dwHigh,DWORD&dwLower);.鏈表排序(從小到大)節(jié)點(diǎn)定義為:structNode{intnValue;structNode*pNext;};最后一個(gè)節(jié)點(diǎn)的pNext=NULL.Node*SortChain(Node*pHead);返回值:鏈表頭冒泡排序,插入排序等。為避免繁瑣可以不交換指針,只交換值;也可以將值存入數(shù)組,對(duì)數(shù)組排序,再存入鏈表中。改錯(cuò)并說明原因file:1.cinta[10]={0};file:2.cintmain(){externint*a;printf("%d\n",a[0]);return0;1ttinclude"filename,h”和#include〈filename.h>的區(qū)別?對(duì)于#include<filename.h>編譯器從標(biāo)準(zhǔn)庫開始搜索filename,h;對(duì)于#include內(nèi)存的分配方式的分配方式有幾種?答:一、從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。例如全局變量。內(nèi)存的分配方式的分配方式有幾種?答:一、從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。例如全局變量。二、在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。2頭文件的作用是什么?一、通過頭文件來調(diào)用庫功能。在很多場(chǎng)合,源代碼不便(或不準(zhǔn))向用戶公布,只要向用戶提供頭文件和二進(jìn)制的庫即可。用戶只需要按照頭文件中的接口聲明來調(diào)用庫功能,而不必關(guān)心接口怎么實(shí)現(xiàn)的。編譯器會(huì)從庫中提取相應(yīng)的代碼。二、頭文件能加強(qiáng)類型安全檢查。如果某個(gè)接口被實(shí)現(xiàn)或被使用時(shí),其方式與頭文件中的聲明不一致,編譯器就會(huì)指出錯(cuò)誤,這?簡單的規(guī)則能大大減輕程序員調(diào)試、改錯(cuò)的負(fù)擔(dān)。3C++函數(shù)中值的傳遞方式有哪幾種?C++函數(shù)的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞。三、從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc或new申請(qǐng)任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問題也最多。5實(shí)現(xiàn)雙向鏈表刪除一個(gè)節(jié)點(diǎn)P,在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn),寫出這兩個(gè)函數(shù);〃刪除操作StatusListDelete_DuL(DuLinkList&L,inti,ElemType&e){if(!(p=GetElemP_DuL(L,i)))〃此處得到i位置的節(jié)點(diǎn)指針,如果有需要也得寫出具體函數(shù)實(shí)現(xiàn)returnERROR;e=p->data;p->prior->next=p->next;p->next->prior=p->pror;free(p);returnOK;}〃插入操作StatusListInsert_DuL(DuLinkList&L,inti,ElemType&e){if(!(p=GetElemP_DuL(L,i)))returnERROR;if(!(s=(DuLinkList)malloc(sizeof(DuLNode))))〃生成新節(jié)點(diǎn)returnERROR;s->data=e;s->prior=p;p->next->prior=s;p->next=s;s->next=p->next->next;returnOK;)6寫一個(gè)函數(shù),將其中的\t都轉(zhuǎn)換成4個(gè)空格。7Windows程序的入口是哪里?寫出Windows消息機(jī)制的流程.8如何定義和實(shí)現(xiàn)一個(gè)類的成員函數(shù)為回調(diào)函數(shù)?C++里面是不是所有的動(dòng)作都是main。引起的?如果不是,請(qǐng)舉例.比如全局變量的初始化,就不是由main函數(shù)引起的舉例:classA{};Aa; 〃a的構(gòu)造函數(shù)限執(zhí)行intmain(){}C++里面如何聲明constvoidf(void)函數(shù)為C程序中的庫函數(shù)(華為)11下列哪兩個(gè)是等同的intb;Aconstint*a=&b;Bconst*inta=&b;Cconstint*consta=&b;Dintconst*consta=&b;12內(nèi)聯(lián)函數(shù)在編譯時(shí)是否做參數(shù)類型檢查內(nèi)聯(lián)函數(shù)要做參數(shù)類型檢查, 這是內(nèi)聯(lián)函數(shù)跟宏相比的優(yōu)勢(shì)13三個(gè)float:a,b,c問值(a+b)+c==(b+a)+c (a+b)+c==(a+c)+b兩者都不行。在比較float或double時(shí),不能簡單地比較。由于計(jì)算誤差,相等的概率很低。應(yīng)判斷兩數(shù)之差是否落在區(qū)間(-e,e)內(nèi)。這個(gè)e應(yīng)比浮點(diǎn)數(shù)的精度大一個(gè)數(shù)量級(jí)。14把一個(gè)鏈表反向填空(lucent)voidreverse(test*head){test*pe=head;test*ps=head->next;while(ps){pe->next=ps->next;ps->next=head;head=ps;ps=pe->next;)}從第一個(gè)元素開始,ps指向他,將他(ps)指向頭節(jié)點(diǎn)(ps->next二head),將ps設(shè)為頭節(jié)點(diǎn)(head=ps;)操作下一個(gè)元素(ps=pe->next;)等于是依次將每個(gè)元素翻到原頭節(jié)點(diǎn)前面。15設(shè)id■個(gè)重采樣系統(tǒng),說明如何anti-alias16某個(gè)程序在一個(gè)嵌入式系統(tǒng)(200M的CPU,50M的SDRAM)中已經(jīng)最化了,換到另一個(gè)系統(tǒng)(300M的CPU,50M的SDRAM)中運(yùn)行,還需要優(yōu)化嗎?17.下面哪種排序法對(duì)12354最快aquicksortb.bublesortc.mergesort18.哪種結(jié)構(gòu),平均來講,獲取一個(gè)值最快binarytreehashtablestack19請(qǐng)問C++的類和C里面的struct有什么區(qū)別?class中默認(rèn)的成員訪問權(quán)限是private的,而struct中則是public的20請(qǐng)講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?析構(gòu)函數(shù)是特殊的類成員函數(shù),它沒有返回類型,沒有參數(shù),不能隨意調(diào)用,也沒有重載,只有在類對(duì)?象的生命期結(jié)束的時(shí)候,由系統(tǒng)自動(dòng)調(diào)用。有適放內(nèi)存空間的做用。虛函數(shù)是C++多態(tài)的一種表現(xiàn),使用虛函數(shù),我們可以靈活的進(jìn)行動(dòng)態(tài)綁定,當(dāng)然是以一定的開銷為代價(jià)。21全局變量和局部變量有什么區(qū)別?實(shí)怎么實(shí)現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?生命周期不同:全局變量隨主程序創(chuàng)建和創(chuàng)建,隨主程序銷毀而銷毀
局部變量在局部函數(shù)內(nèi)部,甚至局部循環(huán)體等內(nèi)部存在,退出就不存在;內(nèi)存中分配在全局?jǐn)?shù)據(jù)區(qū)使用方式不同:通過聲明后全局變量程序的各個(gè)部分都可以用到局部變量只能在局部使用:分配在棧區(qū)操作系統(tǒng)和編譯器通過內(nèi)存分配的位置來知道的,全局變量分配在全局?jǐn)?shù)據(jù)段并且在程序開始運(yùn)行的時(shí)候被加載。局部變量則分配在堆棧里面。一些寄存器的題目,主要是尋址和內(nèi)存管理等一些知識(shí)。8086是多少位的系統(tǒng)?在數(shù)據(jù)總線上是怎么實(shí)現(xiàn)的?多態(tài)。overload和override的區(qū)別。overload是前載,幣:載是一種參數(shù)多態(tài)機(jī)制,即代碼通過參數(shù)的類型或個(gè)數(shù)不同而實(shí)現(xiàn)的多態(tài)機(jī)制。是一種靜態(tài)的綁定機(jī)制(在編譯時(shí)已經(jīng)知道具體執(zhí)行的是哪個(gè)代碼段)。ovebide是覆蓋。覆蓋是?種動(dòng)態(tài)綁定的多態(tài)機(jī)制。即在父類和子類中同名元素(如成員函數(shù))有不同的實(shí)現(xiàn)代碼。執(zhí)行的是哪個(gè)代碼是根據(jù)運(yùn)行時(shí)實(shí)際情況而定的。重載Overload特點(diǎn)publicboolwithdraw(doubleamt,stringname)publicdoublewithdraw(doubleamt)1、方法名必須相同2、參數(shù)列表必須不相同3、返回值類型可以不相同注意:override存在于繼繼承的關(guān)系類中。覆寫Override特點(diǎn)(三相同):publicoverrideboolwithdraw(...)1,方法名相同2、參數(shù)列表相同3、返回值類型相同注意:存在于同一類中,但是只有虛方法和抽象方法才能被覆寫.?Sony筆試題>>.完成下列程序**.*.^include<stdio.h>#defineN8intmain(){inti;intj;intk;
return0;26完成程序,實(shí)現(xiàn)對(duì)數(shù)組的降序排序#include<stdio.h>TOC\o"1-5"\h\zvoidsort( );intmain()(intarray[]={45,56,76,234,1,34,23,2,3};〃數(shù)字任〃意給出sort( );return0;}voidsort( )27費(fèi)波那其數(shù)列,LL2,3,5……編寫程序求第十項(xiàng)。可以用遞歸,也可以用其他方法,但要說明你選擇的理由。#include<stdio.h>intPheponatch(int);intmain(){printf(*The10this%d*,Pheponatch(10));return0;}intPheponatch(intN)28下列程序運(yùn)行時(shí)會(huì)崩潰,請(qǐng)找出錯(cuò)誤并改正,并且說明原因。#include<stdio.h>#include<malloc.h>typedefstruct{TNode*left;TNode*right;intvalue;}TNode;TNode*root=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;)else(TNode*temp;temp=root;while((N>=temp.value&&temp,left!=NULL)|I(N<temp.value&&temp,right!=NULL)){while(N>=temp.value&&temp,left!=NULL)temp=temp.left;while(N<temp,value&&temp,right!=NULL)temp=temp.right;)if(N>=temp.value)temp.left=NewNode;elsetemp,right=NewNode;return;})29.AclassBnetworkontheinternethasasubnetmaskof,whatisthemaximumnumberofhostspersubnet.一B類地址的子網(wǎng)掩碼是,問每個(gè)子網(wǎng)內(nèi)的最大主機(jī)數(shù)子網(wǎng)掩碼與iP相與得到子網(wǎng)號(hào),化成二進(jìn)制11111111.11111111.11110000.00000000,即有12個(gè)“0”,212-2=4096-2=4094a.240b.255c.4094d.6553.Whatisthedifference:betweeno(logn)ando(logn^2),wherebothlogarithems(對(duì)數(shù))havebase2.a.o(logn2)isbiggerb.o(logn)isbiggerc.nodifference.Foraclasswhatwouldhappenifwecallaclass'sconstructorfromwiththesameclass'pilationerrorb.linkingerrorc.stackoverflowd.noneoftheabove,"new“inc++isa:A.libraryfunctionlikemallocincB.keywordC.operatorD.noneoftheabovemalloc是庫函數(shù),不在編譯器控制范圍之內(nèi);new是運(yùn)算符,在編譯器控制范圍之內(nèi)。調(diào)用malloc時(shí),從堆中申請(qǐng)內(nèi)存;調(diào)用new時(shí),從堆中申請(qǐng)內(nèi)存并為內(nèi)存調(diào)用構(gòu)造函數(shù)。
.Whichofthefollowinginformationisnotcontainedinaninode.a.fileownerb.filesizec.filenamed.diskaddress.What'sthenumberofcomparisonsintheworstcasetomergetwosortedlistscontainingnelementseach.a.2nb.2n-lc.2n+ld.2n-2a.2nb.2n-lc.2n+ld.2n-2.TimecomplexityofnalgorithmT(n),wherenistheinputsize,isT(n)=T(n-1)+l/nifn>lotherwise1theorderofthisalgorithmis.c.n2c.n2.ThenumberofPsinthebinaryrepresentationof3*4096+15*256+5*16+3are.d.12c.10d.12.設(shè)計(jì)函數(shù)intatoi(char*s)i=(j=4,k=8,1=16,m=32);printf("%d”,i);輸出是多少?.解釋局部變量、全局變量和靜態(tài)變量的含義。.解釋堆和棧的區(qū)別。在傳統(tǒng)的C中堆和棧實(shí)際是一塊物理內(nèi)存,堆主要用來動(dòng)態(tài)分配內(nèi)存,從堆棧內(nèi)存的低端向上分配;而棧主要用來傳遞函數(shù)參數(shù)、返回值和局部參數(shù)內(nèi)存分配,是從堆棧內(nèi)存的高端向下分配,俗稱壓棧和出棧;堆是動(dòng)態(tài)分配,比如用new,maHoc分配,需要手工釋放,不然會(huì)導(dǎo)致memo”leak,棧是靜態(tài)分配,比如函數(shù)調(diào)用是需要分配堆棧,但堆棧能自動(dòng)釋放..論述含參數(shù)的宏與函數(shù)的優(yōu)缺點(diǎn)。宏是編譯期的,函數(shù)是運(yùn)行期的;宏不是實(shí)體,而函數(shù)是?個(gè)可尋址的實(shí)體;宏只是編譯期替換,在程序里每遇到S(a,b),就用a*b代替,a和b兩個(gè)實(shí)體并沒有由宏實(shí)際產(chǎn)生,而函數(shù)S會(huì)在棧中定義兩個(gè)對(duì)象a和b。宏沒有生存期、作用域之類的概念,而函數(shù)就有。.以下三條輸出語句分別輸出什么?[C易]charstrl[]charstr2[]constcharstr3[]="abc";constcharstr4[]="abc";constchar*str5="abc";constchar*str6="abc";cout ? boolalpha ? ( strl==str2 ) ? endl; // 輸出什么?cout ? boolalpha ? ( str3==str4 ) ? endl; // 輸出什么?cout ? boolalpha ? ( str5==str6 ) ? endl; // 輸出什么?答:分別輸出false,false,true。strl和str2都是字符數(shù)組,每個(gè)都有其自己的存儲(chǔ)區(qū),它們的值則是各存儲(chǔ)區(qū)首地址,不等;str3和str4同上,只是按const語義,它們所指向的數(shù)據(jù)區(qū)不能修改。str5和str6并非數(shù)組而是字符指針,并不分配存儲(chǔ)區(qū),其后的“abc”以常量形式存于靜態(tài)數(shù)據(jù)區(qū),而它們自己僅是指向該區(qū)首地址的指針,相等。.非C++內(nèi)建型別A和B,在哪幾種情況下B能隱式轉(zhuǎn)化為A?[C++中等]答:class B : publicA{ } //B公有繼承自A,可以是間接繼承的class B { operatorA( ); } //B實(shí)現(xiàn)了隱式轉(zhuǎn)化為A的轉(zhuǎn)化class A { A(constB& ); } //A實(shí)現(xiàn)了non-explicit的參數(shù)為B(可以有其他帶默認(rèn)值的參數(shù))構(gòu)造函數(shù)A&operator=(constA&);//賦值操作,雖不是正宗的隱式類型轉(zhuǎn)換,但也可以勉強(qiáng)算一個(gè).以下代碼中的兩個(gè)sizeof用法有問題嗎?[C易]voidUppercase(charstr[])//將str中的小寫字母轉(zhuǎn)換成大寫字母{for(sizeti=0;i<sizeof(str)/sizeof(str[0]);++i)if(*a*<=str[i]&&str[i]<=,z*)str[i]-=('a';)charstr[]="aBcDe”;cout<<"str字符長度為:"<<sizeof(str)/sizeof(str[0])<<endl;UpperCase(str);cout?str?endl;答:函數(shù)內(nèi)的sizeof有問題。根據(jù)語法,sizeof如用于數(shù)組,只能測(cè)出靜態(tài)數(shù)組的大小,無法檢測(cè)動(dòng)態(tài)分配的或外部數(shù)組大小。函數(shù)外的str是一個(gè)靜態(tài)定義的數(shù)組,因此其大小為6,函數(shù)內(nèi)的str實(shí)際只是一個(gè)指向字符串的指針,沒有任何額外的與數(shù)組相關(guān)的信息,因此sizeof作用于上只將其當(dāng)指針看,一個(gè)指針為4個(gè)字節(jié),因此返回4。.以下代碼有什么問題?[C難]voidchar2Hex(charc)//將字符以16進(jìn)制表示(charch=c/0xl0+'O';if(ch>'9')ch+=('A'-'9'T);charcl=c%0xl0+'O';if(cl>'9')cl+=('A',9'T);cout<<ch?cl?*';}charstr[]="Ilove中國”;for(size_ti=0;i<strlen(str);++i)char2Hex(str[i]);cout?endl;.以下代碼有什么問題?[C++易]structTest{Test(int){}Test(){}voidfun(){});voidmain(void)(Testa(l);fun();Testb();fun();}答:變量b定義出錯(cuò)。按默認(rèn)構(gòu)造函數(shù)定義對(duì)象,不需要加括號(hào)。.以下代碼有什么問題?[C++易]cout? ?endl;答:三元表達(dá)式“?:”問號(hào)后面的兩個(gè)操作數(shù)必須為同一類型。以下代碼能夠編譯通過嗎,為什么?[C++易]unsignedintconstsizel=2;charstrl[sizel];unsignedinttemp=0;cin?temp;unsignedintconstsize2=temp;charstr2[size2];答:str2定義出錯(cuò),size2非編譯器期間常量,而數(shù)組定義要求長度必須為編譯期常量。.以下代碼中的輸出語句輸出0嗎,為什么?[C++易]structCLS(intm_i;CLS(inti):m_i(i){}CLS()(CLS(0);});CLSobj;cout?obj.m_i?endl;答:不能。在默認(rèn)構(gòu)造函數(shù)內(nèi)部再調(diào)用帶參的構(gòu)造函數(shù)屬用戶行為而非編譯器行為,亦即僅執(zhí)行函數(shù)調(diào)用,而不會(huì)執(zhí)行其后的初始化表達(dá)式。只有在生成對(duì)象時(shí).,初始化表達(dá)式才會(huì)隨相應(yīng)的構(gòu)造函數(shù)一起調(diào)用。.C++中的空類,默認(rèn)產(chǎn)生哪些類成員函數(shù)?[C++易]答:classEmpty{public:Empty(); 〃缺省構(gòu)造函數(shù)Empty(constEmpty&); //拷貝構(gòu)造函數(shù)"Empty(); 〃析構(gòu)函數(shù)Empty&operator=(constEmptyft);//賦值運(yùn)算符Empty*operatorfe(); //取址運(yùn)算符constEmpty*operator&()const; //取tit運(yùn)算符const};.以下兩條輸出語句分別輸出什么?[C++難]floata=1.Of;cout?(int)a?endl;cout?(int&)a?endl;cout?boolalpha?((int)a==(int&)a)?endl;//輸出什么?floatb=0.Of;cout?(int)b?endl;cout?(int&)b?endl;cout?boolalpha?((int)b==(int&)b)?endl;//輸出什么.以下反向遍歷array數(shù)組的方法有什么錯(cuò)誤?[STL易]vectorarray;array.push_back(1);array.push_back(2);array.push_back(3);for(vector::size_typei=array.size()-1;i>=0;-i)//反向遍歷array數(shù)組(cout<<array[i]?endl;答:首先數(shù)組定義有誤,應(yīng)加上類型參數(shù):vector<int>array。其次vector::size_type被定義為unsignedint,即無符號(hào)數(shù),這樣做為循環(huán)變量的i為0時(shí)再減1就會(huì)變成最大的整數(shù),導(dǎo)致循環(huán)失去控制。.以下代碼有什么問題?[STL易]typedefvectorIntArray;IntArrayarray;array.push_back(1);array.push_back(2);array.push_back(2);array.push_back(3);//刪除array數(shù)組中所有的2for(IntArray::iteratoritor=array。begin();itor!=array.end();++itor){if(2==*itor)array,erase(itor);}答:同樣有缺少類型參數(shù)的問題。另外,每次調(diào)用“array.erase(itor);",被刪除元素之后的內(nèi)容會(huì)自動(dòng)往前移,導(dǎo)致迭代漏項(xiàng),應(yīng)在刪除一項(xiàng)后使itor一,使之從已經(jīng)前移的下一個(gè)元素起繼續(xù)遍歷。.寫一個(gè)函數(shù),完成內(nèi)存之間的拷貝。[考慮問題是否全面]答:void*mymemcpy(void*dest,constvoid*src,size_tcount)(char*pdest=static_cast<char*>(dest);constchar*psrc=static_cast<constchar*>(src);if(pdest>psrc&&pdest<psrc+cout)能考慮到這種情況就行了|for(size_ti=count-1;i!=-l;-i)
pdest[i]=psrc[i];)else{for(size_ti=0;i<count;++i)pdest[i]=psrc[i];}returndest;)intmain(void)(charstr[]="0123456789”;mymemcpy(str+1,str+0,9);cout<<str?endl;system("Pause");return0;54線程與進(jìn)程的區(qū)別55:請(qǐng)你分別劃劃OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)圖,和TCP/IP的五層結(jié)構(gòu)圖?56:請(qǐng)你詳細(xì)的解釋一下IP協(xié)議的定義,在哪個(gè)層上面,主要有什么作用?TCP與UDP呢?57:請(qǐng)問交換機(jī)和路由器分別的實(shí)現(xiàn)原理是什么?分別在哪個(gè)層次上面實(shí)現(xiàn)的?58:請(qǐng)問C++的類和C里面的struct有什么區(qū)別?59:請(qǐng)講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?60:全局變量和局部變量有什么區(qū)別?實(shí)怎么實(shí)現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?61:一些寄存器的題目,主要是尋址和內(nèi)存管理等一些知識(shí)。62:8086是多少位的系統(tǒng)?在數(shù)據(jù)總線上是怎么實(shí)現(xiàn)的?73對(duì)于C++中類(class)與結(jié)構(gòu)(struct)的描述正確的為:A,類中的成員默認(rèn)是private的,當(dāng)是可以聲明為public,private和protected,結(jié)構(gòu)中定義的成員默認(rèn)的都是public;B,結(jié)構(gòu)中不允許定義成員函數(shù),當(dāng)是類中可以定義成員函數(shù);C,結(jié)構(gòu)實(shí)例使用malloc()動(dòng)態(tài)創(chuàng)建,類對(duì)象使用new操作符動(dòng)態(tài)分配內(nèi)存;D,結(jié)構(gòu)和類對(duì)象都必須使用new創(chuàng)建;E,結(jié)構(gòu)中不可以定義虛函數(shù),當(dāng)是類中可以定義虛函數(shù).F,結(jié)構(gòu)不可以存在繼承關(guān)系,當(dāng)是類可以存在繼承關(guān)系.答:A,D.F74,兩個(gè)互相獨(dú)立的類:ClassA和ClassB,都各自定義了非景泰的公有成員函數(shù)PublicFunc()和非靜態(tài)的私有成員函數(shù)PrivateFuncO;現(xiàn)在要在ClassA中增加定義一個(gè)成員函數(shù)ClassA::AdditionalPunction(ClassAa,ClassBb);則可以在AdditionalPunction(ClassAx,ClassBy)的實(shí)現(xiàn)部分(函數(shù)功能體內(nèi)部)出現(xiàn)的合法的表達(dá)是最全的是:x.PrivateFunc();x.PublicFunc();y.PrivateFuncO;y.PublicFuncO;x.PrivateFunc();x.PublicFunc();y.PublicFunc();x.PrivateFunc();y.PrivateFunc();y.PublicFuncO;x.PublicFuncO;y.PublicFuncO;答:BC++程序下列說法正確的有:A,對(duì)調(diào)用的虛函數(shù)和模板類都進(jìn)行遲后編譯.B,基類與子類中函數(shù)如果要構(gòu)成虛函數(shù),除了要求在基類中用virtual聲名,而且必須名字相同且參數(shù)類型相同返回類型相同C,重載的類成員函數(shù)都必須要:或者返回類型不同,或者參數(shù)數(shù)目不同,或者參數(shù)序列的類型不同.D,靜態(tài)成員函數(shù)和內(nèi)聯(lián)函數(shù)不能是虛函數(shù),友員函數(shù)和構(gòu)造函數(shù)也不能是虛函數(shù),但是析構(gòu)函數(shù)可以是虛函數(shù).答:AC++中的類與結(jié)構(gòu)的區(qū)別?77,構(gòu)造函數(shù)和析構(gòu)函數(shù)是否可以被重載,為什么?78,一個(gè)類的構(gòu)造函數(shù)和析構(gòu)函數(shù)什么時(shí)候被調(diào)用,是否需要手工調(diào)用?幾道題目及自做答案熱忱期待高手的答案,我不怕丑!一天做幾個(gè),把答案貼出來,請(qǐng)高手指正!1ftinclude**filename,h"和#include〈filenam
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 自卸汽車運(yùn)碎石土施工方案
- 2025年金屬復(fù)合材項(xiàng)目發(fā)展計(jì)劃
- 黑龍江水下封堵施工方案
- 水泥屋頂光伏施工方案
- 河北立體綠化施工方案
- 數(shù)控加工工藝與編程技術(shù)基礎(chǔ) 教案 模塊三 項(xiàng)目三 自動(dòng)編程(1-2)
- 2025年山東省聊城市高三下學(xué)期一模生物試題(原卷版+解析版)
- 智研咨詢發(fā)布:2025年中國制氫催化電極行業(yè)市場(chǎng)全景調(diào)查及投資前景預(yù)測(cè)報(bào)告
- 【市占率證明權(quán)威指南】制藥裝備行業(yè)市占率全解(智研咨詢發(fā)布)
- 低碳技術(shù)的研發(fā)與應(yīng)用策略
- 機(jī)電控制與可編程序控制器課程設(shè)計(jì)報(bào)告
- 簡版?zhèn)€人征信報(bào)告模板
- 森林防火主題教育班會(huì)PPT
- 船舶安檢缺陷處理建議表籍國內(nèi)航行海船
- 輻照交聯(lián)電線電纜型號(hào)說明
- 公路工程決算編制辦法(交公路發(fā)2004-507號(hào))附表
- 礦山機(jī)械無人駕駛項(xiàng)目可行性研究報(bào)告模板
- 預(yù)充氣競技步槍 標(biāo)準(zhǔn)A4靶紙
- 避免同業(yè)競爭承諾函
- 產(chǎn)品批量質(zhì)量事故追責(zé)管理規(guī)范
- VSC中壓真空接觸器無法分閘的原因分析及其對(duì)策
評(píng)論
0/150
提交評(píng)論