版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、請(qǐng)?zhí)顚?xiě)B(tài)OOL,float,指針變量與“零值”比較的if語(yǔ)句。(10分)提示:這里“零值”可以是0,0.0,FALSE或者“空指針”。例如int變量n與“零值”比較的if語(yǔ)句為:if(n=0)if(n!=0)以此類(lèi)推。請(qǐng)寫(xiě)出BOOLflag與“零值”比較的if語(yǔ)句:標(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ǔ)句:標(biāo)準(zhǔn)答案示例:constfloatEPSINON=0.00001;if(x=-EPSINON)&(x=”或“=”此類(lèi)形
2、式。如下是錯(cuò)誤的寫(xiě)法,不得分。if(x=0.0)if(x!=0.0)請(qǐng)寫(xiě)出char*p與“零值”比較的if語(yǔ)句:標(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分)charstr*+=“Hello”;char*p=str;intn=10;sizeof(str)=6sizeof(p)=4sizeof(n)=4voidFunc(charstr100)請(qǐng)計(jì)算sizeof(str)=4void*p=malloc(100);請(qǐng)計(jì)算sizeof(p
3、)=4三、簡(jiǎn)答題(25分)1、頭文件中的ifndef/define/endif干什么用?防止該頭文件被重復(fù)引用2、#include和#include“filename.h”有什么區(qū)別?答:對(duì)于#include,編譯器從標(biāo)準(zhǔn)庫(kù)路徑開(kāi)始搜索filename.h對(duì)于#include“filename.h,編譯器從用戶(hù)的工作路徑開(kāi)始搜索filename.h3、const有什么用途?(請(qǐng)至少說(shuō)明兩種)答:(1)可以定義const常量(2)const可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。4、在C+程序中調(diào)用被C編譯器編譯
4、后的函數(shù),為什么要加extern“C”聲明?答: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之類(lèi)的名字。C+提供了C連接交換指定符號(hào)extern“C”來(lái)解決名字匹配問(wèn)題。5、請(qǐng)簡(jiǎn)述以下兩個(gè)for循環(huán)的優(yōu)缺點(diǎn)for(i=0;iN;i+)if(condition)DoSomething();elseDoOtherthing();/第二個(gè)if(condition)for(i=0;iN;i+)DoSometh
5、ing();elsefor(i=0;iN;i+)DoOtherthing();優(yōu)點(diǎn):程序簡(jiǎn)潔缺點(diǎn):多執(zhí)行了N-1次邏輯判斷,并且打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對(duì)循環(huán)進(jìn)行優(yōu)化處理,降低了效率。優(yōu)點(diǎn):循環(huán)的效率高缺點(diǎn):程序不簡(jiǎn)潔四、有關(guān)內(nèi)存的思考題(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)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:程序崩潰,getmemory中的malloc不能返回動(dòng)
6、態(tài)內(nèi)存,freeO對(duì)str操作很危險(xiǎn)博主:getmemory中p是形參,是一個(gè)指針變量,getmemory(str)調(diào)用后,傳入的是指針變量保存的對(duì)象地址,p=(char*)malloc(100)實(shí)際上是把申請(qǐng)的動(dòng)態(tài)內(nèi)存空間的首地址付給p指向的地址(即str指向的地址null),這個(gè)是錯(cuò)誤的。應(yīng)該修改成指向指針的指針voidgetmemory(char*p),這樣malloc返回的地址付給*p(即str變量本身)。char*GetMemory(void)charp=helloworld;returnp;voidTest(void)char*str=NULL;str=GetMemory();pr
7、intf(str);請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:可能是亂碼。因?yàn)镚etMemory返回的是指向“棧內(nèi)存”的指針,該指針的地址不是NULL,但其原現(xiàn)的內(nèi)容已經(jīng)被清除,新內(nèi)容不可知。RetMenory執(zhí)行完畢,p資源被回收,指向未知地址。返回地址,str的內(nèi)容應(yīng)是不可預(yù)測(cè)的,打印的應(yīng)該是str的地址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)行Test函數(shù)會(huì)有什么樣的結(jié)
8、果?答:(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)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:篡改動(dòng)態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預(yù)料,非常危險(xiǎn)。因?yàn)閒ree(str);之后,str成為野指針,五、if(str!=NULL)語(yǔ)句不起作用。五、已知strcpy函數(shù)的原型是char*strcpy(char*strDest,constchar*strSrc);其中strDest是
9、目的字符串,strSrc是源字符串。(1)不調(diào)用C+/C的字符串庫(kù)函數(shù),請(qǐng)編寫(xiě)函數(shù)strcpy答:char*my_strcpy(char*strdest,constchar*strsrc)assert(strdest!=NULL)&(strsrc!=NULL)char*address=strdest;while(*strdest+=*strsrc+)!=NULL)returnaddress;(2)strcpy能把strSrc的內(nèi)容復(fù)制到strDest,為什么還要char*類(lèi)型的返回值?答:為了實(shí)現(xiàn)鏈?zhǔn)奖磉_(dá)式。/2分例如intlength=strlen(strcpy(strDest,“hello
10、world”);六、編寫(xiě)類(lèi)String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(25分)已知類(lèi)String的原型為:classStringpublic: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_data;/用于保存字符串;請(qǐng)編寫(xiě)String的上述4個(gè)函數(shù)。/普通構(gòu)造函數(shù)String:String(constchar*str)if(str=NULL)m_data=newc
11、har1;/得分點(diǎn):對(duì)空字符串自動(dòng)申請(qǐng)存放結(jié)束標(biāo)志0的空加分點(diǎn):對(duì)m_data加NULL判斷*m_data=0;elseintlength=strlen(str);m_data=newcharlength+1;/若能加NULL判斷則更好strcpy(m_data,str);/String的析構(gòu)函數(shù)String:String(void)delete口m_data;/或deletem_data;/拷貝構(gòu)造函數(shù)String:String(constString&other)得分點(diǎn):輸入?yún)?shù)為const型intlength=strlen(other.m_data);m_data=newcharleng
12、th+1;/加分點(diǎn):對(duì)m_data力口NULL判斷strcpy(m_data,other.m_data);/賦值函數(shù)String&String:operate=(constString&other)/得分點(diǎn):輸入?yún)?shù)為const型if(this=&other)/得分點(diǎn):檢查自賦值return*this;deletem_data;/得分點(diǎn):釋放原有的內(nèi)存資源intlength=strlen(other.m_data);m_data=newcharlength+1;/加分點(diǎn):對(duì)m_data力口NULL判斷strcpy(m_data,other.m_data);return*this;/得分點(diǎn):返回
13、本對(duì)象的引用編寫(xiě)一個(gè)函數(shù),要求輸入年月日時(shí)分秒,輸出該年月日時(shí)分秒的下一秒。如輸入2004年12月31日23時(shí)59分59秒,則輸出2005年1月1日0時(shí)0分0秒。voidResetTheTime(int*year,int*month,int*date,int*hour,int*minute,int*second)intdayOfMonth12=31,28,31,30,31,30,31,31,30,31,30,31;if(*year0|*month12|*date31|*hour23|*minute59|*second60)return;if(*year%400=0|*year%100!=0&*
14、year%4=0)dayOfMonth1=29;if(*second=60)*second=0;*minute+=1;if(*minute=60)*minute=0;*hour+=1;if(*hour=24)*hour=0;*date+=1;if(*datedayOfMonth*month-1)*date=1;*month+=1;if(*month12)*month=1;*year+=1;return;.全局變量和局部變量在內(nèi)存中是否有區(qū)別?如果有,是什么區(qū)別?全局變量?jī)?chǔ)存在靜態(tài)數(shù)據(jù)庫(kù),局部變量在堆棧.static有什么用途?(請(qǐng)至少說(shuō)明兩種).限制變量的作用域2.設(shè)置變量的存儲(chǔ)域不能做swi
15、tch()的參數(shù)類(lèi)型是:switch的參數(shù)不能為實(shí)型。如何引用一個(gè)已經(jīng)定義過(guò)的全局變量?答:extern可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來(lái)引用某個(gè)在頭文件中聲明的全局變理,假定你將那個(gè)變寫(xiě)錯(cuò)了,那么在編譯期間會(huì)報(bào)錯(cuò),如果你用extern方式引用時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么?答:可以,在不同的C文件中以static形式來(lái)聲明同名全局變量??梢栽诓煌腃文件中聲明同名的全局變量,前提是其中只能有一個(gè)C文件中對(duì)此變量賦初值,此時(shí)連接不會(huì)出錯(cuò)char*ss=0123
16、456789;sizeof(ss)結(jié)果4=ss是指向字符串常量的字符指針,sizeof獲得的是一個(gè)指針的之所占的空間,應(yīng)該是長(zhǎng)整型的,所以是4sizeof(*ss)結(jié)果1=*ss是第一個(gè)字符其實(shí)就是獲得了字符串的第一位0所占的內(nèi)存空間,是char類(lèi)型的,占了1位請(qǐng)找出下面代碼中的所以錯(cuò)誤#includestring.hmain()說(shuō)明:以下代碼是把一個(gè)字符串倒序,如“abcd”倒序后變?yōu)椤癲cba”#includestring.hmain()char*src=hello,world;char*dest=NULL;intlen=strlen(src);dest=(char*)malloc(len
17、);char*d=dest;char*s=srclen;while(len-!=0)d+=s-;printf(%s,dest);return0;答:方法1:intmain()char*src=hello,world;intlen=strlen(src);char*dest=(char*)malloc(len+1);/要為0分配一個(gè)空間char*d=dest;char*s=&srclen-1;/指向最后一個(gè)字符while(len-!=0)*d+=*s-;*d=0;/尾部要加0printf(%sn,dest);free(dest);/使用完,應(yīng)當(dāng)釋放空間,以免造成內(nèi)存匯泄露return0;方法2:
18、#include#includemain()charstr=hello,world;intlen=strlen(str);chart;for(inti=0;ilen/2;i+)t=stri;stri=strlen-i-1;strlen-i-1=t;printf(%s,str);return0;.用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的功能?要求給出算法和思路!設(shè)2個(gè)棧為A,B,一開(kāi)始均為空.入隊(duì):將新元素push入棧A;出隊(duì):(1)判斷棧B是否為空;如果不為空,則將棧A中所有元素依次pop出并push到棧B;將棧B的棧頂元素pop出;char*constp;/常量指針,p的值不可以修改charconst*p;指
19、向常量的指針,指向的常量值不可以改constchar*p;/和charconst*pmain()inta5=1,2,3,4,5;int*ptr=(int*)(&a+1);printf(%d,%d,*(a+1),*(ptr-1);輸出:2,5*(a+1)就是a1,*(ptr-1)就是a4,執(zhí)行結(jié)果是2,5&a+1不是首地址+1,系統(tǒng)會(huì)認(rèn)為加一個(gè)a數(shù)組的偏移,是偏移了一個(gè)數(shù)組的大小(本例是5個(gè)int)int*ptr=(int*)(&a+1);則ptr實(shí)際是&(a5),也就是a+5原因如下:&a是數(shù)組指針,其類(lèi)型為int(*)5;而指針加1要根據(jù)指針類(lèi)型加上一定的值,不同類(lèi)型的指針+1之后增加的大小
20、不同a是長(zhǎng)度為5的int數(shù)組指針,所以要加5*sizeof(int)所以ptr實(shí)際是a5但是prt與(&8+1)類(lèi)型是不一樣的(這點(diǎn)很重要)所以prt-1只會(huì)減去sizeof(int*)a,&a的地址是一樣的,但意思不一樣,a是數(shù)組首地址,也就是a0的地址,&a是對(duì)象(數(shù)組)首地址,a+1是數(shù)組下一元素的地址,即a1,&a+1是下一個(gè)對(duì)象的地址,即a5.char*s=AAA;printf(%s,s);s0=B;printf(%s,s);有什么錯(cuò)?“AAA”是字符串常量。s是指針,指向這個(gè)字符串常量,所以聲明s的時(shí)候就有問(wèn)題。cosntchar*s=AAA;然后又因?yàn)槭浅A?,所以?duì)是s的賦值操作
21、是不合法的。int(*s10)(int)函數(shù)指針數(shù)組,每個(gè)指針指向一個(gè)intfunc(intparam)的函數(shù)。.交換兩個(gè)變量的值,不使用第三個(gè)變量。即a=3,b=5,交換之后a=5,b=3;有兩種解法,一種用算術(shù)算法,一種用人(異或)a=a+b;b=a-b;a=a-b;ora=aAb;/只能對(duì)int,char.b=aAb;a=aAb;3.c和c+中的struct有什么不同?c和c+中struct的主要區(qū)別是c中的struct不可以含有成員函數(shù),而c+中的struct可以。c+中struct和class的主要區(qū)別在于默認(rèn)的存取權(quán)限不同,struct默認(rèn)為public,而class默認(rèn)為priv
22、ate1:(void*)ptr和(*(void*)ptr的結(jié)果是否相同?其中ptr為同一個(gè)指針.(void*)ptr和(*(void*)ptr值是相同的改錯(cuò):intmain(void)int*p;intarr100;p=&arr;return0;解答:搞錯(cuò)了,是指針類(lèi)型不同,int*p;/二級(jí)指針&arr;/得到的是指向第一維為100的數(shù)組的指針#includeintmain(void)int*p,*q;intarr100;q=arr;p=&q;return0;下面這個(gè)程序執(zhí)行后會(huì)有什么錯(cuò)誤或者效果:#defineMAX255intmain()unsignedcharAMAX,i;/i被定義為
23、unsignedcharfor(i=0;i=MAX;i+)Ai=i;解答:死循環(huán)加數(shù)組越界訪問(wèn)(C/C+不進(jìn)行數(shù)組越界檢查)MAX=255數(shù)組A的下標(biāo)范圍為:0.MAX-1,這是其一.其二.當(dāng)i循環(huán)到255時(shí),循環(huán)內(nèi)執(zhí)行:A255=255;這句本身沒(méi)有問(wèn)題.但是返回for(i=0;i=MAX;i+)語(yǔ)句時(shí),由于unsignedchar的取值范圍在(0.255),i+以后i又為0了.無(wú)限循環(huán)下去.設(shè)編號(hào)為1,2,n的n個(gè)人圍坐一圈,約定編號(hào)為k(1=k=n)的人從1開(kāi)始報(bào)數(shù),數(shù)到m的那個(gè)人出列,它的下一位又從1開(kāi)始報(bào)數(shù),數(shù)到m的那個(gè)人又出列,依次類(lèi)推,直到所有人出列為止,由此產(chǎn)生一個(gè)出隊(duì)編號(hào)的序
24、列。數(shù)組實(shí)現(xiàn):#include#includeintJosephu(intn,intm)intflag,i,j=0;int*arr=(int*)malloc(n*sizeof(int);for(i=0;in;+i)arri=1;for(i=1;in;+i)flag=0;while(flagm)if(j=n)j=0;if(arrj)+flag;+j;arrj-1=0;printf(第4d個(gè)出局的人是:4d號(hào)n,i,j);free(arr);returnj;intmain()intn,m;scanf(%d%d,&n,&m);printf(最后勝利的是d號(hào)!n,Josephu(n,m);system
25、(pause);return0;鏈表實(shí)現(xiàn):#include#includetypedefstructNodeintindex;structNode*next;JosephuNode;intJosephu(intn,intm)inti,j;JosephuNode*head,*tail;head=tail=(JosephuNode*)malloc(sizeof(JosephuNode);for(i=1;iindex=i;tail-next=(JosephuNode*)malloc(sizeof(JosephuNode);tail=tail-next;tail-index=i;tail-next=head;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)飼料防霉劑行業(yè)市場(chǎng)發(fā)展趨勢(shì)及前景調(diào)研分析報(bào)告
- 2025-2030年中國(guó)風(fēng)能原動(dòng)設(shè)備制造市場(chǎng)發(fā)展前景調(diào)研與投資策略分析報(bào)告
- 2025-2030年中國(guó)靜力水準(zhǔn)儀市場(chǎng)運(yùn)行動(dòng)態(tài)分析與營(yíng)銷(xiāo)策略研究報(bào)告
- 2025-2030年中國(guó)鐵道用鋼材行業(yè)運(yùn)行動(dòng)態(tài)規(guī)劃研究報(bào)告
- 2025-2030年中國(guó)金礦采選產(chǎn)業(yè)運(yùn)行動(dòng)態(tài)與十三五規(guī)劃研究報(bào)告
- 2025-2030年中國(guó)造紙機(jī)械行業(yè)發(fā)展趨勢(shì)及前景調(diào)研分析報(bào)告
- 2025-2030年中國(guó)超細(xì)旦纖維產(chǎn)業(yè)市場(chǎng)運(yùn)行狀況及前景趨勢(shì)分析報(bào)告
- 健身器材行業(yè)綠色環(huán)保與可持續(xù)發(fā)展戰(zhàn)略考核試卷
- 保險(xiǎn)代理人的法律法規(guī)知識(shí)與案例分析考核試卷
- 2025年度海洋資源開(kāi)發(fā)海域租賃合同
- 2025年工程合作協(xié)議書(shū)
- 2025年山東省東營(yíng)市東營(yíng)區(qū)融媒體中心招聘全媒體采編播專(zhuān)業(yè)技術(shù)人員10人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年宜賓人才限公司招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- KAT1-2023井下探放水技術(shù)規(guī)范
- 竣工驗(yàn)收程序流程圖
- 清華經(jīng)管工商管理碩士研究生培養(yǎng)計(jì)劃
- 口腔科診斷證明書(shū)模板
- 管溝挖槽土方計(jì)算公式
- 國(guó)網(wǎng)浙江省電力公司住宅工程配電設(shè)計(jì)技術(shù)規(guī)定
- 煙花爆竹零售應(yīng)急預(yù)案
- RNA介導(dǎo)的DNA甲基化
評(píng)論
0/150
提交評(píng)論