2023電子科大復(fù)試C_第1頁
2023電子科大復(fù)試C_第2頁
2023電子科大復(fù)試C_第3頁
2023電子科大復(fù)試C_第4頁
2023電子科大復(fù)試C_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——2023電子科大復(fù)試C2023C語言程序設(shè)計(jì)-筆試

總體感覺:和去年的題有重復(fù),時(shí)間緊,所以大家還是要好好準(zhǔn)備,一、指出程序中的錯(cuò)誤,說明原因并修正。1、

Int*p,*q;

p=(int*)malloc(sizeof(int)*20);q=(int*)malloc(sizeof(int)*10);…

q=p;//修改的話可以刪除這句話…free(p);

free(q);//錯(cuò)了,由于p=q后,就指向同一塊地址了。內(nèi)存泄露(p分派了空間沒釋放)重復(fù)釋放同一內(nèi)存會(huì)報(bào)錯(cuò),還剩一塊內(nèi)存沒有釋放,內(nèi)存泄露

一:由于malloc函數(shù)返回值為void*,所以還是應(yīng)當(dāng)強(qiáng)制轉(zhuǎn)換為(int*),雖然我在運(yùn)行時(shí)沒有錯(cuò),但一般都要指定指針類型。

二:由于p=q,兩個(gè)指針指向同一個(gè)地址,free(p)之后,則該內(nèi)存空間被釋放,則q此時(shí)就沒有具體指向一個(gè)地址,free(q)就會(huì)出錯(cuò)。

內(nèi)存泄露:

一般我們常說的內(nèi)存泄漏是指堆內(nèi)存的泄漏。堆內(nèi)存是指程序從堆中分派的,大小任意的(內(nèi)存塊的大小可以在程序運(yùn)行期決定),使用完后必需顯式釋放的內(nèi)存。應(yīng)用程序一般使用malloc,calloc,realloc,new等函數(shù)從堆中分派到一塊內(nèi)存,使用完后,程序必需負(fù)責(zé)相應(yīng)的調(diào)用free或delete釋放該內(nèi)存塊,否則,這塊內(nèi)存就不能被再次使用,我們就說這塊內(nèi)存泄漏了。

內(nèi)存泄漏是常見的問題。當(dāng)以前分派的一片內(nèi)存不再需要使用或無法訪問時(shí),但是卻并沒有釋放它,那么對(duì)于該進(jìn)程來說,會(huì)因此導(dǎo)致總可用內(nèi)存的減少,這時(shí)就出現(xiàn)了內(nèi)存泄漏。盡管優(yōu)秀的編程實(shí)踐可以確保最少的泄漏,但是根據(jù)經(jīng)驗(yàn),當(dāng)使用大量的函數(shù)對(duì)一致的內(nèi)存塊進(jìn)行處理時(shí),很可能會(huì)出現(xiàn)內(nèi)存泄漏。特別是在碰見錯(cuò)誤路徑的狀況下更是如此。

2、交換兩個(gè)字符串(和去年一樣)

Voidswap(char*p,char*q)//和去年一樣{

Char*temp;*temp=*p;*p=*q;*q=*temp;

}

1.函數(shù)類型大小寫錯(cuò)誤。

2.交換形參指針地址不能修改實(shí)參的值。

Voidswap(char*p,char*q){

Chartemp[100];Strcpy(temp,p);Strcpy(p,q);Strcpy(q,temp);}

正確修改法:見下

(解釋)實(shí)參是str1和str2的地址,函數(shù)里改變了*p,*q的值,也就是str1和str2中存放的字符串的地址做了改變。所以str1里存放的str2所指字符串的地址

3、for(num=N;arr[num]!=item;num--);printf(\

問異常狀況

結(jié)果可能是輸出一個(gè)負(fù)值,由于item是個(gè)變量,分派了存儲(chǔ)空間,arr[-2]也是可以輸出的,由于arr只是個(gè)地址,經(jīng)過測(cè)試會(huì)找到item,printf他的地址

首先假使item在數(shù)組中,則不會(huì)出錯(cuò),可以輸出所在的位置。假使不在,則num最終會(huì)變?yōu)樨?fù)值,由于C語言沒有自動(dòng)對(duì)數(shù)組進(jìn)行下標(biāo)檢查,則會(huì)產(chǎn)生數(shù)組下標(biāo)越界,而且會(huì)繼續(xù)運(yùn)行,出現(xiàn)死循環(huán)。假使編譯器檢查,則會(huì)產(chǎn)生數(shù)組下標(biāo)越界出錯(cuò)。

二、簡(jiǎn)答題1、arr為整型數(shù)組,N為數(shù)組長(zhǎng)度-1,enumb為整型變量,以下函數(shù)負(fù)責(zé)找出arr數(shù)組中等于enumb的元素所在位置。For(i=N-1;arr[i]!=enumb;--i)Printf(“%d〞,i);

指出程序會(huì)出現(xiàn)的3種異常,并說明原因。

I為負(fù)數(shù)且運(yùn)行終止,i為正數(shù)且運(yùn)行終止,i一直遞減直到堆棧溢出

2、if(B)s1elses2;請(qǐng)問是什么結(jié)構(gòu),請(qǐng)用顯式結(jié)構(gòu)語言表示該程序段,用偽代碼寫出來(注明條件跳轉(zhuǎn)和強(qiáng)制跳轉(zhuǎn))。

if(b)gotoL1;

s2;gotoL2;L1:s1;L2:;

//

選擇結(jié)構(gòu)。Begin

Ifb!=0條件跳轉(zhuǎn)DoS1;

否則DoS2;

3、C語言中,常量存儲(chǔ)在哪兒?static全局變量和static局部變量存儲(chǔ)在哪兒?//

全局變量(外部變量)的說明之前再冠以static就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲(chǔ)方式,

靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個(gè)源程序,

當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,

在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,

因此可以避免在其它源文件中引起錯(cuò)誤。

static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防止在其他文件單元中被引用;

static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值;

//

2.局部變量,靜態(tài)局部變量,靜態(tài)全局變量的存儲(chǔ)位置局部變量:棧區(qū)局部靜態(tài)變量:靜態(tài)區(qū)

全局變量:靜態(tài)區(qū)的常量區(qū)全局靜態(tài)變量:靜態(tài)區(qū)網(wǎng)上的資料,科普下:

1、棧區(qū)(stack)—由編譯器自動(dòng)分派釋放,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。

2、堆區(qū)(heap)—一般由程序員分派釋放,若程序員不釋放,程序終止時(shí)可能由OS回收。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分派方式倒是類似于鏈表,呵呵。

3、全局區(qū)(靜態(tài)區(qū))(static)—,全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。-程序終止后由系統(tǒng)釋放

4、文字常量區(qū)—常量字符串就是放在這里的。程序終止后由系統(tǒng)釋放5、程序代碼區(qū)—存放函數(shù)體的二進(jìn)制代碼。

1、棧,就是那些由編譯器在需要的時(shí)候分派,在不需要的時(shí)候自動(dòng)明白的變量的存儲(chǔ)區(qū)。里面的變量尋常是局部變量、函數(shù)參數(shù)等。

2、堆,就是那些由new分派的內(nèi)存塊,他們的釋放編譯器不去管,由我們的應(yīng)用程序去控制,一般一個(gè)new就要對(duì)應(yīng)一個(gè)delete。假使程序員沒有釋放掉,那么在程序終止后,操作系統(tǒng)會(huì)自動(dòng)回收。

3、自由存儲(chǔ)區(qū),就是那些由malloc等分派的內(nèi)存塊,他和堆是十分相像的,不過它是用

free來終止自己的生命的。

4、全局/靜態(tài)存儲(chǔ)區(qū),全局變量和靜態(tài)變量被分派到同一塊內(nèi)存中,在以前的c語言中,全局變量又分為初始化的和未初始化的,在c++里面沒有這個(gè)區(qū)分了,他們共同占用同一塊內(nèi)存區(qū)。

5、常量存儲(chǔ)區(qū),這是一塊比較特別的存儲(chǔ)區(qū),他們里面存放的是常量,不允許修改。

三、填空題

1.選擇排序法的鏈表實(shí)現(xiàn)

(答案大約是while(p->next)..p=p->nexthead=head->nextreturnhead)//

P=(structnode*)malloc(sizeof());p->next=head;

head=p;//新建一個(gè)頭結(jié)點(diǎn)p=head->next;k=q=head;while(...){

//初始化,記不得了,大體結(jié)構(gòu)就這樣while(p){

if(q->next->datadata)q=p;p=p->next;}

If(q!=k){r=q-;

q->next=r->next;p->next=r;}}

P=head;

head=head->next;free(p)

returnhead;

//

(答案大約是while(p->next)..p=p->nexthead=head->nextreturn

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論