軟件評測師寫作專欄之參數傳遞的方式和圖結構14

各位學員大家好,大家在學習程序設計語言的時候,參數傳遞會涉及到傳值調用和引用調用,另外關於圖結構的知識會涉及到有向圖和無向圖。爲了讓大家快速掌握這方面的知識點,接下來就帶領大家一起來學習一下!

例題1:函數main()、f()的定義如下所示。調用函數f()時,第一個參數採用傳值方式,第二個參數採用傳引用方式,main()執行後輸出的值爲(  )?

A、2    

B、4    

C、5    

D、8

【昊洋詳解】:本題考查程序設計語言中傳值方式和引用方式的基礎知識。

傳值調用:在按值調用時,過程的形式參數取得的是實際參數的值。在這種情況下,形式參數實際上是過程中的局部變量,其值的改變不會導致調用點所傳送的實際參數的值發生改變,也就是數據的傳送是單向的。

引用調用:也叫作傳址調用,在按引用調用時,過程的形式參數取得的是實際參數所在的單元地址。在過程中,對該形式參數的引用相當於對實際參數所在的存儲單元的地址引用。任何改變形式參數值的操作會反映在該存儲單元中,也就是反映在實際參數中,因此數據的傳送是雙向的。

在題目中,main( )函數中,調用了函數f(),需要注意的是,第一個參數是1,採用傳值方式,傳遞給了f()函數中的x,第二個參數採用的是傳引用方式,x的地址傳遞給了f()函數中的a。此時一定不要混淆了兩個函數中的“x”,他們是不一樣的,只不過變量的名字相同而已。就好比兩個村子裏,都有一個叫做李明的小男孩,我們不能說是同一個人,他們就是局部變量的名字,只在本函數體內有效。

因此在f(int

x, int &a)函數中,x=2*a+1=2*2+1=5; a=x+3=5+3=8, 由於a是引用調用,所以a的值改變,對應main()函數中x也會改變,所以返回後x在main()函數中的值爲8。

故該題目的正確答案爲D。

 

例題2:對於下面的有向圖,其鄰接矩陣是一個( 1 )的矩陣。採用鄰接鏈表存儲時,頂點0的表結點個數爲 2,頂點3的表結點個數爲0,頂點1的表結點個數爲(2 )

1、A、3×4   

B、4×3      

C、6×6       

D、7×7

2、A、0      

B、1       

C、2         

D、3

【昊洋詳解】:本題考查數據結構中圖結構的基礎知識。

圖結構:圖G是由集合V和E構成的二元組,記作G=(V, E), 其中,V是圖中頂點的非空有限集合,E是圖中邊的有限集合。從數據結構的邏輯關係角度來看,圖中任意一個頂點都有可能與其他頂點有關係,而圖中所有頂點都有可能與某一頂點有關係。在圖中,數據元素用頂點表示,數據元素之間的關係用邊表示。

有向圖:若圖中每條邊都是有方向的,那麼頂點之間的關係用表示,它說明從vi到vj有一條有向邊(也稱爲弧)。vi是有向邊的起點,稱爲弧尾; vj是有向邊的終點,稱爲弧頭。所有邊都有方向的圖稱爲有向圖。

無向圖:若圖中的每條邊都是無方向的,頂點vi和vj之間的邊用(vi, vj)表示。因此, 在有向圖中與< vj,vi>分別表示兩條邊,而在無向圖中(vi, vj)與(vj, vi )表示的是同一條邊。

鄰接矩陣:表示頂點之間相鄰關係的矩陣。設G=(V,E)是一個圖,其中V={v1,v2,…,vn}。用鄰接矩陣法表示有向圖共需要n^2個空間,由於無向圖的鄰接矩陣一定具有對稱關係,所以扣除對角線爲零外,僅需要存儲上三角形或下三角形的數據即可,因此僅需要n(n-1)/2個空間。

因此有向圖有7個結點,則是一個7×7 的矩陣。

度、出度和入度:頂點v的度是指關聯於該頂點的邊的數目。若G爲有向圖,頂點的度表示該頂點的入度和出度之和。頂點的入度是以該頂點爲終點的有向邊的數目,而頂點的出度指以該頂點爲起點的有向邊的數目。題目中的頂點表結點個數指的就是有向圖該頂點的出度,在圖示中,指的就是指向其他頂點的邊的個數,例如頂點0指向其他頂點的邊爲2條,所以表結點個數爲 2,頂點3指向其他頂點的邊爲0條,所以表結點個數爲0,因此頂點1分別可以指向頂點2和5共計2條邊,所以表的結點個數爲2。

綜上所述,第一空的正確答案爲:D,第二空的正確答案爲:C。

鞏固練習題

(1)函數f( ),g( )的定義如圖所示,已知調用f( )時傳遞給其形參x的值是10,若以傳值方式調用g( ),剛函數f( )的返回值爲( )。

A、10   

B、15  

C、25   

D、30


(2)已知函數f( ),g( )的定義如下所示,調用函數f( )時傳遞給形參x的值是5,若g(a)採用引用調用方式傳遞參數,則函數f( )的返回值爲(1 );若g(a)採用傳值調用的方式傳遞參數,則函數f( )的返回值(2 )。其中,表達式“x>>1”的含義是將x的值右移1位,相當於x除以2。

1、 A、35        

B、32       

C、11        

D、7

2、 A、35        

B、32       

C、11        

D、7


(3)調用函數時若是引用調用方式,則是將( 1 )。下面所定義的函數f1爲值調用方式,函數f2爲引用調用方式。若有表達式x=f1(5),則函數調用執行完成後,該表達式中x獲得的值爲( 2 )。

1、 A、實參的值傳給形參     

B、形參的值傳給實參  

C、實參的地址傳給形參  

D、形參的地址傳給實參

2、 A、5  

B、20  

C、36  

D、45


練習題參考答案

(1)解析:本題考察傳值調用和引用調用的基礎知識。

傳值調用:在按值調用時,過程的形式參數取得的是實際參數的值。在這種情況下,形式參數實際上是過程中的局部變量,其值的改變不會導致調用點所傳送的實際參數的值發生改變,也就是數據的傳送是單向的。

所以函數f()中x的值傳遞到函數g()之後,傳遞回來的值不影響原來在函數f()中x的值,返回的值會賦值給y。即:y=g(x)=10+5=15,而x在函數f()中,還是10,所以最終x+y=10+15=25。

故該題目的正確答案爲:C。

 

(2)解析:本題考察傳值調用和引用調用的基礎知識。

引用調用:在按引用調用時,過程的形式參數取得的是實際參數所在的單元地址。在過程中,對該形式參數的引用相當於對實際參數所在的存儲單元的地址引用。任何改變形式參數值的操作會反映在該存儲單元中,也就是反映在實際參數中,因此數據的傳送是雙向的。

第一空採用的是引用調用方式執行,x=5,右移一位之後a=2(注意不是2.5,偶數變爲原來的一半,奇數變爲原數減1的一半),函數g中的a的地址賦予了此時局部變量x,最後得出a=2*3=6,即a這時的值被修改爲6,最後a+x=6+5=11,故第一空的正確答案爲C。

傳值調用:在按值調用時,過程的形式參數取得的是實際參數的值。在這種情況下,形式參數實際上是過程中的局部變量,其值的改變不會導致調用點所傳送的實際參數的值發生改變,也就是數據的傳送是單向的。

第二空採用的是傳值調用方式執行,x=5,函數g中x=2*3=6,但a這時的值仍然爲2,最後a+x=2+5=7,故第二空的正確答案爲D。

(3)解析:本題考查函數引用調用的基礎知識。

傳址調用(引用調用):在按引用調用時,過程的形式參數取得的是實際參數所在的單元地址,故第一空的正確答案是C。

傳值調用:在按值調用時,過程的形式參數取得的是實際參數的值。

由於函數f1採用傳值調用,x值在函數f1中不發生變化,值一直是5。函數f2採用傳址調用,會對b的值產生影響,其中參數b的地址會傳遞給函數f2中的參數x,其中&就是獲取b的地址的符號。

在函數f1中,執行b=x-1後b=4;函數f2中x=2*x+1=2*4+1=9,返回後函數f1後,b的值也就變成了9,所以最後b*x=5*9=45,故第二空的正確答案爲D。

作者唯一官方個人微信公衆號(昊洋與你一起成長):HYJY20180101

寫於2020年8月29日

作者:昊洋講師

版權所有,侵權必究

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章