




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章程序設(shè)計(jì)基礎(chǔ)
第四節(jié)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
循環(huán)結(jié)構(gòu)是專門解決按照一定的條件在程序的某處重復(fù)執(zhí)行具有特定功能的某一程序段這樣的問(wèn)題的。循環(huán)結(jié)構(gòu)DOWHILE循環(huán)DOWHILE<條件><循環(huán)體>ENDDOFOR循環(huán)FOR<循環(huán)變量>=<初值>TO<終值>[STEP<步長(zhǎng)>]<循環(huán)體>ENDFOR/NEXTSCAN循環(huán)SCAN[<范圍>][FOR/WHILE<條件>]<循環(huán)體>ENDSCAN一、條件循環(huán)語(yǔ)句
(當(dāng)型循環(huán)語(yǔ)句)
DOWHILE
<條件表達(dá)式>
〈條件表達(dá)式值為真時(shí)需反復(fù)執(zhí)行的語(yǔ)句系列〉ENDDO條件?循環(huán)體ENDDO后面的語(yǔ)句NY條件?
DOWHILE<條件表達(dá)式>
〈條件表達(dá)式值為真時(shí)
需反復(fù)執(zhí)行的語(yǔ)句系列〉
ENDDO循環(huán)體循環(huán)說(shuō)明部分循環(huán)結(jié)束部分功能:當(dāng)條件表達(dá)式值為真時(shí)反復(fù)執(zhí)行循環(huán)體,直到條件表達(dá)式值為假時(shí)為止。例:計(jì)算1+2+3+…+100的和。開(kāi)始給變量賦初值
s=0,i=1i<=100?s=s+ii=i+1輸出求和結(jié)果s結(jié)束YNclear
s=0
i=1
dowhilei<=100
s=s+i
i=i+1
enddo
?”1-100的和為:”,s
return
N=〈循環(huán)次數(shù)〉
I=1
DOWHILEI<=N
〈執(zhí)行某任務(wù)的語(yǔ)句系列〉
I=I+1
ENDDO
循環(huán)控制部分可以分為三部分:(1)循環(huán)控制變量初始值的設(shè)置。(2)循環(huán)控制變量終止值的設(shè)定。(3)循環(huán)控制變量值的修改。例:在顯示器上逐行顯示1~15這15個(gè)數(shù)字。CLEARI=1DOWHILEI<=15?II=I+1ENDDORETURN
例:從鍵盤上輸入10個(gè)數(shù),求這十個(gè)數(shù)之和。CLEARS=0K=1DOWHILEK<=10INPUT‘請(qǐng)輸入一個(gè)數(shù):’TOAS=S+AK=K+1ENDDO?S例:編程求2+4+6+8+……+100
的值。例:從鍵盤輸入十個(gè)數(shù),判斷其中有幾個(gè)奇數(shù)、幾個(gè)偶數(shù)。例:從鍵盤輸入十個(gè)數(shù),顯示最大數(shù)、最小數(shù)。
CLEARINPUT'輸入一個(gè)數(shù):'TOXSTOREXTOYI=2DOWHILEI<=10INPUT'輸入一個(gè)數(shù):'TOAX=MAX(A,X)Y=MIN(A,Y)I=I+1ENDDO?'最大數(shù):'+ALLTRIM(str(X))+'最小數(shù):'+ALLTRIM(str(Y))例:從鍵盤輸入十個(gè)數(shù),顯示最大數(shù)、最小數(shù)。
CLEARINPUT'輸入一個(gè)數(shù):'TOXSTOREXTOYI=2DOWHILEI<=10INPUT'輸入一個(gè)數(shù):'TOAX=MAX(A,X)Y=MIN(A,Y)I=I+1ENDDO?'最大數(shù):'+ALLTRIM(str(X))+'最小數(shù):'+ALLTRIM(str(Y))例:從鍵盤輸入十個(gè)數(shù),顯示最大數(shù)、最小數(shù)。
CLEARINPUT'輸入第1個(gè)數(shù):'TOXSTOREXTOYI=2DOWHILEI<=10
J=ALLTRIM(str(I,2))INPUT'輸入第&j.個(gè)數(shù):'TOAX=MAX(A,X)Y=MIN(A,Y)I=I+1ENDDO?'最大數(shù):'+ALLTRIM(str(X))+'最小數(shù):'+ALLTRIM(str(Y))例:設(shè)s=1*2*3*4……*n,求S不大于400000時(shí)最大的n。CLEARN=1S=1DOWHILES<=400000N=N+1S=S*NENDDO?'N='+ALLT(STR(N-1))例:編程顯示用星號(hào)組成的平行四邊形。例:編程顯示用星號(hào)組成的三角形。例:編程顯示用星號(hào)組成的菱形。定位輸出命令命令基本格式:@<行,列>[SAY<表達(dá)式>]功能:在屏幕的指定行列輸出SAY子句的表達(dá)式值。說(shuō)明:(1)<行,列>表示數(shù)據(jù)在窗口中顯示的位置,行自頂向下編號(hào),列自左向右編號(hào),編號(hào)均從0開(kāi)始。行與列都是數(shù)值表達(dá)式。(2)<表達(dá)式>可以是常量、內(nèi)存變量、字段變量,也可以是任何類型合法的表達(dá)式。例:編程顯示用星號(hào)組成的平行四邊形。例:編程顯示用星號(hào)組成的三角形。例:編程顯示用星號(hào)組成的菱形。cleara=1b=1dowhileb<=9c=a*b
@a,8*(b-1)saystr(a,1)+'*'+str(b,1)+'='+str(c,2)b=b+1enddo例:編程輸出1*1=11*2=2…………1*9=9被乘數(shù)是1的九個(gè)乘法公式。1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=9cleara=1dowhilea<=9
b=1dowhileb<=9c=a*b
@a,8*(b-1)saystr(a,1)+'*'+str(b,1)+'='+str(c,2)
b=b+1enddo
a=a+1enddo例:編程顯示乘法口訣表,要求輸出八十一個(gè)公式。二、步長(zhǎng)型循環(huán)語(yǔ)句FOR
FOR〈變量名〉=〈數(shù)值表達(dá)式1〉TO〈數(shù)值表達(dá)式2〉[STEP〈數(shù)值表達(dá)式3〉]
〈循環(huán)體〉ENDFOR|NEXT
功能:當(dāng)〈變量名〉指定的變量之值沒(méi)有越過(guò)由〈數(shù)值表達(dá)式2〉確定的數(shù)值時(shí)反復(fù)執(zhí)行循環(huán)體,直到變量之值越過(guò)由〈數(shù)值表達(dá)式2〉確定的數(shù)值。初始值->循環(huán)控制變量變量值是否在初始值與終止值之間執(zhí)行循環(huán)體內(nèi)各語(yǔ)句循環(huán)控制變量=循環(huán)控制變量+步長(zhǎng)YN執(zhí)行ENDFOR后面的語(yǔ)句FOR〈變量名〉=〈數(shù)值表達(dá)式1〉TO〈數(shù)值表達(dá)式2〉[STEP〈數(shù)值表達(dá)式3〉]
〈循環(huán)體〉ENDFOR|NEXT
功能:當(dāng)〈變量名〉指定的變量之值沒(méi)有越過(guò)由〈數(shù)值表達(dá)式2〉確定的數(shù)值時(shí)反復(fù)執(zhí)行循環(huán)體,直到變量之值越過(guò)由〈數(shù)值表達(dá)式2〉確定的數(shù)值。例:在顯示器上逐行顯示1~30這30個(gè)數(shù)字。
CLEARFORI=1TO30STEP1?IENDFORCLEARI=1DOWHILEI<=30?II=I+1ENDDORETURN
例:求1+2+3+……+100的值。CLEARS=0FORI=1TO100STEP1S=S+INEXT?”1-100的和為:”,ss=0
i=1
dowhilei<=100
s=s+i
i=i+1
enddo
?”1-100的和為:”,sCLEARFORI=1TO5??IENDFOR?FORI=1TO10STEP2??IENDFOR?FORI=10TO1STEP-2??IENDFOR1234513579108642例:有一個(gè)由20個(gè)數(shù)組成的數(shù)列,它的前兩個(gè)數(shù)為0,1,第三個(gè)數(shù)為第一、第二個(gè)數(shù)之和,第四個(gè)數(shù)為第二、第三個(gè)數(shù)之和,以此類推,編程計(jì)算并顯示該數(shù)列。例、從鍵盤輸入一個(gè)正整數(shù),要求編程完成如下操作:(1)判斷這個(gè)整數(shù)是幾位數(shù);(2)分別顯示每個(gè)數(shù)位上的數(shù);(3)按照逆序顯示每個(gè)數(shù)位上的數(shù)字。例:編程顯示26個(gè)大寫英文字母和它們的ASCII碼值,每行顯示10個(gè)字母。例:編程程序,建立并輸出一個(gè)10×10的矩陣,該矩陣兩條對(duì)角線元素為1,其余元素均為0。例:若一個(gè)三位自然數(shù)的值等于該數(shù)各位數(shù)字的立方和,則這個(gè)自然數(shù)叫做“水仙花數(shù)”,例如153=1^3+5^3+3^3,153是一個(gè)水仙花數(shù),請(qǐng)編寫程序求出所有水仙花數(shù)。clear
forn=100to999
w=str(n,3)
a=substr(w,1,1)
b=substr(w,2,1)
c=substr(w,3,1)
ifn=val(a)^3+val(b)^3+val(c)^3
?n
endif
endfork=0fora=1to9forb=0to9forc=0to9m=100*a+10*b+cn=a**3+b**3+c**3ifm=nk=k+1@k,5saym
endif
nextnextnext三、掃描循環(huán)語(yǔ)句
模式一:
…
USE〈表文件〉
…
GOTOP
DOWHILEEOF()=.F.
〈處理一條記錄的命令序列〉
SKIP
ENDDO
USE
…!EOF()NOTEOF()例:將jsdn.dbf中所有職稱為教授的基本工資增加100元,副教授增加70元,講師增加50元,助教增加30元。Usejsdndowhilenoteof()docasecase職稱="教授"
repl
基本工資with基本工資+100case職稱="副教授"
repl
基本工資with基本工資+70case職稱="講師"
repl
基本工資with基本工資+50case職稱="助教"
repl
基本工資with基本工資+30
endcaseskipenddouse處理一條記錄的命令序列模式二:
GOBOTTOM
DOWHILENOTBOF()
<處理一條記錄的命令序列>
SKIP–1
ENDDO模式三:
LOCATEFOR<邏輯表達(dá)式>
DOWHILEFOUND()
<對(duì)滿足條件的記錄作某種處理>
CONTINUE
ENDDO
本語(yǔ)句的功能是在打開(kāi)的當(dāng)前表中從上到下移動(dòng)記錄指針,當(dāng)遇到符合指定條件的記錄時(shí)就執(zhí)行循環(huán)體中的各條語(yǔ)句。SCAN[<范圍>][FOR〈條件1〉]
<循環(huán)體>
ENDSCAN例:顯示jsdn.dbf中女教師的姓名和職稱。usejsdnlocatefor性別=’女’dowhilefound()?姓名+’‘+職稱
continueenddousejsdnscanfor性別=’女’
?姓名+’‘+職稱endscanSCAN
<循環(huán)體>
ENDSCAN例:逐條顯示student表中所有記錄,每次一條記錄,由用戶按任意鍵顯示下一條記錄。
clearusestudentscandisplaywait“按任意鍵顯示下一條記錄……”endscanuse例:已知一次歌手大獎(jiǎng)賽共有八位評(píng)委,所有歌手的姓名和評(píng)委給他們打的分?jǐn)?shù)放在gs.dbf中,編程計(jì)算每位歌手的最后得分,并存入“最后得分”字段。最后得分的計(jì)算方法是:去掉一個(gè)最高分,再去掉一個(gè)最低分,取剩余六個(gè)分?jǐn)?shù)的平均值。解法一:clearusegsdowhile!eof()m=max(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8)n=min(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8)x=得分1+得分2+得分3+得分4+得分5+得分6+得分7+得分8replace最后得分with(x-m-n)/6skipenddodispalluseclear
usegs
scan
m=max(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8)
n=min(得分1,得分2,得分3,得分4,得分5,得分6,得分7,得分8)
x=得分1+得分2+得分3+得分4+得分5+得分6+得分7+得分8
replace最后得分with(x-m-n)/6
endscan
dispall
use
解法二:usegsdowhile!eof()i=2store得分1tom,n,xdowhilei<=8j=str(i,1)
m=max(m,得分&j)
n=min(n,得分&j)x=x+得分&ji=i+1
enddoreplace最后得分with(x-m-n)/6skipenddouse解法三:usegsdowhile!eof()i=2scattertoafieldsexcept姓名
storea(1)tom,n,xdowhilei<=8
m=max(m,a(i))
n=min(n,a(i))
x=x+a(i)i=i+1
enddoreplace最后得分with(x-m-n)/6skipenddouse表當(dāng)前記錄與數(shù)組之間的數(shù)據(jù)傳送(P54)記錄數(shù)組SCATTER[FIELDS<字段名表>|FIELDSLIKE<通配符>|FIELDSEXCEPT<通配符>][MEMO]TO<數(shù)組名>數(shù)組記錄GATHERFROM<數(shù)組名>[FIELDS<字段名表>|FIELDSLIKE<通配符>|FIELDSEXCEPT<通配符>][MEMO]USETEACHERGO4SCATTERTOA1MEMOGO6SCATTERTOA2MEMOGATHERFROMA1MEMOGO4GATHERFROMA2MEMO功能:調(diào)換teacher.dbf中第4條記錄和第6條記錄的內(nèi)容。解法三:usegsdowhile!eof()i=2scattertoafieldsexcept姓名
storea(1)tom,n,xdowhilei<=8
m=max(m,a(i))
n=min(n,a(i))
x=x+a(i)i=i+1
enddoreplace最后得分with(x-m-n)/6skipenddouse實(shí)驗(yàn)十一第14題:已知一次歌手大獎(jiǎng)賽共有十五位評(píng)委,所有歌手的姓名和評(píng)委給他們打的分?jǐn)?shù)放在gs3.dbf中,編程計(jì)算每位歌手的最后得分,并存入“最后得分”字段。最后得分的計(jì)算方法是:去掉兩個(gè)最高分,再去掉兩個(gè)最低分,取剩余十一個(gè)分?jǐn)?shù)的平均值。處理數(shù)組元素的函數(shù)1、數(shù)組元素的排序函數(shù)asort()排序函數(shù)asort()可以按升序或降序?qū)?shù)組中的元素排序asort(<數(shù)組名>[,<開(kāi)始元素>[,<排
序個(gè)數(shù)>[,<排序方向>]]])其中<開(kāi)始元素>指定從第幾個(gè)元素開(kāi)始排序。如果數(shù)組是一維的,函數(shù)從<開(kāi)始元素>開(kāi)始排序。如果數(shù)組是二維的則參數(shù)<開(kāi)始元素>決定以每行中的第幾列元素為排序依據(jù)。dimensiont(10)
t=10
t(2)=-1
t(5)=19
t(9)=200
t(3)=0
asort(t)
listmemoryliketdimensiont(10)
t=10
t(2)=-1
t(5)=19
t(9)=200
t(3)=0
asort(t,1,10,1)
listmemoryliket2、數(shù)組元素的個(gè)數(shù)函數(shù)alen()例:已知某單位的職工表gz.dbf,其中職工號(hào)的前四位是部門編碼(1001~1005,共5個(gè)部門),請(qǐng)編寫程序,在程序中首先由gz.dbf拷貝生成gz1.dbf,然后再修改gz1.dbf,把工資等于或低于本部門平均工資的職工的實(shí)發(fā)工資提高百分之三十。setsafetyoffSelect*fromgzintotablegz1usegz1forn=1001to1005step1selectavg(工資)fromgz1intoarraypjgzwheresubstr(職工號(hào),1,4)=str(n,4)replaceall工資with工資*1.3for工資
<=pjgz(1,1)andsubstr(職工號(hào),1,4)=str(n,4)endforcloseall四、循環(huán)中止和循環(huán)短路語(yǔ)句1.循環(huán)中止語(yǔ)句
模式一:
DOWHILE〈條件一〉
〈循環(huán)體1〉
IF〈條件二〉
EXIT
ENDIF
<循環(huán)體2>
ENDDODOWHILE〈條件一〉
〈循環(huán)體1〉
DOCASE
CASE…
CASE<條件二>…
EXIT
…
ENDCASE
〈循環(huán)體2〉
ENDDO模式二2.循環(huán)短路
結(jié)束循環(huán)體的本輪次執(zhí)行而重新開(kāi)始下一輪的執(zhí)行(實(shí)際是先判斷循環(huán)條件是否成立以決定循環(huán)能否繼續(xù)進(jìn)行)叫做循環(huán)短路。循環(huán)短路是通過(guò)命令LOOP實(shí)現(xiàn)的。模式一:
DOWHILE〈條件一〉
〈循環(huán)體1〉
IF〈條件二〉
LOOP
ENDIF
<循環(huán)體2>
ENDDODOWHILE〈條件一〉
〈循環(huán)體1〉
DOCASE
CASE…
CASE<條件二>…
LOOP
…
ENDCASE
〈循環(huán)體2〉
ENDDO例:從鍵盤輸入若干個(gè)數(shù),結(jié)束時(shí)輸入0,編程求這些數(shù)之和。clears=0dowhile.t.input'請(qǐng)輸入一個(gè)數(shù),結(jié)束時(shí)輸入0:'toaifa=0exit
endif
s=s+aenddo?s例:從鍵盤輸入若干個(gè)偶數(shù),結(jié)束時(shí)輸入0,計(jì)算這些偶數(shù)之和。例:對(duì)jsdn.dbf設(shè)計(jì)一個(gè)查詢程序,要求:由鍵盤輸入一個(gè)姓名,若找到則顯示該記錄,若查不到該記錄,顯示“無(wú)此人”,無(wú)論查到與否都將提示是否繼續(xù)查找,若繼續(xù)查找,則重復(fù)以上步驟,否則停止程序的運(yùn)行。例:輸入一個(gè)正整數(shù),判斷是否素?cái)?shù)。素?cái)?shù):也叫質(zhì)數(shù),在大于1的整數(shù)中,只能被1和這個(gè)數(shù)本身整除的數(shù)。I=2I<=SQRT(N)N能被I整除嗎?I=I+1YI>SQRT(N)不是素?cái)?shù)是素?cái)?shù)NYYNNI>SQRT(N)I<=SQRT(N)clearinput'輸入一個(gè)數(shù):'toni=2dowhilei<=sqrt(n)ifn%i=0exitelsei=i+1
endifenddoifi>sqrt(n)?
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 年度工作計(jì)劃的涵蓋范圍與深度
- 學(xué)期課程安排的優(yōu)化計(jì)劃
- 學(xué)生社團(tuán)工作的安排和具體計(jì)劃
- 美術(shù)課堂中的情感教育探索計(jì)劃
- 財(cái)務(wù)目標(biāo)規(guī)劃設(shè)定管理計(jì)劃
- 長(zhǎng)時(shí)間用眼下的視力保護(hù)技巧
- 提升團(tuán)隊(duì)績(jī)效的年度目標(biāo)設(shè)定計(jì)劃
- 加強(qiáng)學(xué)生自我表達(dá)能力的計(jì)劃
- 非手術(shù)治療中病人的疼痛管理與護(hù)理策略
- 面向未來(lái)的學(xué)校藝術(shù)教育-以綜合實(shí)踐活動(dòng)為抓手
- 畜禽養(yǎng)殖場(chǎng)惡臭污染物排放及其處理技術(shù)研究進(jìn)展
- 超聲內(nèi)鏡引導(dǎo)下穿刺活檢術(shù)的配合及護(hù)理
- 新生兒常見(jiàn)的產(chǎn)傷及護(hù)理
- 代寫回憶錄合同
- 2024年10月自考00149國(guó)際貿(mào)易理論與實(shí)務(wù)試題及答案
- 2024年下半年教師資格考試《中學(xué)教育知識(shí)與能力》真題及答案解析
- 物業(yè)保潔常用藥劑MSDS
- 《跨文化溝通》課件
- (一模)長(zhǎng)春市2025屆高三質(zhì)量監(jiān)測(cè)(一)數(shù)學(xué)試卷
- 2024-2025學(xué)年湖北省武漢市華中師大一附中高三上學(xué)期10月檢測(cè)英語(yǔ)試題及答案
- DB11T 1607-2018 建筑物通信基站基礎(chǔ)設(shè)施設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論