=2)個變量間不通過中間變量直接換值的一種算法,該算法思想簡單、易懂、規律性強,代"/>
999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?摘要:本文通過對變量間直接換值方法的探討,提出了n(n>=2)個變量間不通過中間變量直接換值的一種算法,該算法思想簡單、易懂、規律性強,代碼編寫簡潔且不易出錯。通過教學證明,學生能容易地深入領會這種直接換值算法的核心思想,在計算機程序設計教學方面有一定的借鑒意義。
關鍵詞:變量;直接;換值;算法
中圖分類號:G642文獻標識碼:A
1引言
變量間值的交換是計算機程序設計中常見的一種過程,一般的對于2個變量,例如變量A和B,當要交換它們的值時,需要借助于一個中間變量,例如變量C,利用中間變量C提供的暫存儲空來協助完成變量A和B值的交換。如下是用c語言描述的這種算法:
int a,b,c;/*定義三個變量*/ c=a;/*c作為中間變量先保存a的值*/
a=b; /*將b的值換給a*/b=c;/*把c中預先保存的a的值換給b*/
在這種2個變量換值的算法中,中間變量必不可少,而當參與換值操作的變量的個數為n(n>2)時,必須對參與換值的變量逐個進行換值操作。而無論參與換值的變量個數是2還是n(n>2),要完成這些變量間值的交換,通常的方法都需要預先定義至少一個中間變量,利用中間變量提供的內存空間協助完成換值操作,這個多出的中間變量必然會占用一定的內存空間。嚴重的是,當n值很大時,實現換值過程的程序代碼就會過于繁冗,并且由于要反復使用中間變量,編碼過程就會顯得枯燥且容易出錯。筆者考慮,能否有一種算法能夠不使用中間變量,而用一種統一的、很有規律性的公式來直接完成對n(n>=2)個變量的換值操作。本文所要討論的就是這種更簡單、更具規律性的通用性算法。
2變量間的直接換值算法
在計算機程序設計中,變量間的相互換值,不論參與換值的變量的數目n(n>=2)有多大,在過程式單進程運行的程序中,都是依次由每2個變量進行值的交換,進而完成所有變量的換值操作。因此,2個變量間值的交換是最基本、最常見也是較特殊的一種換值過程,下面將分別對n(n>2)個變量和2個變量間的直接換值算法進行討論。
2.1n(n>2)個變量間的直接換值
這里討論的多個變量間的直接換值是指如下情形。例如,對于a、b、c、d、e、f、g這7個變量,如圖1題目要求將e的值換給d,d的值換給c,c的值換給b,b的值換給a,a的值換給e。這里列出的7個變量中有5個變量參與了換值操作,并且換值均是變量的初始值。對于這種多個變量間值的交換,依據題目的要求,我們總能將參與換值的變量排成一個有向序列,在這個序列中,發生換值操作的變量相鄰,箭頭所指方向是換值的正方向,進行換值時,當前變量沿著箭頭所指的換值序列的正方向,將自己的值賦給與它相鄰的變量。具體換值步驟如下:
首先,依據換值要求,將參與換值的變量排成一個有向換值序列,如圖1,接下來,從中任選一個變量作為“和值變量”,這個“和值變量”用來保存所有參與換值操作的變量的和值,然后,從“和值變量”開始,利用公式,沿換值序列的正方向將當前變量的值賦給與其相鄰的變量。接下來,使相鄰變量成為新的當前變量,將其值賦給與它相鄰的變量。沿著換值序列的正方向,依次變換當前變量進行換值操作,直到所有的變量都得到換值為止。對于上面提到的例子:首先,依據題目要求將其中參與換值的5個變量排成一個有向換值列,如圖1所示。圖1中,箭頭的指向表示換值的正方向。接下來,從換值序列中挑選一個變量作為“和值變量”來保存所有參與換值變量的和值。如表1所示:選擇變量a作為和值變量來保存5個參與換值操作的變量的和值,然后,從變量a開始,使a成為當前變量,利用公式e=a-b-c-d-e將a的初始值賦給相鄰變量e;接下來使e成為當前變量,此時變量e中保存的是a的值,利用公式d=a-b-c-d-e將e的初始值賦給相鄰變量d;后面依次利用公式改變當前變量,完成對c、b、a的換值操作。具體步驟見表1。表1和表2分別對應的是圖1和圖2所示換值序列的換值實現步驟。


通過對這種方法的反復研究,我們可以得出:在所形成的換值序列中,各個變量的地位是平等的,保存所有變量和的值的“和值變量”的選擇是任意的。如表1所示,選擇變量a來作為“和值變量”,我們當然也可以選擇其他變量來保存和的值。不過一旦選定保存和值的變量(如變量a),就必須從此變量開始,使它第一個成為當前變量,沿著換值序列的正方向,將當前變量的值賦給它的相鄰變量(如變量e),沿正方向依次變換當前變量(如依次為e、d、c、b),依次完成對各變量相鄰變量(依次為d、c、b、a)的換值操作。
值得一提的是:和值變量的選擇是任意的;給各個變量換值的公式在形式上是統一的(即:等待得到換值的變量
=和值變量-除和值變量外的所有參與換值的變量的和);換值序列的正方向取決于當前變量將要換值給哪個變量;換值過程中,第一個得到換值的變量一定是“和值變量”在換值序列正方向上的相鄰變量。
本算法對于n=2同樣適用,當n=2時就成為常見的兩個變量間值的互換,即就是如下2.2所討論的情形。
2.22個變量間的直接換值
n=2時,首先依據換值的要求形成如圖2所示的環狀換值序列。如表2所示是分別以變量a、b作為和值變量時的換值步驟,這就是有些程序設計書里介紹的2個變量間的直接換值算法。

這里分別選擇變量a和b作為和值變量,從各自的實現步驟中同樣可以看出:對于兩個變量間的直接換值,和值變量的選擇是任意的,保存和值的變量一旦選定,其換值的步驟是固定的,換值的公式也是統一的。
3結束語
本算法找到了n(n>=2)個變量間直接換值的方法,我們熟識的兩個變量的直接換值是這種算法中的一個實例。該算法的核心思想是:“對于n(n>=2)個參與換值的變量,先選擇一個變量作為“和值變量”來保存所有參與換值的變量的和值,然后用“和值變量”的值減去除“和值變量”以外的其余n-1個變量的值,得到其中1個變量的初始值,將這個值賦給應該換得該值的變量,用同樣的公式反復運算,直到完成對所有變量的換值操作”。在換值過程中,從換值開始一直到最后一個變量完成換值前,一直存在著一個“完全”的狀態:即就是:總有1個變量保存著n個變量的和值,其余n-1個變量各自保存著n-1個變量的初始值。我們暫且稱這種狀態為“全態”,這種狀態的存在可以保證每次運算總能得到其中1個變量的初始值。一旦選定保存和值的變量,后續步驟必須嚴格按照確定的換值序列的順序依次進行換值,這樣才能保證“全態”的存在。
本算法的創新點:目前對于變量間不通過中間變量而直接換值的算法,往往只是針對2個變量,這就很難發現其中的數學規律,在實際的C語言教學中,學生也就很難深入的理解這種直接換值算法的思想。作者突破這種常見的2個變量間直接換值的算法思想,總結出多個變量間直接換值的內在規律,提出了n(n>=2)個變量間直接換值的一種通用算法。在實際教學中,通過講授這種算法,學生能很容易地深入理解到變量間直接換值算法的核心思想,在計算機程序設計教學方面具有一定的實際意義。該算法在TC2.0環境下通過編碼實現,經驗證為實用、可行,具體實現中,代碼編寫簡潔、規律性強、不易出錯且簡單易懂。
參考文獻:
[1] Brian W. Kernighan, Dennis M. Ritchie. The C programming Language, 2nd edition[M]. Prentice-Hall,1998.
[2] 譚浩強. C程序設計(第二版)[M]. 北京:清華大學出版社,1999.
[3] 原馳. 變量的一種直接換值法[J]. 測控技術,2002,21(4):54.