=2)個(gè)變量間不通過中間變量直接換值的一種算法,該算法思想簡單、易懂、規(guī)律性強(qiáng),代"/>

亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        變量間直接換值的一種算法

        2008-12-31 00:00:00馮小強(qiáng)
        計(jì)算機(jī)教育 2008年14期

        摘要:本文通過對變量間直接換值方法的探討,提出了n(n>=2)個(gè)變量間不通過中間變量直接換值的一種算法,該算法思想簡單、易懂、規(guī)律性強(qiáng),代碼編寫簡潔且不易出錯(cuò)。通過教學(xué)證明,學(xué)生能容易地深入領(lǐng)會(huì)這種直接換值算法的核心思想,在計(jì)算機(jī)程序設(shè)計(jì)教學(xué)方面有一定的借鑒意義。

        關(guān)鍵詞:變量;直接;換值;算法

        中圖分類號:G642文獻(xiàn)標(biāo)識碼:A

        1引言

        變量間值的交換是計(jì)算機(jī)程序設(shè)計(jì)中常見的一種過程,一般的對于2個(gè)變量,例如變量A和B,當(dāng)要交換它們的值時(shí),需要借助于一個(gè)中間變量,例如變量C,利用中間變量C提供的暫存儲空來協(xié)助完成變量A和B值的交換。如下是用c語言描述的這種算法:

        int a,b,c;/*定義三個(gè)變量*/ c=a;/*c作為中間變量先保存a的值*/

        a=b; /*將b的值換給a*/b=c;/*把c中預(yù)先保存的a的值換給b*/

        在這種2個(gè)變量換值的算法中,中間變量必不可少,而當(dāng)參與換值操作的變量的個(gè)數(shù)為n(n>2)時(shí),必須對參與換值的變量逐個(gè)進(jìn)行換值操作。而無論參與換值的變量個(gè)數(shù)是2還是n(n>2),要完成這些變量間值的交換,通常的方法都需要預(yù)先定義至少一個(gè)中間變量,利用中間變量提供的內(nèi)存空間協(xié)助完成換值操作,這個(gè)多出的中間變量必然會(huì)占用一定的內(nèi)存空間。嚴(yán)重的是,當(dāng)n值很大時(shí),實(shí)現(xiàn)換值過程的程序代碼就會(huì)過于繁冗,并且由于要反復(fù)使用中間變量,編碼過程就會(huì)顯得枯燥且容易出錯(cuò)。筆者考慮,能否有一種算法能夠不使用中間變量,而用一種統(tǒng)一的、很有規(guī)律性的公式來直接完成對n(n>=2)個(gè)變量的換值操作。本文所要討論的就是這種更簡單、更具規(guī)律性的通用性算法。

        2變量間的直接換值算法

        在計(jì)算機(jī)程序設(shè)計(jì)中,變量間的相互換值,不論參與換值的變量的數(shù)目n(n>=2)有多大,在過程式單進(jìn)程運(yùn)行的程序中,都是依次由每2個(gè)變量進(jìn)行值的交換,進(jìn)而完成所有變量的換值操作。因此,2個(gè)變量間值的交換是最基本、最常見也是較特殊的一種換值過程,下面將分別對n(n>2)個(gè)變量和2個(gè)變量間的直接換值算法進(jìn)行討論。

        2.1n(n>2)個(gè)變量間的直接換值

        這里討論的多個(gè)變量間的直接換值是指如下情形。例如,對于a、b、c、d、e、f、g這7個(gè)變量,如圖1題目要求將e的值換給d,d的值換給c,c的值換給b,b的值換給a,a的值換給e。這里列出的7個(gè)變量中有5個(gè)變量參與了換值操作,并且換值均是變量的初始值。對于這種多個(gè)變量間值的交換,依據(jù)題目的要求,我們總能將參與換值的變量排成一個(gè)有向序列,在這個(gè)序列中,發(fā)生換值操作的變量相鄰,箭頭所指方向是換值的正方向,進(jìn)行換值時(shí),當(dāng)前變量沿著箭頭所指的換值序列的正方向,將自己的值賦給與它相鄰的變量。具體換值步驟如下:

        首先,依據(jù)換值要求,將參與換值的變量排成一個(gè)有向換值序列,如圖1,接下來,從中任選一個(gè)變量作為“和值變量”,這個(gè)“和值變量”用來保存所有參與換值操作的變量的和值,然后,從“和值變量”開始,利用公式,沿?fù)Q值序列的正方向?qū)?dāng)前變量的值賦給與其相鄰的變量。接下來,使相鄰變量成為新的當(dāng)前變量,將其值賦給與它相鄰的變量。沿著換值序列的正方向,依次變換當(dāng)前變量進(jìn)行換值操作,直到所有的變量都得到換值為止。對于上面提到的例子:首先,依據(jù)題目要求將其中參與換值的5個(gè)變量排成一個(gè)有向換值列,如圖1所示。圖1中,箭頭的指向表示換值的正方向。接下來,從換值序列中挑選一個(gè)變量作為“和值變量”來保存所有參與換值變量的和值。如表1所示:選擇變量a作為和值變量來保存5個(gè)參與換值操作的變量的和值,然后,從變量a開始,使a成為當(dāng)前變量,利用公式e=a-b-c-d-e將a的初始值賦給相鄰變量e;接下來使e成為當(dāng)前變量,此時(shí)變量e中保存的是a的值,利用公式d=a-b-c-d-e將e的初始值賦給相鄰變量d;后面依次利用公式改變當(dāng)前變量,完成對c、b、a的換值操作。具體步驟見表1。表1和表2分別對應(yīng)的是圖1和圖2所示換值序列的換值實(shí)現(xiàn)步驟。

        通過對這種方法的反復(fù)研究,我們可以得出:在所形成的換值序列中,各個(gè)變量的地位是平等的,保存所有變量和的值的“和值變量”的選擇是任意的。如表1所示,選擇變量a來作為“和值變量”,我們當(dāng)然也可以選擇其他變量來保存和的值。不過一旦選定保存和值的變量(如變量a),就必須從此變量開始,使它第一個(gè)成為當(dāng)前變量,沿著換值序列的正方向,將當(dāng)前變量的值賦給它的相鄰變量(如變量e),沿正方向依次變換當(dāng)前變量(如依次為e、d、c、b),依次完成對各變量相鄰變量(依次為d、c、b、a)的換值操作。

        值得一提的是:和值變量的選擇是任意的;給各個(gè)變量換值的公式在形式上是統(tǒng)一的(即:等待得到換值的變量

        =和值變量-除和值變量外的所有參與換值的變量的和);換值序列的正方向取決于當(dāng)前變量將要換值給哪個(gè)變量;換值過程中,第一個(gè)得到換值的變量一定是“和值變量”在換值序列正方向上的相鄰變量。

        本算法對于n=2同樣適用,當(dāng)n=2時(shí)就成為常見的兩個(gè)變量間值的互換,即就是如下2.2所討論的情形。

        2.22個(gè)變量間的直接換值

        n=2時(shí),首先依據(jù)換值的要求形成如圖2所示的環(huán)狀換值序列。如表2所示是分別以變量a、b作為和值變量時(shí)的換值步驟,這就是有些程序設(shè)計(jì)書里介紹的2個(gè)變量間的直接換值算法。

        這里分別選擇變量a和b作為和值變量,從各自的實(shí)現(xiàn)步驟中同樣可以看出:對于兩個(gè)變量間的直接換值,和值變量的選擇是任意的,保存和值的變量一旦選定,其換值的步驟是固定的,換值的公式也是統(tǒng)一的。

        3結(jié)束語

        本算法找到了n(n>=2)個(gè)變量間直接換值的方法,我們熟識的兩個(gè)變量的直接換值是這種算法中的一個(gè)實(shí)例。該算法的核心思想是:“對于n(n>=2)個(gè)參與換值的變量,先選擇一個(gè)變量作為“和值變量”來保存所有參與換值的變量的和值,然后用“和值變量”的值減去除“和值變量”以外的其余n-1個(gè)變量的值,得到其中1個(gè)變量的初始值,將這個(gè)值賦給應(yīng)該換得該值的變量,用同樣的公式反復(fù)運(yùn)算,直到完成對所有變量的換值操作”。在換值過程中,從換值開始一直到最后一個(gè)變量完成換值前,一直存在著一個(gè)“完全”的狀態(tài):即就是:總有1個(gè)變量保存著n個(gè)變量的和值,其余n-1個(gè)變量各自保存著n-1個(gè)變量的初始值。我們暫且稱這種狀態(tài)為“全態(tài)”,這種狀態(tài)的存在可以保證每次運(yùn)算總能得到其中1個(gè)變量的初始值。一旦選定保存和值的變量,后續(xù)步驟必須嚴(yán)格按照確定的換值序列的順序依次進(jìn)行換值,這樣才能保證“全態(tài)”的存在。

        本算法的創(chuàng)新點(diǎn):目前對于變量間不通過中間變量而直接換值的算法,往往只是針對2個(gè)變量,這就很難發(fā)現(xiàn)其中的數(shù)學(xué)規(guī)律,在實(shí)際的C語言教學(xué)中,學(xué)生也就很難深入的理解這種直接換值算法的思想。作者突破這種常見的2個(gè)變量間直接換值的算法思想,總結(jié)出多個(gè)變量間直接換值的內(nèi)在規(guī)律,提出了n(n>=2)個(gè)變量間直接換值的一種通用算法。在實(shí)際教學(xué)中,通過講授這種算法,學(xué)生能很容易地深入理解到變量間直接換值算法的核心思想,在計(jì)算機(jī)程序設(shè)計(jì)教學(xué)方面具有一定的實(shí)際意義。該算法在TC2.0環(huán)境下通過編碼實(shí)現(xiàn),經(jīng)驗(yàn)證為實(shí)用、可行,具體實(shí)現(xiàn)中,代碼編寫簡潔、規(guī)律性強(qiáng)、不易出錯(cuò)且簡單易懂。

        參考文獻(xiàn):

        [1] Brian W. Kernighan, Dennis M. Ritchie. The C programming Language, 2nd edition[M]. Prentice-Hall,1998.

        [2] 譚浩強(qiáng). C程序設(shè)計(jì)(第二版)[M]. 北京:清華大學(xué)出版社,1999.

        [3] 原馳. 變量的一種直接換值法[J]. 測控技術(shù),2002,21(4):54.

        亚洲欧美日韩一区二区三区在线 | 亚洲成a人片在线观看无码3d | 老师翘臀高潮流白浆| a观看v视频网站入口免费| 视频一区精品自拍| 亚洲熟妇夜夜一区二区三区| 久久久一本精品久久久一本| 精品一区二区三区人妻久久福利| 麻豆精品国产av在线网址| 无码中文亚洲av影音先锋| 亚洲色大成网站www久久九| 国产av日韩a∨亚洲av电影| 性一交一乱一伦一视频一二三区| 美腿丝袜网址亚洲av| 成年美女黄网站色大免费视频 | 国产麻豆精品一区| 亚洲 无码 制服 丝袜 自拍| 国产女主播在线免费看| 日韩性爱视频| 日韩精品无码中文字幕电影| 国产在线精品一区二区不卡| 久久精品国产亚洲5555| 久久亚洲国产高清av一级| 中文字幕精品一区久久| 黄桃av无码免费一区二区三区| 亚洲男同帅gay片在线观看| 人妻无码AⅤ不卡中文字幕| 综合中文字幕亚洲一区二区三区| 国产成人亚洲一区二区| 日本怡春院一区二区三区| 久久成人免费电影| 偷拍美女一区二区三区视频| 高清午夜福利电影在线| 欧美天天综合色影久久精品| 亚洲一区二区三区av链接| 国产亚洲精品综合在线网站| 日韩精品免费一区二区三区观看| 国产精品熟女视频一区二区| 尤物99国产成人精品视频| 麻豆国产VA免费精品高清在线 | 亚洲综合偷自成人网第页色|