VFO程序設計復習_第1頁
VFO程序設計復習_第2頁
VFO程序設計復習_第3頁
VFO程序設計復習_第4頁
VFO程序設計復習_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、VFO程序設計復習1程序設計概述一、程序的概念概念:具有一定功能的計算機能執(zhí)行的指令的集合。例1:顯示表XSDA可編寫成如下命令序SET DEFA TO F:表USE XSDALISTCLOSE ALL例2:求a=3,b=2,c=5 求a+b-c=?程序test.prg 代碼如下:a=3b=2c=5x=a+b-c?x二、常見的程序設計方法1、  結(jié)構(gòu)化程序設計(模塊化) 結(jié)構(gòu)化程序設計是一個面向過程的概念。把一個實際問題分為兩部分,即數(shù)據(jù)和過程。通過動態(tài)的程序執(zhí)行過程來對靜態(tài)的數(shù)據(jù)進行處理,得出正確的結(jié)果。由VFP命令和程序設計命令的組合,需編制和調(diào)試; 2、  面向?qū)ο蟮?/p>

2、程序設計 3、結(jié)構(gòu)化程序設計它是面向過程程序設計的另一種描述,面向過程程序設計有如下特點:整個程序分為若干個模塊,模塊之間相銜接,且相對獨立。第個模塊只有一個入口和一個出口。第個模塊都能單獨執(zhí)行,且在有限時間內(nèi)執(zhí)行完。采用自頂向下、逐步求精的方法。 三、程序三大基本結(jié)構(gòu)1、順序結(jié)構(gòu):執(zhí)行是按命令出現(xiàn)的先后順序執(zhí)行。 2、分支結(jié)構(gòu):按給定的條件成立與否來決定程序起向,分單向選擇分支、雙向選擇分支和多路分支。有以下兩種 IF 語句 DO CASEENDIF ENDCASE3、循環(huán)結(jié)構(gòu):程序的執(zhí)行發(fā)生了自下而上的往復,某一程序段將重復執(zhí)行。 有以下三種Do While For SCANENDDO E

3、NDFOR ENDSCAN四、算法和流程圖算法:解決某一問題的方法與步驟。見教材例。流程圖:算法的描述,除用自然語言描述外,計算機領(lǐng)域常用流程圖(ANSI圖和NS圖)描述。見教材例。 例如:樂山到成都怎么去?1、  解一元二次方程的算法。Ax2+bx+c=0, 求x2、  求出1-100之間的質(zhì)數(shù)。 X / => 2 到 SQRT(X )2程序的建立和執(zhí)行一、程序的擴展名:PRG 實質(zhì):文本文件(ASCII編碼)執(zhí)行時,會產(chǎn)生編譯文件FXP后讓計算機執(zhí)行。 二、程序文件的建立和編輯1、命令方式:MODI COMM 程序名.PRG (.PRG可?。?、菜單方式;文件 =

4、> 新建 => 程序 3、項目管理器中建立的方法:建立項目管理器 => 新建程序 4、其他方法:其它可編輯文本的軟件: 記事本寫字板WORD其它程序編輯器 注意: 希望編寫程序之前事先設置好默認目錄(set defa to )然后我們編寫的程序就會自動存儲在那個目錄中。例如:set defa to d:ks modi comm Test (相當于是:modi comm D:kstest.prg) 三、 程序的執(zhí)行1、命令方式命令格式:DO 盤符路徑程序名 2、菜單方式:“程序”菜單->“運行”命令在“運行”窗口中輸入被運行的程序文件名,即可運行程序。 四、VFP程序的分

5、類:數(shù)學類程序、涉及到表操作的程序如果本程序是涉及到表操作的程序,那么: 1、在程序開始部分可以先加語句CLEAR 和 CLOSE ALL 2、程序最后可以使用命令CLOSE ALL 3、然后使用RETURN或CANCEL或QUIT 例:找出并顯示所有三好生CLEAR CLOSE ALL USE 學生 LOCATE FOR 三好生DO WHILE NOT EOF() DISPCONTINUE ENDDO CLOSE ALL RETUREN3順序程序設計與常用語句一、程序設計中的常用語句1、輸入命令(1)賦值命令命令一:STORE <表達式> TO <內(nèi)存變量>命令二:&

6、lt;內(nèi)存變量>= <表達式> (2)交互式輸入命令(注意:輸入數(shù)據(jù)是在程序執(zhí)行的時候 )INPUT 提示信息 TO <內(nèi)存變量>ACCEPT 提示信息 TO <內(nèi)存變量>WAIT 提示信息 TO <內(nèi)存變量> TIMEOUT <等待時間>說明: 提示信息是C型, 它會在屏幕上原樣輸出 .WAIT命令的功能:暫停程序執(zhí)行,顯示提示信息等待用戶按鍵。 Wait命令中 輸入的只能是一個字符(C型)。 Input 適用于全部類型內(nèi)存變量,輸入時需要加定界符 Accept只適用于C型,并且C型不加定界符注意:Input和accept在編

7、寫程序時語句都一樣,只是執(zhí)行程序(do)時,主屏幕上要求輸入的類型和格式不同。例1:輸入a、b、c的值,對2ax+b=c 求 x的值。ClearInput “現(xiàn)在計算2ax+b=c,請輸入a的值:” to aInput “請輸入b的值:” to bInput “請輸入c的值:” to cx=(c-b)/(2*a)?x的值為:,x &&比較使用? x的值為:+str(x,3)有何區(qū)別 return 例2、查找學生.dbf中的指定記錄 clearclose alluse 學生listaccept “請輸入您想查找的姓名: ” to xmLocate for 姓名=XM &&

8、amp;或命令 SEEK XMif found() DISP else ?對不起,沒有找到此人endiflistclose allReturn思考:如果accept換成input,輸入的時候該怎么輸入? 例3、刪除學生.dbf中的指定記錄 clearclose alluse 學生listinput “請輸入您想刪除的記錄號: ” to xdele reco xwait “你想徹底刪除這條記錄嗎?(y/n)” to ask if ask=Y or ask=y packendiflistclose all注意區(qū)分交換方式和程序方式:有的命令可以在兩種狀態(tài)下執(zhí)行(例如:剛才的輸入命令),但有些命令只

9、能在程序方式下執(zhí)行(例如:循環(huán)語句和分支語句) (3)格式輸入命令格式一:行,列 say 提示信息格式二:行,列 say 提示信息 get 變量 READ 格式三:行,列 say 提示信息 get 變量 default常量 功能:在屏幕指定的坐標位置上顯示提示信息,然后通過READ命令激活GET子句的變量值。說明:GET后的變量可以是內(nèi)存變量或當前打開的數(shù)據(jù)文件中的字段變量,若是內(nèi)存變量,應在執(zhí)行該命令前對內(nèi)存變量賦值,否則就必須使用default參數(shù)賦初值。輸入的值類型應該與初值類型相同。READ命令與GET命令必須配合使用。多個GET命令可以只用一個READ命令配合。如果沒有read則表示

10、只顯示內(nèi)容,不輸入值。例1:編寫程序完成在學生.DBF中追加記錄CLEARUSE 學生APPEND BLANK5,20 SAY “學號” GET 學號5,40 SAY “姓名” GET 姓名7,20 SAY “性別” GET 性別7,40 SAY “出生年月” GET 出生年月9,20 SAY “入校總分” GET 入??偡?,40 SAY “三好生” GET 三好生READCLEARLISTCLOSE ALLRETURN例2:編程求長方形的面積。 CLEAR X=0 &&X為內(nèi)存變量,賦初值Y=0 1,5 SAY “計算長方形的面積”2,5 SAY “輸入長方形的長:” GE

11、T X &&第2行5列顯示提示信息并等待輸入3,5 SAY “輸入長方形的寬:” GET Y &&第3行5列顯示提示信息并等待輸入 READ &&從鍵盤輸入X,Y的值 S=X*Y &&計算長方形的面積 ? “長方形的面積:”,S &&顯示長方形的面積 CANCEL思考題1:如將上述例1程序改為按照指定學號來修改記錄應該怎樣做?(答案見課件后)3、輸出命令:非格式輸出命令?和?:格式化輸出命令行,列 say 表達式 說明:行和列都可以是表達式,常??梢允褂煤瘮?shù)ROW( ) 和 COL( ) ROW( )表示返回當前行

12、的行號 COL( )表示返回當前列的列號例1:N=1CH=“VF程序設計”N,26 SAY SPACE(60)N+1,26 SAY CH例2:循環(huán)輸入值cleardime xh(10)store 0 to xh10,10 say '請輸入數(shù)字:' get xh(1) i=2do while i<=10 row()+1,10 say '請輸入數(shù)字:' get xh(i) i=i+1enddoreadlist memo like xh 4、其他程序運行命令(1)終止程序執(zhí)行命令  CANCEL 、QUIT 和 RETURNQUIT: 退出程序運行并且

13、退出 Visual FoxproCANCEL : 退出程序運行RETURN: 返回上級程序調(diào)用點,如果是主程序就表示退出程序。主程序可缺省此命令返回(結(jié)束),即默認使用了return 注意:上述命令執(zhí)行完后都會自動clear memory。但是如果有數(shù)據(jù)庫和表打開不會自動關(guān)閉,所以使用數(shù)據(jù)庫和表后在程序結(jié)束時我們常常需要加命令: close all(2)清屏命令CLEAR(3)注釋命令(  NOTE 、* 和 &&)注釋的含義:程序員對程序語句功能的說明,執(zhí)行程序的時候不執(zhí)行注釋中的內(nèi)容,注釋只起到一個對語句說明的目的。一般復雜程序中應有30%以上的注釋。(4)TEX

14、T語句:原樣輸出(參考書143例4.15) (5)系統(tǒng)設置命令set on/off 或者是 set to 1、設置會話狀態(tài)SET TALK ON/OFF2、設置跟蹤狀態(tài)SET ECHO ON/OFF3、設置打印狀態(tài)SET PRINTER ON/OFF4、設置定向輸出狀態(tài)SET DEVICE TO SCREEN5、設置精確比較狀態(tài)SET EXACT TO ON/OFF6、設置日期格式SET DATE ANSI 7、色繪制系統(tǒng)提供的保護狀態(tài)SET SAFETY ON/OFF8、設置刪除記錄標記狀態(tài)(掌握)SET DELETED ON/OFF功能:屏蔽或處理有刪除標記的記錄說明:在命令格式中選擇ON

15、時,各命令當不對有刪除標記的記錄進行操作,但索引除外。系統(tǒng)默認值為OFF思考題1答案:CLEARUSE 學生ACCEPT "請輸入需修改記錄的學號:" TO NUMLOCATE FOR 學號=NUM5,20 SAY "學號" GET 學號5,40 SAY "姓名" GET 姓名7,20 SAY "性別" GET 性別7,40 SAY "出生年月" GET 出生年月9,20 SAY "入校總分" GET 入??偡?,40 SAY "三好生" GET 三好生R

16、EADCLEARLISTCLOSE ALLRETURN4順序結(jié)構(gòu)和分支結(jié)構(gòu)一、順序結(jié)構(gòu)例1:求圓的面積(公式S=R2)CLEARINPUT “請輸入半徑R的值:” TO RS=3.1416*R*R?”圓面積為:” ,SCANCEL二、分支結(jié)構(gòu)(選擇結(jié)構(gòu))1、IF語句(1)單向選擇: 雙向選擇:IF 條件 IF 條件 執(zhí)行語句 執(zhí)行語句ENDIF ELSE執(zhí)行語句 ENDIF(2)單向選擇分支例如:求任意一個數(shù)值的絕對值CLEARSET TALK OFFINPUT “請輸入數(shù)值:” TO NIF N<0N= - NENDIF?”|N|的絕對值為:”,NCANCEL(3)雙向選擇分支例1:用

17、戶輸入數(shù)據(jù)表文件名,判斷它存在否,如果存在則打開數(shù)據(jù)表文件并顯示表中的全部記錄 clearaccept '請輸入數(shù)據(jù)庫文件名:' to heng &&想想為什么不用inputif file(heng+.dbf) &&了解file()的使用方法 use &heng &&想想這兒為什么要用&代換 listelse ?'sorry,文件不存在:( 'endif close all &&關(guān)閉所有打開的表,如果不涉及多工作區(qū),可以只使用use例2:判斷輸入的整數(shù)為奇數(shù)還是偶數(shù)。CLEARINP

18、UT “請輸入整數(shù):” TO NIF N%2=0 &&該表達式還可用 MOD(N,2)=0來表示?STR(N,4)+”是偶數(shù)”ELSE ?STR(N,4)+”是奇數(shù)”ENDIFCANCEL(4) IF語句的嵌套例如:將用戶輸入的小寫英文字母轉(zhuǎn)化成大寫 CLEARACCEPT “請輸入1個字母:” TO STR1IF STR1>=a AND STR1<=z STR1=UPPER(STR1) ?SPACE(40)+STR1ELSE IF STR1>=A AND STR1<=Z ?SPACE(40)+STR1 ELSE ?您輸入的不是英文字母 ENDIFEND

19、IF2、多向選擇DO CASE CASE <條件表達式1> <命令序列1>CASE <條件表達式2> <命令序列2>OTHERWISE &&其它情況<命令序列>ENDCASE說明:OTHERWISE 可以沒有.例1:比較A、B的大小CLEARINPUT “請輸入A的值:” TO AINPUT “請輸入B的值:” TO BDO CASE CASE A>B ?”A 大于B” CASE A<B ?”A 小于B” CASE A=B?”A等于B”ENDCASE例2:郵局負責郵購小物品規(guī)則如下:50公里及以內(nèi)收取額外金

20、額5元,50-100公里收取10元,100-200公里收取20元,200-500公里收取40元,其余一律收取50元。 CLEARINPUT “請輸入您想郵購物品的路程(公里數(shù)): ” TO XDO CASE CASE X<=50 Y=5 CASE X>50 AND X<=100 Y=10 CASE X>100 AND X<=200 Y=20 CASE X>200 AND X<=500 Y=40 OTHERWISE Y=50ENDCASE?對不起, 您需要付款: ,Y,元人民幣5循環(huán)程序設計1、條件循環(huán)格式一:DO WHILE 條件 命令序列 ENDDO

21、格式二: DO WHILE 條件 語句序列 LOOP 語句序列EXIT語句序列 ENDDO 要退出循環(huán),需要條件為假的時候(條件=.F.時)說明:(1) LOOP和EXIT 命令一般放在IF條件中,也可以出現(xiàn)在循環(huán)體內(nèi)的任何位置。若執(zhí)行循環(huán)體時遇到LOOP命令,則直接返回執(zhí)行DO命令,測試條件以決定是否繼續(xù)循環(huán)。若遇到EXIT命令,則不執(zhí)行下面的命令序列,直接跳出循環(huán),執(zhí)行ENDDO后面的命令。(2)條件表達式的值確定了循環(huán)是否繼續(xù),當條件表達式的值始終為真(即永真循環(huán)),則應使用EXIT命令來控制循環(huán)結(jié)束例1:將字符“歡迎進入樂山師范學院”從屏幕的頂部移至底部CLEARCH=“歡迎進入樂山師

22、范學院”N=1DO WHILE N<=23N,26 SAY SPACE(60)N+1,26 SAY CH T=INKEY(0.2)&&等待0.2秒 N=N+1ENDDORETURN注:INKEY (<數(shù)值表達式>)功能:等待用戶按鍵或鼠標輸入,等待時間由數(shù)值表達式確定(單位為秒)返回由按鍵而產(chǎn)生的一個整數(shù)值.例2:實現(xiàn)顯示出全部的男生 CLEARCLOSE ALLUSE 學生DO WHILE NOT EOF() IF 性別=男DISP ENDIF SKIPENDDOCLOSE ALL LOOP循環(huán)實例例1:I=0DO WHILE I<10 I=I+1 I

23、F INT(I/2)=I/2 LOOP ENDIF ?”*”ENDDO例2:CLOSE ALLCLEARUSE 學生DO WHILE NOT EOF() DISP WAIT 你想修改本記錄嗎?(Y/N) TO X IF X=N OR X=n SKIP LOOP ENDIF EDIT SKIPENDDOCLOSE ALL程序執(zhí)行到WAIT語句后,如果用戶輸入的是N或n,那么就LOOP(也就跳過本次循環(huán),不執(zhí)行后面的EDIT)永真循環(huán)DO WHILE .T. DO WHILE .T. IF Y>0 IF Y>0 EXIT QUITENDIF ENDIFENDDO ENDDO如果Y>

24、;0,則退出本循環(huán) 如果Y>0,則退出程序,退出VFDO WHILE .T. DO WHILE .T.IF Y>0 IF Y>0 RETURN CANCELENDIF ENDIFENDDO ENDDO如果Y>0,則退出程序返回上層 如果Y>0,則退出程序,回到VF中上述語句LOOP、EXIT、QUIT、RETURN、CANCEL等也可以在后面講的其它循環(huán)語句中使用。例1:通過鍵盤輸入三角形的邊長,若邊長正確,立即在屏幕上顯示三角形的面積,若邊長不正確,重新輸入邊長,若輸入的邊長中任意一邊為0則程序立即結(jié)束。 CLEAR ?”現(xiàn)在計算三角型的面積,如果想退出程序請輸

25、入0?!盌O WHILE .T.INPUT “請輸入邊長a:” TO AINPUT “請輸入邊長b:” TO BINPUT “請輸入邊長c:” TO CIF A=0 OR B=0 OR C=0 ?結(jié)束 RETURN ENDIF IF A+B<=C OR A+C<=B OR B+C<=A ?錯誤的三角型,請重新輸入! LOOP ENDIFS=(A+B+C)/2AREA=SQRT(S*(S-A)*(S-B)*(S-C)?該三角型的面積是:,areaENDDO 例2:有下列表:book(書名 C(20),作者 C(8),出版日期 D,內(nèi)容簡介 M)編寫程序:查詢關(guān)于 foxpro

26、的圖書. USE BOOKLOCATE FOR foxpro $ 書名IF ! FOUND() ?沒有關(guān)于foxpro的圖書 ELSEDO WHILE ! EOF() CLEAR ?書名,作者,出版日期 ?內(nèi)容介紹 WAIT “是否繼續(xù)查找?(Y/N)” TO M IF M$nN EXIT ENDIFCONTINUE ENDDO?”全部顯示完成”ENDIF 2、計數(shù)循環(huán)FOR 循環(huán)變量=初值 TO 終值 STEP 步長語句序列ENDFOR說明: (1)當省略步長值時,系統(tǒng)默認步長值為1.當初值小于終止值時,步長值為正值,當初值大于終值時,步長值為負值.步長值不能為0,否則會造成死循環(huán)

27、. (2)可在循環(huán)體內(nèi)嵌入LOOP和EXIT命令,功能和用法與條件循環(huán)中該命令的用法相同.例1:求1100的和SUM=0FOR n=1 TO 100 SUM=SUM+nENDFOR?1100的總和為:,SUM使用DO WHILE 實現(xiàn):SUM=0n=1DO WHILE n<=100SUM=SUM+nn=n+1ENDDO?1100的總和為:,SUMFOR和IF語句嵌套例2:求1到N之間能被3整除的數(shù)的和CLEARM=0INPUT “請輸入N的值:” TO NFOR X=1 TO N IF MOD(X,3)=0M=M+XENDIFENFOR?”M的值為:”,MRETURN例3: 找出2-10

28、0之間所有的質(zhì)數(shù)算法研究:FOR I=1 TO 100如果此數(shù)是質(zhì)數(shù)顯示這個數(shù)ENDFOR判斷一個數(shù)是不是質(zhì)數(shù),應該看它是否能被其它數(shù)整除.當一個數(shù)I , 從I從2到 SQRT(X) 都沒有數(shù)能被整除,那么它就是 FOR J=2 TO INT(SQRT(I)IF I MOD J=0 EXIT ENDIFENDFORIF J> INT(SQRT(I) ?I,是質(zhì)數(shù)ENDIF特別: 2是個質(zhì)數(shù).綜上所敘述: 完成程序為:CLEAR?2是質(zhì)數(shù)FOR I=3 TO 10 FOR J=2 TO INT(SQRT(I)IF MOD(I,J)=0 EXITENDIFENDFORIF J> INT

29、(SQRT(I) ?I,是質(zhì)數(shù)ENDIFENDFOR3、庫文件掃描循環(huán)SCAN 范圍 FOR/WHILE 條件 語句序列ENDSCAN例1:查詢所有入??偡衷?70以上的人.CLEARCLOSE ALLUSE 學生SCAN FOR 入??偡?gt;570 DISPENDSCANCLOSE ALL例2:用戶可以循環(huán)輸入并查找入??偡?直到輸入的是負數(shù)就退出.CLEARCLOSE ALLUSE 學生INPUT “請輸入你要查找的入??偡?輸入負數(shù)則退出: ” TO XDO WHILE X>=0SCAN FOR 入??偡?X DISP ENDSCANINPUT “請輸入你要查找的入??偡? ”

30、 TO XENDDO例3:編寫程序,對于學生.dbf能夠在程序末尾循環(huán)插入新記錄 (掌握) CLEARCLOSE ALLUSE 學生DO WHILE .T. APPE BLANK 5,20 SAY '學號' GET 學號 5,40 SAY '姓名' GET 姓名 7,20 SAY '性別' GET 性別 7,30 SAY '出生年月' GET 出生年月 9,20 SAY '入校總分' GET 入??偡?READ WAIT '你想繼續(xù)插入新記錄嗎?(Y/N) : ' TO X IF X=&#

31、39;N' OR X='n' EXITENDIF CLEARENDDOCLEARLISTCLOSE ALL 例4:編寫程序,該程序能夠順序修改表學生.DBF中的所有數(shù)據(jù)。(掌握) (要求:必須使用 行,列 say . get . 進行數(shù)據(jù)修改) CLEARCLOSE ALLUSE 學生DO WHILE .T. if eof() exit endif5,20 SAY '學號' GET 學號 5,40 SAY '姓名' GET 姓名 7,20 SAY '性別' GET 性別 7,30 SAY '出生年月' GE

32、T 出生年月 9,20 SAY '入??偡?#39; GET 入??偡?READ WAIT '你想繼續(xù)修改記錄嗎?(Y/N) : ' TO X IF X='N' OR X='n' EXIT ENDIF CLEAR SKIPENDDOCLEARLISTCLOSE ALL4、多重循環(huán)例1:輸入n的值,求1+1/2!+1/3!+1/4!+.+1/n! ( 階乘 n!=1*2*3*4.*(n-1)*n )CLEARSUM=0MUL=1INPUT "請輸入n的值: " TO NFOR i=1 TO N FOR j=1 TO i

33、MUL=MUL*J ENDFOR SUM= SUM+1/MUL ENDFOR?'求得的總和為: ',SUM例2:打印九九表方法一:CLEAR FOR A=1 T0 9 FOR B=1 TO A T=A*B?STR(B,1)+“*”+STR(A,1)+“=”+STR(T,2)+“ ” ENDFOR? ” “ENDFORRETURN方法二:CLEAR 1,1 say "*"for a=1 to 9a+1,1say str(a,1)nextfor b=1 to 9 1,b*3 say str(b,1) for c=1 to b p=c*b b+1,c*3 say

34、str(p,2) next nextcancel例3:圖形打印CLEAR for a=1 to 5內(nèi)循環(huán)外循環(huán) for c=1 to a ?“*" next ?nextCancel說明:打印圖形時,一般外循環(huán)控制打印行數(shù),內(nèi)循環(huán)控制每一行打印圖形個數(shù)。6數(shù)組的應用一、 數(shù)組的定義DIMENTION 數(shù)組名(數(shù)值表達式1,數(shù)組表達式2.)定義后單元默認值為.F.二、一維數(shù)組1、定義一個一維數(shù)組:dime a(10) -定義一個10數(shù)組,且所有單元默認值為.F.2、賦值:例如: a=''a(1)=20 a(3)=2002/09/23a(7)=.T.循環(huán)賦值:dime a(

35、10)i=1do while i<=10 input '請輸入數(shù):' to a(i) i=i+1enddo或者是:for i=1 to 10 input '請輸入數(shù):' to a(i) Endfor3、顯示值:for i=1 to 10 ?a(i)endfor使用do while大家思考方法2:list memo like a二、二維數(shù)組例如:dime s(5,4)1、賦值:例如: s=0s(3,4)=.t.s(12)=AYA' && 相當于S(3,4)=AYA'2、循環(huán)賦值for i=1 to 5 for j=1 to 4

36、 input '輸入值:' to a(i,j) endforendfor3、顯示值:for i=1 to 5 for j=1 to 4 ?a(i,j)+space(2) endforendfor三、舉例輸入10 個數(shù),將它們按照從大到小的順序排列算法研究:方法1:連續(xù)的兩兩比較方法2:將每個數(shù)和最后一個數(shù)比較程序cleardime a(10)?'輸入10個數(shù): 'for i=1 to 10input "請輸入: " to a(i)endforfor i=1 to 9for j=1 to i if a(j)>a(i+1) t=a(i+1)

37、 a(i+1)=a(j) a(j)=t endif endforendforlist memo like a例2:將1、2、3、10順序輸入一維數(shù)組,實現(xiàn)順序輸出和逆序輸出。DIME A(10)FOR I=1 TO 10 A(I)=IENDFORFOR I=1 TO 10 ?A(I) ENDFORFOR J=10 TO 1 STEP 1 ?A(J)ENDFOR例3:排序問題 (要求:不一定能編寫,但是重點地方能填空,基本方法要能理解) 輸入5 個數(shù),將它們按照從大到小的順序排列 算法: (軟件技術(shù)支持 第263頁)穩(wěn)定的算法: 插入法排序(將一個數(shù)據(jù)插入到已經(jīng)排列

38、好的序列中) 冒泡排序(比較每次產(chǎn)生最大數(shù)) 歸并排序(兩兩合并 ) 不穩(wěn)定的算法:(相同數(shù)據(jù)位置可能交換) 選擇排序(通過交換位置,最小的放在第一,次小的第二) 實現(xiàn)算法:冒泡排序 (1) n個數(shù)要比較n-1趟(2)  (3) 每趟要比較的次數(shù)為 : n-趟數(shù) (4)(3)每次比較: 如果當前數(shù) a(j)大于后一個數(shù) a(j+1) 那么就交換,否則不交換 clear dime a(5) ?'輸入5個數(shù): ' for i=1 to 5 input &

39、quot;請輸入: " to a(i) endfor for i=1 to 4 && 外循環(huán)是行(趟數(shù)), 內(nèi)循環(huán)是列(比較次數(shù)) for j=1 to 5-I if a(j)>a(j+1)t=a(j+1) a(j+1)=a(j) a(j)=t endif endfor endfor FOR I=1 TO 5 ?A(I)ENDFOR對N個數(shù)排序(從小到大) clear input "請問你想對多少個數(shù)進行排序? " to n

40、 dime a(n) ?'請輸入',n,'個數(shù): ' for i=1 to n  input "請輸入: " to a(i) endfor for i=1 to n-1  for j=1 to n-i  if a(j)>a(j+1)  t=a(j+1)  a(j+1)=a(j)  a(j)=t  endif  endforendfor 算法二:每次比較將當前數(shù)和最后一個數(shù)據(jù)比clear i

41、nput “請問你想對多少個數(shù)進行排序? ” to n dime a(n) ?'請輸入',n,'個數(shù): ' for i=1 to n  input "請輸入: " to a(i) endfor for i=1 to n-1  for j=1 to n-i  if a(j)>a(n-i+1)  t= a(n-i+1)  a(n-i+1)=a(j)  a(j)=t  endif  endfor endfor

42、60;list memo like a 算法三: clear input “請問你想對多少個數(shù)進行排序? ” to n dime a(n) ?'請輸入',n,'個數(shù): ' for i=1 to n  input "請輸入: " to a(i)endfor for i=1 to n-1  for j=1 to n-i  if a(j)<a(n-i+1)  t= a(n-i+1)  a(n-i+1)=a(j) 

43、a(j)=t  endif  endforendfor list memo like a7子程序、過程和自定義函數(shù)一、子程序1.子程序的概念2.子程序的建立和調(diào)用3.子程序的嵌套a1.prg               a2.prg           a3.prg?'*'   &#

44、160;           ?''           ?'$'         do a2                do a3&

45、#160;           return               ?'#'               ?'999'    

46、60;                return思考:以上程序運行后結(jié)果是什么?   * $ 999#   說明:1、 如果將a2.prg或者a3.prg的return語句改成cancel,那么程序當執(zhí)行到cancel的時候就會結(jié)束,不返回 2、如果將a3.prg的return語句改成return to master想想結(jié)果會怎么樣呢? 請先看看書 P169頁 二、變量的三種類型 1、全局變量(定義:用public

47、命令或在命令窗口中賦值的變量) 有效范圍:主程序和所有子程序 2、私有變量(定義:private)或變量屏蔽 有效范圍:當前程序,在子程序中修改與主程序同名的變量,只要返回主程序,原來同名變量中的值不變 3、局部變量(可用LOCAL來定義,定義好后默認值為.F.,或是在當前程序中賦值的變量) 有效范圍:當前程序及當前程序以下的所有子程序 例:主程序MAIN1.PRG CLEAR public i,j store 1 to i,j,k do 程序2 ?"主程序的輸出結(jié)果:" ?"I="+STR(I,2)+" J="+STR(J,2)+&

48、quot; K="+STR(K,2) Cancel 子程序:CLEAR PRIVATE J,K I=I*2 J=I+1 K=J+1 ?"子程序的輸出結(jié)果:" ?"I="+STR(I,2)+" J="+STR(J,2)+" K="+STR(K,2) RETURN 例2: main.prg sc.prg xb.prg                 &

49、#160;                                            private m Clear y=x+10 Input “請輸入x的值

50、: ” to x m=143 m=y*10 Private y do xb z=int(m/100) Public z z=z+m return Do sc return y=sqrt(x)+sqrt(z) ?y return 三、參數(shù)傳遞(教材172功能和說明)主程序中:命令: do <子程序名> with <參數(shù)表>     實參 子程序中:parameters <內(nèi)存變量表> 形參 數(shù)據(jù)通過return語句傳回 à 注意:變量表和參數(shù)表是個數(shù)一致的,也相互對應,但是名字可能不一樣。 例: MAIN.PRG P1.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論