版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C++筆試題.多態(tài)類中的虛函數(shù)表是Compile-Time,還是Run-Time時(shí)建立的?答案:虛擬函數(shù)表是在編譯期就建立了,各個(gè)虛擬函數(shù)這時(shí)被組織成了一個(gè)虛擬函數(shù)的入口地址的數(shù)組.而對象的隱藏成員一虛擬函數(shù)表指針是在運(yùn)行期一也就是構(gòu)造函數(shù)被調(diào)用時(shí)進(jìn)行初始化的,這是實(shí)現(xiàn)多態(tài)的關(guān)鍵.2.將一個(gè)1M-10M的文件,逆序存儲(chǔ)到另ー個(gè)文件,就是前ー個(gè)文件的最后ー個(gè)字符存到新文件的第一個(gè)字符,以此類推。〃實(shí)現(xiàn)對ー個(gè)文本文件內(nèi)容的反向顯示。#include<stdio.h>#include<stdlib.h>voidmain(){charc;FILE*fp;if((fp=fopen("test.txt","r"))==NULL)〃以讀方式打開文本文件{printf("CannotopenfileAn");exit(1);)fseek(fp,OL,2);〃定位文件尾。注意此時(shí)并不是定位到文件的最后一字符,〃而是在定位文件最后ー個(gè)字符之后的位置while((fseek(fp,-1L,1))!=-1)/Z相對當(dāng)前位置退后ー個(gè)字節(jié)(c=fgetc(fp);putchar(c); 〃如果定位成功,讀取當(dāng)前字符并顯示/?讀取字符成功,文件指針會(huì)自動(dòng)移到下一字符位置?/if9==へ叫/?若讀入是'n字符7fseek(fp,-2L,1);/*由于DOS在文本文件中要存回車OxOd和換7/?行0x0a兩個(gè)字符,故要向前移動(dòng)兩個(gè)字節(jié)7elsefseek(fp,-1L,1);/?文件指針向前移動(dòng)ー個(gè)字節(jié),使文7}/?件指針定位在剛剛讀出的那個(gè)字符7fclose(fp);/*操作結(jié)朿關(guān)閉文件7)5.給ー個(gè)字符串、例如“ababc”要求返回“ab”.因?yàn)椤癮b”連續(xù)重復(fù)出現(xiàn)且最長。 用C/C++語言寫ー函數(shù)完成該算法,給出復(fù)雜度從對ー個(gè)字符開始,假設(shè)其為最長的串的第一個(gè),向后查找下ー個(gè)與它相同的字符,確定單循環(huán)的長度,再驗(yàn)證是否是連續(xù)出現(xiàn)的(類似于循環(huán)節(jié)),如后面不重復(fù),則向后取ー個(gè)字符,重熨開始判斷,當(dāng)取得一個(gè)循環(huán)節(jié)并且后面重復(fù)時(shí),記錄其總長度,6.對序列1、1、2、3、5、8、面的Fab..?數(shù)列都互質(zhì),給出I#include<stdio.h>#include<vector>#include<iostream>usingnamespacestd;voidfindFib(intk){vector<int>fibl;vector<int>fib2;fibl.push_back(l);fibl.push_back(l);fibl.push_back(2);fib2.push_back(2);向后開繼續(xù)判斷,如找到更長的,則輸出最長的,否則,把第一個(gè)結(jié)果輸出。13。。。。是Fab..數(shù)列,2、3、5、13...是Fab..質(zhì)數(shù)數(shù)列,因?yàn)樗麄兣c自己前r,返回比k小的Fab..質(zhì)數(shù)boolfound=false;intlen=fibl.size();intf=0;while(fib1[len-l]<k)(f=fibl[len-2]+fibl[len-1];fibl.push_back(f);len++;)for(inti=2;i<fib1.size。ーl;i++)(found=true;
)printf(An");)printf(An");}voidmain(){intk;printf('Inputk\nn);scanf("%d",&k);while(k>2)(findFib(k);printf("inputk\n");scanf("%d",&k);if(fibl[i]%fib2|j]==0)(found=false;break;}//endif}//endfor2if(found)(fib2.push_back(fibl[i]);)}//endfor1for(i=0;i<fib2.size();i++)(printf(M%dn,fib2[i]);.變量的聲明和定義有什么區(qū)別?聲明是向編譯器介紹名字ーー標(biāo)識(shí)符。它告訴編譯器’’這個(gè)函數(shù)或變量在某處可找到,它的模樣象什么而定義是說:"在這里建立變量"或''在這里建立函數(shù)”。它為名字分配存儲(chǔ)空間。無論定義的是函數(shù)還是變量,編譯器都要為它們在定義點(diǎn)分配存儲(chǔ)空間。對于變量,編譯器確定變量的大小,然后在內(nèi)存中開辟空間來保存其數(shù)據(jù),對于函數(shù),編譯器會(huì)生成代碼,這些代碼最終也要占用一定的內(nèi)存。在C和C++中,可以在不同的地方聲明相同的變量和函數(shù),但只能有一個(gè)定義(有時(shí)這稱為ODR,單一定義規(guī)則)。。。定義也可以是聲明,如果有intx;,之前編譯器未發(fā)現(xiàn)標(biāo)識(shí)符x,編譯器則把這ー標(biāo)識(shí)符看成是定義并立即為它分配存儲(chǔ)空間。對“變量聲明”的解釋向來模糊且自相矛盾。。。函數(shù)聲明包括函數(shù)類型、函數(shù)名、參數(shù)列表和一個(gè)分號(hào),這些信息足以編譯器認(rèn)出它是一個(gè)函數(shù)聲明并可識(shí)別出這個(gè)函數(shù)的外部特征。由此推斷,變量聲明應(yīng)是類型標(biāo)識(shí)后面跟ー個(gè)標(biāo)識(shí)符。如inta;但這產(chǎn)生了一個(gè)矛盾,這段代碼有足夠的信息讓編譯器為之分配存儲(chǔ)空間,而且編譯器也確實(shí)給之分配了存儲(chǔ)空間。要解決這個(gè)問題,對于C和C++需要一個(gè)關(guān)鍵字來說明“這是一個(gè)聲明,它的定義在別的地方”,這個(gè)關(guān)鍵字就是extern,它表示變量是在文件以外定義的,或在文件后面定義的。在變量定義前加extern表示聲明ー個(gè)變量但不定義它,如:extern inta;extern也可用于函數(shù)聲明,如:extern intfund(int length,int width);但由于沒有函數(shù)體,編譯器必把它當(dāng)成聲明而非定義,extern對于函數(shù)來說是多余的、可選的。C語言的設(shè)計(jì)者并不要求函數(shù)聲明使用extem,這可能有些令人遺憾,如果函數(shù)聲明也要求用extern,那么形式上與變量聲明更加一致了,從而減少了混亂(但這就需要更多的輸入,這也許能解種為什么不要求函數(shù)聲明使用extem的原因)。。。.請寫出下面代碼在32位平臺(tái)上的運(yùn)行結(jié)果,并說明sizeof的性質(zhì):#include<stdio.h>#include<stdlib.h>intmain(void)chara[30];char*b=(char*)malloc(20*sizeof(char));TOC\o"1-5"\h\zprintf(,,%d\n,',sizeof(a)); //30printf(M%d\nn,sizeof(b)); //4printf(,'%d\n",sizeof(a[3])); //Iprintf("%d\n,',sizeof(b+3)); //4printf(H%d\nM,sizeof(*(b+4))); //Ireturn0;}sizeof就是要求一種數(shù)據(jù)(類型)所占內(nèi)存的字節(jié)數(shù).對于4.1中的s和psizeof(s)應(yīng)為6,而sizeof(p)應(yīng)為ー個(gè)"指針"的大小.13.我們需要編寫ー個(gè)圖形相關(guān)的應(yīng)用程序,需要處理大量圖形(Shape)信息,圖形有矩形(Rectangle),正方形(Square),圓形(Circle)等種類,應(yīng)用需要計(jì)算這些圖形的面積,并且可能需要在某個(gè)設(shè)備上進(jìn)行顯示(使用在標(biāo)準(zhǔn)輸出上打印信息的方式做為示意)。a)請用面向?qū)ο蟮姆椒▽σ陨蠎?yīng)用進(jìn)行設(shè)計(jì),編寫可能需要的類b)請給出實(shí)現(xiàn)以上應(yīng)用功能的示例性代碼,從某處獲取圖形信息,并且進(jìn)行計(jì)算和繪制c)如果你的Square繼承自Rectangle,請給出理由,如果不是,請給出理由,并且請比較兩種方式的優(yōu)劣d)請問你所編寫的類,在如下代碼中會(huì)有何表現(xiàn),請解釋voidtest_rectangle_area(Rectangle&r)(r.set_width(10);r.set_height(15);assert(r.area()==150);.寫ー個(gè)程序,把ー個(gè)100以內(nèi)的自然數(shù)分解因數(shù)。(自然數(shù)分解因數(shù)就是將一個(gè)自然數(shù)分解為幾個(gè)素?cái)?shù)的乘積,提示,由于該數(shù)不是很大,所以可以將質(zhì)數(shù)保存在數(shù)組中,以加快計(jì)算速度)分解質(zhì)因數(shù)的算法2005-03-13RainFly#include<iostream.h>ttinclude<math.h>#include<stdio.h>intmain(){inti=2,N;coutくく”請輸入ー個(gè)整數(shù):";cin?N;boolfcontinue=false;boolfound=false;while(l) 〃永遠(yuǎn)循環(huán){intt=(int)sqrt(N);printf("sqrt(%d)=%d\n",N,t);for(;i<=sqrt(N);i++){printf("i=%d,sqrt(%d)=%d\n\n",i,N,t);if(N%i==0)〃i肯定是質(zhì)數(shù),N肯定不是質(zhì)數(shù)(fcontinue=true;〃如果找到ー個(gè)質(zhì)數(shù),則可以繼續(xù)分解printf(〃發(fā)現(xiàn)ー個(gè)質(zhì)數(shù),繼續(xù)分解、n〃);found=true;〃至少發(fā)現(xiàn)ー個(gè)質(zhì)數(shù)printf("在本次中,至少發(fā)現(xiàn)ー個(gè)質(zhì)數(shù)\n");coutくくiくく"X"くくend1;N=N/i;printfCN=%d\n”,N);break;if(i>sqrt(N))printf(*forloopisfinished'n");)if(fcontinue)(printf("跳過后面的部分,開始下一次分解\n");fcontinue=false;continue;)if(found){printf("在前面中,發(fā)現(xiàn)質(zhì)數(shù),在此輸出'n");cout<<N<<endl;)elsecoutくくNくく”是個(gè)質(zhì)數(shù),不能分解"くくendl;printf("中斷循環(huán),結(jié)束'n");break;)return0;}.編寫ー個(gè)Identify的分配、釋放的函數(shù),為1—10000之間的自然數(shù)。.分別實(shí)現(xiàn)itoa和atoi..Considerthefollowingcode:#include<stdio.h>4include<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越界,用〇把buf開始的第4(0開始)個(gè)字節(jié)覆蓋掉了.而x86是LSB排列順序,所以真好覆蓋了i的內(nèi)個(gè)數(shù)字1.所以顯示出數(shù)字0.16位情況同樣分析即可.第2問?20.說出結(jié)果???#include<stdio.h>main()FILE*fp;inti,a[4]={l,2,3,4},b;fp二fopen("data.dat","wb");〃這里幫忙解釋一下for(i=0;i<4;i++)fwrite(&a[i],sizeof(int),1,fp)"/這里也幫忙看一下fclose(fp);fp=fopen("data,dat",*rb");fseek(fp,-2L*sizeof(int),SEEK_END)ノ/還有這里fread(&b,sizeof(int),1,fp);〃這里還有也看一下fclose(fp);printf("b=%d\n",b);}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)釋放4)char**p,a[16][8]:問:p=a是否會(huì)導(dǎo)致程序在以后出現(xiàn)問題?為什么?參考:這個(gè)不會(huì)導(dǎo)致出現(xiàn)問題,但是要注意p的使用,如等價(jià)的為*(*(p+l)+2)而不是?(p+11),會(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ū)又包括哪些部分?參考:對于ー個(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ū),即堆棧中。程序通過堆棧的基地址和偏移量來訪問本地變量。24.Assignment2:PictureProcessingUseC++,Java,orsimilarlanguagesor/andanymiddlewaresuchasEJBandJ2EEtoprocessapicturewithahighresolution(3MegaPixelsforexample).Usesomemethodologiestodegradetheresolutionofthepicturetomakeitquickerforbrowsing.Thendividethedegradedpictureinto9sectorsequally.Clickanyofthe9sectorswillresultadetailedpictureforthissectorwiththesameresolutionasthatoftheoriginalpicture.Thisassignmentisdesignedforyoutodemonstrateyourabilitytohandlepictures..要開辟P1,P2,P3,P4內(nèi)存來做緩沖,大小自定,但這四個(gè)緩沖的大小要一樣,并且是連續(xù)的.有一浮點(diǎn)型數(shù)組ん用C語言寫ー函數(shù)實(shí)現(xiàn)對浮點(diǎn)數(shù)組A進(jìn)行降序排序,并輸出結(jié)果,要求要以數(shù)組A作為函數(shù)的入口.(建議用冒泡排序法)voidBubbleSort(doublearr[],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一)〃對當(dāng)前無序區(qū)R[i..n]自下向上掃描if(arr[j+l]>arr[jD{〃交換記錄arr[0]=arr|j+1]; 〃R[0]不是哨兵,僅做暫存單元arr|j4-l]=arr[j];arr[j]=aiT[O];exchange=1; 〃發(fā)生了交換,故將交換標(biāo)志置為真)if([exchange) 〃本趟排序未發(fā)生交換,提前終止算法return;} //endfor(外循環(huán))).找錯(cuò):Sinclude<string.h>#include<stdio.h>classBase{private:char*name;public:Base(char*className)(name=newchar[strlen(className)];strcpy(name,className);}、Base(){deletename;}char*copyName()|charnewname[256];strcpy(newname,name);returnnewname;)char*getName(){returnname;}staticvoidprint(Basebase){printf("name:%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());printfC'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(shex);if(len>8)returnFALSE;mid=0;idee=0;for(i=O;i<len;i++)(if(shex[i]>='0'&&shex[i]<=,9')mid=shex[i]-'O\elseif(shex[i]>='a'&&shex[i]<=T)mid=shex[i]-'a'+10;elseif(shex[i]>=,A'&&shex[i]<=F)mid=shex[i]-'A'+10;elsereturnFALSE;mid?=((len-i-l)?2);/Z移位表示變?yōu)?的n次方倍idee=idc+mid;)returnTRUE;).編寫ー個(gè)函數(shù)將一條字符串分成兩部分,將前半部分按ASCII碼升序排序,后半部分不變,(如果字符串是奇數(shù)則中間的字符不變,)最后再將前后兩部分交換,然后將該字符串輸出,測試字符串“ADZDDJKJFIEJHGI”找錯(cuò)#defineMAX_SRM256DSNget_SRM_no(){staticintSRMno;intI:for(I=0;I<MAX_SRM;I++)(if(MY_SRM.state==IDLE){break;})if(I>=MAX_SRM)return(NULL_SRM);elsereturnSRMno;)簡單的閱讀一下這個(gè)函數(shù),可以大概的可以猜測出這個(gè)函數(shù)的功能是分配ー個(gè)空閑的SRAM塊。方法:從上次分配的RAM塊后的RAM塊開始檢測SRAM每個(gè)RAM塊,看是否是IDLE狀態(tài),如果是IDLE則返回當(dāng)前的RAM塊的號(hào)SRM-no。如果所有的RAM塊都不是IDLE狀態(tài),則意味著無法分配ー個(gè)RAM給函數(shù)調(diào)用者,返回?個(gè)表示沒有RAM可分配的標(biāo)志(NULL_SRM)。經(jīng)過上面的分析,則這里可以知道,這個(gè)函竅的錯(cuò)誤是for循環(huán)里面沒有給SRM_n。這個(gè)變量累加I。34.intfunc(inta){intb;switch(a){case1: b=30;b=20;b=16;b=0;)returnb;)則func(l)二035:inta[3];a[0]=0;a[l]=l;a[2]=2;int*p,*q;p=a;q=&a[2];則a[q-p]=?36.定義int**a[3][4],則變量占有的內(nèi)存空間為:—4837.編寫ー個(gè)函數(shù),要求輸入年月日時(shí)分秒,輸出該年月日時(shí)分秒的下一秒。如輸入2004年12月31日23時(shí)59分59秒,則輸出2005年1月1日〇時(shí)〇分。秒。.寫ー個(gè)函數(shù),判斷ー個(gè)int型的整數(shù)是否是2的基,即是否可以表示成2~X的形式(不可以用循環(huán))我只知道是用遞推,大概寫了一下,如下:intIsTwoPow(ints){if(s-l)returnFALSE;s=s>>1;if(s>l)IsTwoPow(s);return(s==l)?TRUE:FALSE;〃大概是這個(gè)意思,但是這一句似乎不該這么返回!)A,B從ー堆玻璃球(共100個(gè))里向外拿球,規(guī)則如下:(DA先拿,然后一人一次交替著拿;(2)每次只能拿1個(gè)或2個(gè)或4個(gè);(3)誰拿最后ー個(gè)球,誰就是最后的失敗者;問A,B誰將是失敗者?寫出你的判斷步驟。.已知:無序數(shù)組,折半查找,各元素值唯一。函數(shù)原型是:Binary_Seach(intarray[],intiValue,intiCount)array是數(shù)組,在里面用折半查找的方法找等于iValue的值,找到返回1否則0,iCount是元素個(gè)數(shù)41.統(tǒng)計(jì)一個(gè)字符串中字符出現(xiàn)的次數(shù)100位以上的超大整數(shù)的加法(主要考慮數(shù)據(jù)結(jié)構(gòu)和加法的實(shí)現(xiàn))對如下電文:"CASTCASTSATATATASA”給出Huffman編碼。int(*(*f)(int,int))(int)表示什么含義?afunctionpointeritpointstoafunctionthattakestwoargumentsandreturnanotherfunctionpointerthatisHint(*)(int)Mx=x+l,x+=l,x++,為這三個(gè)語句的效率排序。并說明為什么。中綴表達(dá)式A-(B+C/D)*E的后綴形式是什么?47.structS1{charc;inti;);sizeof(SI)=?classX{public:X();virtual'X();voidmyMemberFunc();staticvoidmyStaticFunc();virtualvoidmyVirtualFuncO;private:inti;char*pstr;chara;)sizeof(X)=?.找出兩個(gè)字符串中最大子字符串,如"abractyeyt","dgdsaeactyey”的最大子串為"actyet”#include"stdio.h" char*pl,*p2,*ql,*q2,*destp;char*maxsubstr(char*strl,char*str2) char*substr;{ intmax=0,len;
pl=strl;while(*pl!='')(ql=str2;while(*ql!='')(len=0;p2=pl;q2=ql;while((*p2!='')&&(*q2!=''))(if(*p2==*q2)(p2++;q2++;len++;}elsebreak;}if(len>max)(.有一百個(gè)整數(shù),其中有負(fù)數(shù),找出連續(xù)三個(gè)數(shù)之和:voidhundurd(inta[],intn)(longresult=0;inttempi=a[0]+a[l]+a[2];inttemp2;result=tempi;for(inti=2;i<n;i++){temp2=temp2-a[i-2]+a[i+1];if(temp2>tempi)(result=temp2;}tempi=temp2;)returnresult;}.寫ー程序?qū)崿F(xiàn)快速排序.假設(shè)數(shù)據(jù)輸入為ー文件快速算法描述如下AlgorithmPartitionInput:sequenceaO,...,an-lwithnelementsOutput:permutationofthesequencesuchthatsthanorequaltoal1elementsai,...,an-l(i>j)Method:choosetheelementinthemiddleofthesequeleti=0andj=n-lwhileijsearchthefirstelementaiwhichisgreasearchthelastelementajwhichislessifijexchangeaiandajleti=i+1andj=j-1max=len;destp=pl;}ql++;)max=len;destp=pl;}ql++;)pl++;)substr=(char*)malloc(sizeof(char)*max);strncpy(substr,destp,max);returnsubstr;}intmain(){char*sl="asdfghjkl”;char*s2=asdwfghjews*;char*sub;printf(*%s%s”,si,s2);sub=maxsubstr(si,s2);printflthemaxsubstringis:%s,sub);return0;)elementsaO,...,ajarelesascomparisonelementxthanorequaltoxorequaltoxthetwopartsrecursivelybyTherecursionendswheneverapartconsistsofoneelementonly..寫ー算法檢測單向鏈表中是否存在環(huán)(whetherthereisaloopinalinklist),要求算法復(fù)雜度(Algorithm'scomplexity是0(n))并只使用常數(shù)空間(spaceis0(c)).注意,你只知道一個(gè)指向單向鏈表頭的指針。鏈表的長度是不定的,而且環(huán)出現(xiàn)的地方也是不定的,環(huán)有可能在頭,有可能在中間。而且要求是檢測,不能破壞環(huán)的結(jié)構(gòu).(MOTO)答:用兩個(gè)指針來遍歷這個(gè)單向鏈表,第一個(gè)指針p1,每次走ー步;第二個(gè)指針p2,每次走兩步;當(dāng)p2指針追上p1的時(shí)候,就表明鏈表當(dāng)中有環(huán)路了。inttestLinkRing(Link*head)(Link*t1=head,*t2=head;while(t1->next&&t2->next){t1=t1->;next;if(NULL==(12=t2->next->next))return0;〃無環(huán)if(t1==t2)return1;)return0;}如果要定位環(huán)路在鏈表當(dāng)中的開始點(diǎn)發(fā)現(xiàn)p2和p1重合,確定了單向鏈表有環(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ù)在內(nèi)存中排序,能把字節(jié)數(shù)最大為100M字節(jié)的ArrayType類型的數(shù)組排序。其中ArrayType是ー個(gè)預(yù)定義的數(shù)組類型(細(xì)節(jié)無關(guān)緊要),Pinputarray,Poutarray分別為排序前的指針和排序后的指針。請用c語言的偽碼風(fēng)格設(shè)計(jì)ー個(gè)算法,他調(diào)用上面給出的函數(shù)完成下列從輸入到輸出的任務(wù):輸入:排序前的大文件,名稱為char*pinoutfilename,其內(nèi)容為用分號(hào)分隔的ArrayType類型的數(shù)組元素,可裝滿4個(gè)100M字節(jié)的數(shù)組。輸出:排序后的大文件char*poutoutfilenameo.用最有效率的方法算出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,doubleftxl,doubleftx2);返回值:解的個(gè)數(shù)用求根公式計(jì)算.最大公約數(shù)DWORDDivisor(DWORDdwFirst,DWORDdwSecond);返回值:最大公約數(shù)longDivisor(longdwFirst,longdwSecond)if(dwFirst<dwSecond)(longtemp=dwFirst;dwFirst=dwSecond;dwSecond=temp;)if(dwSecond==0){returndwFirst;)if(dwFirst%2=0){if(dwSecond%2==0)(return(Divisor(dwFirst>>1,dwSecond?1)?1);)else(returnDivisor(dwFirst?1,dwSecond);))else{if(dwSecond%2==0){returnDivisor(dwFirst,dwSecond>>1);)else{returnDivisor(dwSecond,dwFirst-dwSecond);)}}.根據(jù)蒙特卡洛算法計(jì)算圓周率doublePI(DOWRDdwCount/?測試次數(shù)?/);返回值:PI/**//*利用蒙特卡洛算法近似求圓周率PIVC++6.0ZZH*/#includeくiostream>#include<cmath>#include<ctime>^defineCOUNT500000〃循環(huán)取樣次數(shù)usingnamespacestd;boolInCircle(doublex,doubley)〃是否在1/4圓范圍之內(nèi)(if((x*x+y*y)<=1)returntrue;returnfalse;voidmain()doublex,y;intnum=0;inti;srand((unsigned)time(NULL));for(i=0;i<C0UNT;i++){x=rand()*l.0/RAND_MAX;y=rand()*1.0/RAND_MAX;if(InCircle(x,y))num++;)coutく<"PI:"〈〈(num*4.0)/C0UNT?endl;)結(jié)果:測試5次的結(jié)果顯示:3.13958,3.14041,3,13729,3,13859,3.14186.無符號(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ù)組,對數(shù)組排序,再存入鏈表中。改錯(cuò)并說明原因file:1.cinta[10]={0};file:2.cintmain(){externint*a;printf("%d\n",a[0]);return0;1#include"filename,h”和#includeくfilename.h>的區(qū)別?對于#include〈filename,h〉編譯器從標(biāo)準(zhǔn)庫開始搜索filename,h:對于#include"filename,h”編譯器從用戶工作路徑開始搜索filename.h2頭文件的作用是什么?ー、通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便(或不準(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ù)的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞。4內(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)存容量有限。三、從堆上分配,亦稱動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc或new申請任意多少的內(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)maUoc(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è)空格。include<iostream>#include<string>usingnamespacestd;intmain()(strings=',dasfas\tfdasfsdaf\tdfsdfa";intc=0;while((c=s.find(,'\t,',c+l))!=string::npos)(s.replace(c,l,H");)cout?s?endl;return0;}7Windows程序的入口是哪里?寫出Windows消息機(jī)制的流程.A:入口點(diǎn)是WinMain函數(shù).Windows消息機(jī)制的流程:Windows中有一個(gè)系統(tǒng)消息隊(duì)列,對于每ー個(gè)正在執(zhí)行的Windows應(yīng)用程序,系統(tǒng)為其建立一個(gè)“消息隊(duì)列”,即應(yīng)用程序隊(duì)列,用來存放該程序可能創(chuàng)建的各種窗口的消息。應(yīng)用程序中含有一段稱作“消息循環(huán)”的代碼,用來從消息隊(duì)列中檢索這些消息并把它們分發(fā)到相應(yīng)的窗口函數(shù)中。Windows為當(dāng)前執(zhí)行的每個(gè)Windows程序維護(hù)ー個(gè)「消息隊(duì)列」。在發(fā)生輸入事件之后,Windows將事件轉(zhuǎn)換為ー個(gè)「消息」并將消息放入程序的消息隊(duì)列中。程序通過執(zhí)行ー塊稱之為「消息循環(huán)」的程序代碼從消息隊(duì)列中取出消息:while(GetMessage(&msg,NULL,0,0))TranslateMessage(&msg);DispatchMessage(&msg);}TranslateMessage(&msg);將msg結(jié)構(gòu)傳給Windows,進(jìn)行ー些鍵盤轉(zhuǎn)換。DispatchMessage(&msg);又將msg結(jié)構(gòu)回傳給Windows。然后,Windows將該消息發(fā)送給適當(dāng)?shù)拇翱谙⑻幚沓绦?讓它進(jìn)行處理。SendMessage()與PostMessage()之間的區(qū)別是什么?它們兩者是用于向應(yīng)用程序發(fā)送消息的。PostMessagexO將消息宜接加入到應(yīng)用程序的消息隊(duì)列中,不等程序返回就退出;而SendMessage。則剛好相反,應(yīng)用程序處理完此消息后,它オ返回。8如何定義和實(shí)現(xiàn)ー個(gè)類的成員函數(shù)為回調(diào)函數(shù)?把成員函數(shù)申明為static就可以了。C++里面是不是所有的動(dòng)作都是main。引起的?如果不是,請舉例.當(dāng)然不是所有的動(dòng)作都是main。引起的,只是編譯器由main。開始執(zhí)行的比如全局變量的初始化,就不是由main函數(shù)引起的靜態(tài)變量和全局變量的分配早在main之前完成內(nèi)聯(lián),模板,函數(shù)聲明,宏的擴(kuò)展全是預(yù)編譯期行為,也不是main。完成的注:C++和main。邏輯上沒有必然的聯(lián)系。C++里面如何聲明constvoidf(void)函數(shù)為C程序中的庫函數(shù)(華為)extern"C"voidf(void);所以extern"C”是強(qiáng)迫C++編譯器對函數(shù)名進(jìn)行修飾的時(shí)候采用C命名約定。11下列哪兩個(gè)是等同的intb;Aconstint*a=&b;Bconst*inta=&b;Cconstint*consta=&b;Dintconst*consta=&b;如果const關(guān)鍵字不涉及到指針,我們很好理解,下面是涉及到指針的情況:intb=500;constint*a=&b;[1]intconst*a=&b;[2]int*consta=&b;[3]constint*consta=&b;[4]如果你能區(qū)分出上述四種情況,那么,恭喜你,你已經(jīng)邁出了可喜的ー步。不知道,也沒關(guān)系,我們可以參考《Effectivec++》Item21上的做法,如果const位于星號(hào)的左側(cè),則const就是用來修飾指針?biāo)赶虻淖兞?即指針指向?yàn)槌A?如果const位于星號(hào)的右側(cè),const就是修飾指針本身,即指針本身是常量。因此,[1]和[2]的情況相同,都是指針?biāo)赶虻膬?nèi)容為常量(const放在變量聲明符的位置無關(guān)),這種情況下不允許對內(nèi)容進(jìn)行更改操作,如不能?a=3;[3]為指針本身是常量,而指針?biāo)赶虻膬?nèi)容不是常量,這種情況下不能對指針本身進(jìn)行更改操作,如a++是錯(cuò)誤的;[4]為指針本身和指向的內(nèi)容均為常量。另外const的ー些強(qiáng)大的功能在于它在函數(shù)聲明中的應(yīng)用。在ー個(gè)函數(shù)聲明中,const可以修飾函數(shù)的返回值,或某個(gè)參數(shù);對于成員函數(shù),還可以修飾是整個(gè)函數(shù)。有如下幾種情況,以下會(huì)逐漸的說明用法:A&operator=(constA&a);voidfunO(constA*a);voidfunl()const;//funl()為類成員函數(shù)constAfun2();12內(nèi)聯(lián)函數(shù)在編譯時(shí)是否做參數(shù)類型檢查內(nèi)聯(lián)函數(shù)要做參數(shù)類型檢查,這是內(nèi)聯(lián)函數(shù)跟宏相比的優(yōu)勢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è)計(jì)ー個(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)化嗎?.對排序算法的總結(jié):(1)若n較小(如n<50),可采用直接插入或直接選擇排序。當(dāng)記錄規(guī)模較小時(shí),直接插入排序較好;否則因?yàn)橹苯舆x擇移動(dòng)的記錄數(shù)少于直接插入,應(yīng)選直接選擇排序?yàn)橐恕?2)若文件初始狀態(tài)基本有序(指正序),則應(yīng)選用直接插人、冒泡或隨機(jī)的快速排序?yàn)橐?(3)若n較大,則應(yīng)采用時(shí)間復(fù)雜度為O(nlgn)的排序方法:快速排序、堆排序或歸并排序??焖倥判蚴悄壳盎诒容^的內(nèi)部排序中被認(rèn)為是最好的方法,當(dāng)待排序的關(guān)鍵字是隨機(jī)分布時(shí),快速排序的平均時(shí)間最短;堆排序所需的輔助空間少于快速排序,并且不會(huì)出現(xiàn)快速排序可能出現(xiàn)的最壞情況。這兩種排序都是不穩(wěn)定的17.下面哪種排序法對12354最快aquicksortbublesort若文件初始狀態(tài)基本有序(指正序),則應(yīng)選用直接插人、冒泡或隨機(jī)的快速排序?yàn)橐?mergesort18.哪種結(jié)構(gòu),平均來講,獲取ー個(gè)值最快binarytreehashtablestack19請問C++的類和C里面的struct有什么區(qū)別?class中默認(rèn)的成員訪問權(quán)限是private的,而struct中則是public的20請講ー講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?析構(gòu)函數(shù)是特殊的類成員函數(shù),它沒有返回類型,沒有參數(shù),不能隨意調(diào)用,也沒有重載,只有在類對象的生命期結(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í)候被加載。局部變量則分配在堆棧里面。22ー些寄存器的題目,主要是尋址和內(nèi)存管理等一些知識(shí)。238086是多少位的系統(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è)代碼段)。override是覆蓋。覆蓋是ー種動(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筆試題>>.完成下列程序4include<stdio.h>#defineN8intmain(){inti;intj;intk;for(i=l;i<=N;i++)(for(j=l;j<=i;j++)(printf(〃?〃);k=0;while(k<i-1)(printf(".");k++;))printf('\n");return0;)26完成程序,實(shí)現(xiàn)對數(shù)組的降序排序ftinclude<stdio.h>voidsort( );intmain()(intarray[]={45,56,76,234,1,34,23,2,3);〃數(shù)字任〃意給出sort( );return0;2?費(fèi)波那其數(shù)列,1,1,2,3,5……編寫程序求第十項(xiàng)??梢杂眠f歸,也可以用其他方法,但要說明你選擇的理由。#include<stdio.h>intPheponatch(int);intmain(){printf("The10this%d”,Pheponatch(10));return0;)intPheponatch(intN)28下列程序運(yùn)行時(shí)會(huì)崩潰,請找出錯(cuò)誤并改正,并且說明原因。ttinclude<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;.AclassBnetworkontheinternethasasubnetmaskof,whatisthemaximumnumberofhostspersubnet.一B類地址的子網(wǎng)掩碼是,問每個(gè)子網(wǎng)內(nèi)的最大主機(jī)數(shù)子網(wǎng)掩碼與iP相與得到子網(wǎng)號(hào),255,255.240.0化成二進(jìn)制11111111.11111111.11110000.00000000,W12個(gè)”〇”,2A12-2=4096-2=4094a.240b.255c.4094d.6553.Whatisthedifference:betweeno(logn)ando(lognA2),wherebothlogarithems(對數(shù))havebase2.a.o(logn2)isbiggerb.o(logn)isbiggerc.nodifference.Foraclasswhatwouldhappenifwecallaclass'sconstructorfromwiththesameclass'pilationerrorb.linkingerrorc.stackoverflowd.noneoftheabove.“new”inC++isa:A.1ibraryfunction1ikemallocincB.keywordC.operatorD.noneoftheabovemalloc是庫函數(shù),不在編譯器控制范圍之內(nèi);new是運(yùn)算符,在編譯器控制范圍之內(nèi)。調(diào)用malloc時(shí),從堆中申請內(nèi)存:調(diào)用new時(shí),從堆中申請內(nèi)存并為內(nèi)存調(diào)用構(gòu)造函數(shù)。.Whichofthefollowinginformationisnotcontainedinaninode.a.fileownerb.filesizec.filenamed.diskaddress.Whafsthenumberofcomparisonsintheworstcasetomergetwosortedlistscontainingnelementseach.a.2n b.2n-l c.2n+l d.2n-2.TimecomplexityofnalgorithmT(n),wherenistheinputsize,isT(n)=T(n-l)+l/nifn>lotherwise1theorderofthisalgorithmis.a.log(n)b.n c.n*2 d.nn.ThenumberofTsinthebinaryrepresentationof3*4096+15*256+5*16+3aa.8 b.9 c.10 d.12.設(shè)計(jì)函數(shù)intatoi(char*s)i=(j=4,k=8,l=16,m=32);printf(u%d,,5i);輸出是多少?.解釋局部變量、全局變量和靜態(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,malloc分配,需要手工釋放,不然會(huì)導(dǎo)致memoryleak,棧是靜態(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è)對象a和b。宏沒有生存期、作用域之類的概念,而函數(shù)就有。.以下三條輸出語句分別輸出什么?[C易]charstrl[] = "abc";charstr2[]="abc";constcharstr3[]=abc”;constcharstr4[]=abc;constchar*str5="abc;constchar*str6="abc";cout<<boolalpha<<(strl==str2)<<endl;/Z輸出什么?cout<<boolalpha<<(str3==str4)<<endl;/Z輸出什么?cout<<boolalpha<<(str5==str6)?endl;/Z輸出什么?答:分別輸出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 { operator A( ) ; } // B實(shí)現(xiàn)了隱式轉(zhuǎn)化為A的轉(zhuǎn)化class A { A(const B& ); } // A實(shí)現(xiàn)了non-explicit的參數(shù)為B(可以有其他帶默認(rèn)值的參數(shù))構(gòu)造函數(shù)d.A&operator=(constA&);〃賦值操作,雖不是正宗的隱式類型轉(zhuǎn)換,但也可以勉強(qiáng)算ー個(gè).以下代碼中的兩個(gè)sizeof用法有問題嗎?[C易]voidUppercase(charstr[])//將str中的小寫字母轉(zhuǎn)換成大寫字母(for(size_ti=0;i<sizeof(str)/sizeof(str[0]);++i)if(*a*<=str[i]&&str[i]<=,z*)str[i]-=('a'-'A');}charstr[]="aBcDe;cout?"str字符長度為:"<<sizeof(str)/sizeof(str[0])?endl;Uppercase(str);cout?str?endl;答:函數(shù)內(nèi)的sizeof有問題。根據(jù)語法,sizeof如用于數(shù)組,只能測出靜態(tài)數(shù)組的大小,無法檢測動(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+'0';if(ch>'9')ch+=('A'9'-1);charcl=c%0xl0+'O';if(cl>'9')cl+=('A'9'-1);cout?ch<<cl?'';)charstr[]="Ilove中國”;for(size_ti=0;i<strlen(str);++i)char2Hex(str[i]);cout<<endl;.以下代碼有什么問題?[C++易]structTestTest(int)TestO{}voidfun()voidmain(void)Testa(l);a.fun();Testb();b.fun();答:變量b定義出錯(cuò)。按默認(rèn)構(gòu)造函數(shù)定義對象,不需要加括號(hào)。.以下代碼有什么問題?[C++易]cout<<(true?l:"l")?endl;答:三元表達(dá)式“?:”問號(hào)后面的兩個(gè)操作數(shù)必須為同一類型。8.以下代碼能夠編譯通過嗎,為什么?[C++易]unsignedintconstsizel=2;charstrl[sizel];unsignedinttemp=0;cin?temp;unsignedintconstsize2=temp;charstr2[size2];答:str2定義出錯(cuò),size2非編譯器期間常量,而數(shù)組定義要求長度必須為編譯期常量。.以下代碼中的輸出語句輸出。嗎,為什么?[C++易]structCLS(intmi;CLS(inti):m_i(i){}CLS()(CLS(O);));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á)式。只有在生成對象時(shí),初始化表達(dá)式オ會(huì)隨相應(yīng)的構(gòu)造函數(shù)一起調(diào)用。.C++中的空類,默認(rèn)產(chǎn)生哪些類成員函數(shù)?[C++易]答:classEmpty{public:Empty(); /Z缺省構(gòu)造函數(shù)Empty(constEmpty&); /Z拷貝構(gòu)造函數(shù)"Empty(); /Z析構(gòu)函數(shù)Empty&operator=(constEmpty&);/Z賦值運(yùn)算符Empty*operator&(); /Z取址運(yùn)算符constEmpty*operators()const;/Z取址運(yùn)算符const);.以下兩條輸出語句分別輸出什么?[C++難]floata=1.Of;cout<<(int)a<<endl;cout<<(int&)a?endl;cout<<boolalpha<<((int)a==(int&)a)?endl;/Z輸出什么?floatb=0.Of;cout<<(int)b<<endl;cout<<(int&)b?endl;cout<<boolalpha<<((int)b==(int&)b)?endl;/Z輸出什么.以下反向遍歷array數(shù)組的方法有什么錯(cuò)誤?[STL易]vectorarray;array.push_back(1);array,pushback(2);array.push_back(3);for(vector::size_typei=array.size()-1;i>=0;-i)/Z反向遍丿カ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)致循加失去控制。.以下代碼有什么問題?[STL易]typedefvectorIntArray;IntArrayarray;array.push_back(1);array.push_back(2);array.push_back(2);array.push_back(3);/Z刪除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!=-1;―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:請你分別劃劃OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)圖,和TCP/IP的五層結(jié)構(gòu)圖?56:請你詳細(xì)的解釋一下IP協(xié)議的定義,在哪個(gè)層上面,主要有什么作用?TCP與UDP呢?57:請問交換機(jī)和路由器分別的實(shí)現(xiàn)原理是什么?分別在哪個(gè)層次上面實(shí)現(xiàn)的?58:請問C++的類和C里面的struct有什么區(qū)別?59:請講ー講析構(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對于C++中類(class)與結(jié)構(gòu)(struct)的描述正確的為:A.類中的成員默認(rèn)是private的,當(dāng)是可以聲明為public,private和protectedI結(jié)構(gòu)中定義的成員默認(rèn)的都是public;B,結(jié)構(gòu)中不允許定義成員函數(shù),當(dāng)是類中可以定義成員函數(shù);C,結(jié)構(gòu)實(shí)例使用mallocO動(dòng)態(tài)創(chuàng)建,類對象使用new操作符動(dòng)態(tài)分配內(nèi)存;D,結(jié)構(gòu)和類對象都必須使用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::AdditionalFunction(ClassAa,ClassBb);則可以在AdditionalPunction(ClassAx,ClassBy)的實(shí)現(xiàn)部分(函數(shù)功能體內(nèi)部)出現(xiàn)的合法的表達(dá)是最全的是:x.PrivateFunc();x.PublicFuncO;y.PrivateFunc();y.PublicFunc();x.PrivateFunc();x.PublicFuncO;y.PublicFunc();x.PrivateFunc();y.PrivateFunc();y.PublicFunc();x.PublicFunc();y.PublicFunc();答:BC++程序下列說法正確的有:A,對調(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)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度創(chuàng)業(yè)孵化基地租賃合同范本4篇
- 二零二五版食堂蔬菜質(zhì)量認(rèn)證采購協(xié)議3篇
- 二零二五年度男方起訴離婚協(xié)議樣本及離婚后子女撫養(yǎng)及教育協(xié)議3篇
- 2025年度個(gè)人與公司承包電子商務(wù)平臺(tái)建設(shè)合同范本3篇
- 2025年度乳品加工企業(yè)原料供應(yīng)長期合作協(xié)議4篇
- 2025年度個(gè)人房產(chǎn)抵押貸款擔(dān)保合同信息保密協(xié)議3篇
- 二零二五年度教育信息化項(xiàng)目承包商教學(xué)質(zhì)量擔(dān)保合同3篇
- 2025年度電商跨境物流保險(xiǎn)合作協(xié)議3篇
- 2025年電商加盟店運(yùn)營指導(dǎo)及咨詢服務(wù)協(xié)議4篇
- 二零二五年度二手房買賣居間合同(海外客戶版)3篇
- 物流無人機(jī)垂直起降場選址與建設(shè)規(guī)范
- 肺炎臨床路徑
- 外科手術(shù)鋪巾順序
- 創(chuàng)新者的窘境讀書課件
- 綜合素質(zhì)提升培訓(xùn)全面提升個(gè)人綜合素質(zhì)
- 如何克服高中生的社交恐懼癥
- 聚焦任務(wù)的學(xué)習(xí)設(shè)計(jì)作業(yè)改革新視角
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)三 APP的品牌建立與價(jià)值提供
- 電子競技范文10篇
- 食堂服務(wù)質(zhì)量控制方案與保障措施
- VI設(shè)計(jì)輔助圖形設(shè)計(jì)(2022版)
評(píng)論
0/150
提交評(píng)論