孫學(xué)進(jìn) 王德貴
我們繼續(xù)學(xué)習(xí)XRmaker的條件控制與循環(huán)控制,并制作輸出素?cái)?shù)的案例。近期XRmaker的版本更新了,我們這期的版本與之前的6篇在資源上有些差異,但程序代碼沒有變化。
1.順序結(jié)構(gòu)
順序結(jié)構(gòu)是最簡單的程序結(jié)構(gòu),程序中的操作是按照它們在源代碼中的排列順序,自上而下依次執(zhí)行。
2.分支結(jié)構(gòu)
也稱為選擇結(jié)構(gòu),用于判斷給定的條件,進(jìn)而控制程序的流程。它會(huì)根據(jù)某個(gè)特定的條件進(jìn)行判斷后,選擇其中一支執(zhí)行。
(1)單分支:判斷條件表達(dá)式的值,如果值為真就執(zhí)行語句塊,否則執(zhí)行后面的語句。
(2)雙分支:判斷條件表達(dá)式的值,如果值為真就執(zhí)行語句塊1,否則執(zhí)行語句塊2。
(3)多分支:判斷條件表達(dá)式1的值,如果值為真就執(zhí)行語句塊1,否則判斷條件表達(dá)式2的值,如果值為真,執(zhí)行語句塊2,如果條件表達(dá)式2的值為假,則執(zhí)行語句塊3,這是三分支的典型流程圖。
(4)嵌套
嵌套即是分支語句中還有分支語句,可以多重嵌套。
3.循環(huán)結(jié)構(gòu)
(1)定義
循環(huán)結(jié)構(gòu)是指在程序中需要反復(fù)執(zhí)行某個(gè)或某些操作,直到條件為假或?yàn)檎鏁r(shí)才停止循環(huán)的一種程序結(jié)構(gòu)。
(2)三要素:循環(huán)變量初始化、循環(huán)體和循環(huán)終止條件。
每個(gè)循環(huán)變量初始化后,要控制變量的變化,再確定終止條件,確定循環(huán)的次數(shù),最后就是要反復(fù)執(zhí)行的語句,稱為循環(huán)體。
(3)流程圖
循環(huán)結(jié)構(gòu)在程序框圖中是利用判斷框來表示,兩個(gè)出口分別對應(yīng)著條件成立和條件不成立時(shí)所執(zhí)行的不同指令,條件成立則指向循環(huán)體,條件不成立則退出循環(huán)。
(4)嵌套
在循環(huán)體中還有循環(huán)結(jié)構(gòu),可以多重嵌套。嵌套層數(shù)越多,復(fù)雜度越高,如果數(shù)據(jù)量大,則運(yùn)行緩慢。
在XRmaker中,條件控制沒有雙分支,只有兩個(gè)單分支結(jié)構(gòu)“如果…那么”“如果不…那么”的積木塊,即判斷條件表達(dá)式的值是否為真(假),如果為真(假),則執(zhí)行結(jié)構(gòu)內(nèi)積木,否則跳出循環(huán)執(zhí)行后面的積木。
這兩個(gè)分支結(jié)構(gòu)放在一起,如果條件表達(dá)式一樣,其實(shí)就類似一個(gè)雙分支結(jié)構(gòu),程序設(shè)計(jì)時(shí)可以靈活運(yùn)用這個(gè)特點(diǎn)。
1.如果…那么
這是分支語句的基本構(gòu)成,條件成立,即條件表達(dá)式的值為真才執(zhí)行。例如,如果一個(gè)數(shù)除以2的余數(shù)為0,那么它就是偶數(shù)。
2.如果不…那么
這是否定的分支語句,即條件表達(dá)式的值為假時(shí),才會(huì)執(zhí)行。例如,如果不是一個(gè)數(shù)除以2的余數(shù)為0,那么它就是奇數(shù)?;蛘呙枋鰹椋喝绻粋€(gè)數(shù)除以2的余數(shù)不為0,那么它就是奇數(shù)。這兩種形式的運(yùn)行結(jié)果是一樣的。
在XRmaker中,循環(huán)控制有4個(gè)積木,它們的使用稍有不同。
1.重復(fù)執(zhí)行n次
一般用于有確定次數(shù)或是在一定范圍內(nèi)的循環(huán)結(jié)構(gòu)中,不需要判斷條件表達(dá)式。需要注意的是,次數(shù)不能使用變量。因?yàn)闆]有整形(int)數(shù)據(jù),即使取整運(yùn)算,也不能正常運(yùn)行。這是軟件當(dāng)前版本的bug,我已經(jīng)提交反饋,以后會(huì)修正。
我們前面講過的攝像機(jī)運(yùn)動(dòng),就是前進(jìn)100次,每次0.2米,那么運(yùn)動(dòng)的距離就是20米。
2.循環(huán)
循環(huán)積木塊,需要滿足條件表達(dá)式(條件表達(dá)式的值為真)才會(huì)執(zhí)行。
3.重復(fù)執(zhí)行直到
重復(fù)執(zhí)行一個(gè)程序段,直到條件表達(dá)式的值為真才結(jié)束循環(huán)。
4.重復(fù)執(zhí)行
這是無條件循環(huán),即程序會(huì)一直循環(huán)下去,如果沒有終止條件,則相當(dāng)于一個(gè)死循環(huán),因此設(shè)計(jì)時(shí)要根據(jù)情況謹(jǐn)慎使用。
1.等待N秒:在執(zhí)行程序時(shí),需要暫停運(yùn)行,等待一定時(shí)間,可以是整數(shù),也可以是浮點(diǎn)數(shù)。
2.在…之前一直等待:在條件表達(dá)式為真時(shí),才執(zhí)行下一條語句,而在此之前一直等待。
3.停止所有腳本:即停止運(yùn)行所有程序。
這個(gè)案例主要是應(yīng)用所學(xué)知識(shí),輸出一定范圍內(nèi)的素?cái)?shù)。
1.資源列表
輸出素?cái)?shù)的算法,采用最基本,也最容易理解的方法。就是從2開始檢驗(yàn),是不是能被小于它的數(shù)整除,如果不能被任何數(shù)整除則為素?cái)?shù),通過模型顯示出來。
比如,輸出50以內(nèi)的素?cái)?shù),輸出方法列舉以下三種,均為雙重循環(huán),內(nèi)循環(huán)均采用“重復(fù)執(zhí)行-直到”型,當(dāng)然還有多種方法,不多述。
(1)重復(fù)N次-重復(fù)執(zhí)行直到
外循環(huán)用“重復(fù)執(zhí)行N次”,因?yàn)閺?開始遞增,所以重復(fù)49次,即可輸出50以內(nèi)素?cái)?shù)。
(2)重復(fù)執(zhí)行-重復(fù)執(zhí)行直到
外循環(huán)用“重復(fù)執(zhí)行”,從2開始遞增,輸出素?cái)?shù),由于重復(fù)執(zhí)行沒有終止條件,是無條件循環(huán),因此需要判斷大于50時(shí),則停止所有腳本,結(jié)束程序。
(3)循環(huán)-重復(fù)執(zhí)行直到
外循環(huán)用“循環(huán)”,從2開始遞增,要滿足條件“小于50”,即可輸出50以后素?cái)?shù)。
2.小結(jié)
本節(jié)內(nèi)容主要是學(xué)習(xí)“控制”模塊中常用的條件控制和循環(huán)控制,其他控制在后面章節(jié)學(xué)習(xí)。
本案例主要是利用條件、循環(huán)、變量、運(yùn)算等所學(xué)知識(shí)點(diǎn)進(jìn)行基本程序設(shè)計(jì),而程序沒有進(jìn)行優(yōu)化。
輸出素?cái)?shù)的程序?qū)崿F(xiàn)方法很多,各位朋友可以自行研究。