Visual Basic程序設計 算法_第1頁
Visual Basic程序設計 算法_第2頁
Visual Basic程序設計 算法_第3頁
Visual Basic程序設計 算法_第4頁
Visual Basic程序設計 算法_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VisualBasic程序設計

第八講

補充內(nèi)容:算法

2011-7-101

2011-7-10>12

一、算法的概念

要利用計算機處理問題,需要編寫出使計

算機按人們意愿工作的程序。而程序?qū)嵸|(zhì)上就

是一組計算機指令。每一條指令使計算機執(zhí)行

特定的操作。因此,每個學習計算機知識以及

希望利用計算機進行某項工作的人都應學習如

何進行程序設計。

為了有效地進行程序設計,應當至少具有

兩方面的知識。即:

1、掌握一門高級語言的語法規(guī)則;

2、掌握解題的方法和步驟一算法。

有了正確有效的算法,可以利用任何一種

計算機高級語言編寫程序。

1、什么是算法

?為解決一個問題而采用的方法和步驟稱為算法。

做任何事情都有一定方法和步驟,例如,打

太極拳有描述太極拳動作的圖解,它是“太極拳

的算法”。解決某一問題的計算機算法,應該是

一系列的操作步驟。

A對同一個問題,可以有不同的算法,但算法有優(yōu)

劣之分,有的算法步驟少,有的算法步驟多。我

們希望得到方法正確,步驟少的算法。

A算法語言只是一種工具,為實際問題設計算法才

是程序設計的核心。

A因此,為了有效地進行解題,不僅需要保證算法

正確,還要考慮算法的質(zhì)量,選擇合適的算法。

2011-7-104

2、算法的特點

A有窮性。一個算法應包含有限的操作步驟,不能

出現(xiàn)死循環(huán)。

?確定性。算法中的每一個操作步驟都應當是確定

的,而不應當是含糊不清的。

A可以沒有輸入,也可以有多個輸入。執(zhí)行算法有

時需要從外界得到信息,這時必須有輸入語句。

A有一個或多個輸出。算法的目的是為了求解,

“解”一定要通過輸出,才能看到結(jié)果。

A有效性。算法中的每一個步驟都應當能有效的執(zhí)

行。并得到確定的結(jié)果。

2011-7-105

口算法常用的幾種表示方法

A用傳統(tǒng)流程表示算法

A用N?S結(jié)構(gòu)化流程表示算法

A用偽代碼表示算法

2011-7-106

二、算法常用的幾種表示方法

1、用傳統(tǒng)流程圖表示算法

?傳統(tǒng)流程圖常用的符號

-起止框[]

-輸入輸出框//

-判斷框

-處理框

-流程線

-連接點

-注釋框

2011-7-107

1、用傳統(tǒng)流程圖表示算法

一傳統(tǒng)流程圖表示算法的三種結(jié)構(gòu)

?順序結(jié)構(gòu)

?分支結(jié)構(gòu)

2011-7-10

8

1、用傳統(tǒng)流程圖表示算法

—傳統(tǒng)流程圖表示算法的幾種結(jié)構(gòu)

■循環(huán)結(jié)構(gòu)

-當型循環(huán)

-直到型循環(huán)

Y

終端語句的下一語句佟端語句的下一語句

當型循環(huán)||直到型循環(huán)

2011-7.

1、用傳統(tǒng)流程圖表示算法

例1用流程圖表示求5!的算法

解:該問題是求從1到5的連乘積,用變量

T來存放被乘數(shù);用變量I來存放乘數(shù)其值

從1到5,使用公式:T=T*I,用循環(huán)結(jié)構(gòu)來設

計算法。變量T既存放被乘數(shù)又存放乘積。

變量T初值設為1,變量I初值為2每循

環(huán)一次,就把它乘到T上,然后變量I再增

加1,直到變量I的值大于5,循環(huán)就結(jié)束。

此時變量T的值就是所求的值。

流程圖如圖4“(見下頁)

2011-7-1010

圖4-1

用變量T存

放乘積,用

變量I代表

第二個乘

數(shù)J從2變

到5。

1、用傳統(tǒng)流程圖表示算法

例2用流程圖表示判斷2000年~2500年是

否閏年的算法。

解:閏年的條件是:

?能被4整除,但不能被100整除的年份都是

閏年;

?能被100整除,又能被400整除的年份是閏

年。

2011-7-1012

?由于要判斷2000?2500年哪年是否閏年,

所以該問題須用循環(huán)結(jié)構(gòu)來設計。

?用變量Y表示年份,變量Y的初值賦為

2000,然后判斷是否滿足閏年給出的條件。

滿足條件的,打印是閏年,不滿足條件的,

打印非閏年。

?判斷完后,變量Y加1,再繼續(xù)判斷,直

到變量Y的值大于2500。流程圖見圖4-2

(轉(zhuǎn)下頁)

2011-7-1013

1、用傳統(tǒng)流程圖表示算法

例3用傳統(tǒng)流程圖表示判斷N是否為素數(shù)的算法。

解:所謂素數(shù),是指除1和它本身之外,不能被其它

任何整數(shù)整除的數(shù)。例如:13是一個素數(shù)。

判斷某個數(shù)N(N大于等于3)是否為素數(shù)的方

法是渭N作為被除數(shù),用2至U(N?1)各個整數(shù)輪流

作除數(shù),如果都不能被整除,則N為素數(shù)。

實際上,N不必被2到(N?1)的整數(shù)除,只需

被2到N/2間整數(shù)除即可,甚至只需被2到K之間

的整數(shù)除即可。流程圖見圖4?3

2011-7-1015

圖4-3

判斷N是否為素

數(shù)。可用變量I

去除N,I從2變

到而,用變量

R來存放余數(shù)!

/打印N

“不是素數(shù)

1,

16

1、用傳統(tǒng)流程表示算法

-一傳統(tǒng)流程的弊端

?可讀性差。由于算法中允許使用流程線

讓程序轉(zhuǎn)來轉(zhuǎn)去,從而使流程圖變得毫

無規(guī)律,讀起來要化很大的精力。也使

人難以理解算法的邏輯。

?算法的可靠性和可維護性差。流程線的

使用使算法變成一團亂麻,毫無規(guī)律,

使其可靠性和可維護性差,因而因此流

程圖中必須限制箭頭的使用。

2011-7-1017

出口出口

2011-7-1018

?循環(huán)結(jié)構(gòu)

入口

出口

2011-7-10

1、用傳統(tǒng)流程圖表示算法

一三種基本結(jié)構(gòu)的特點

?只有一個入口。

?只有一個出口。

?結(jié)構(gòu)中每一部分都有機會被執(zhí)行。

?結(jié)構(gòu)中不存在“死循環(huán)”。

2011-7-1020

2、用N?S結(jié)構(gòu)流程圖表示算法

?流程符號:

□順序結(jié)構(gòu)

?:?先執(zhí)行A框,

再執(zhí)行B框。

口選擇結(jié)構(gòu)

?:?當條件P成立時執(zhí)行A操作。

?:?當條件P不成立時執(zhí)行B操作。

2011-7-1021

2、用N-S結(jié)構(gòu)流程圖表示算法

□.循環(huán)結(jié)構(gòu)

?:?當型循環(huán):當P1

?當P1條件成立時,

反復執(zhí)行A操作A

?當P1條件不成立時,

不再執(zhí)行A操作

?:?直到型循環(huán):

?反復執(zhí)行A操作,

A

?直到P2條件成

立時。退出循環(huán)。

直到P2

2011-7-1022

2、用N?S結(jié)構(gòu)流程圖表示算法

■舉例

圖4-4

例1、將50名學生中成

績高于80分的學生的i=>i

學號和成績打印出來。輸入電Gi

解:N-S結(jié)構(gòu)化_______i+I琦i

i>50

流程圖如圖4-4:

其中:

全量i用來統(tǒng)計學生

人數(shù)。

變量Ni,Gi用來表示

學生的學號和分數(shù)。

i>50

2011-7-10

2、用N-S結(jié)構(gòu)流程圖表示算法

-舉例

1111

例2用N-S圖表示求[———I—-—H-

的算法。23……99100

解:本例是求多項式的利,用變量sum存放累加

和,由于每項中的符號不一樣,須用一個變量

sign來薦放符號;用變量term來吞放某一項。

用變量deno來存放某一項的分母。算法開始,

將變量sum和sign賦值為1,然后分別求sign

和deno得到某一項的值,接著加到和土,毒

求另一項的值,再加到和上,直到deno大于100.

流程圖如圖4-5所示:

2011-7-1024

1=>sum

2二》dexto

圖4-5

1=>sign

用變量sum

存放和,用(-1)*sign=>sign

變量deno存

sign*(1/derto)二)term

放分母,用

Sign存放符

號用term存sum+term=>sum

放每一項。

deno+l=>deno

deno>100

sum

2011-7-10ZJ

2、用N?S結(jié)構(gòu)流程圖表示算法

--舉例

例3用N?S結(jié)構(gòu)化流程圖表示判斷2000

年~2500年是否閏年的算法。

(見下頁圖4-6)

2011-7-1026

2011-7-10

例4用N?S結(jié)構(gòu)化流程圖表示判斷N是

否為素數(shù)的算法。(見下頁圖4-7)

為了使程序能符合結(jié)構(gòu)化程序設計,

這里設計了一個開關W,使初值為0,若N

能被某一個整數(shù)整除,則使W值為1,否則

W值不變。最后根據(jù)W的值來確定N是否

為素數(shù),若W值為0,則N為素數(shù),否則N

為非素數(shù)。

2011-7-1028

圖4-7

這里設計

了一個開關w,

使初值為0,

若N能被某一

個整數(shù)整除,

則使W值為1,

否則W值不變。

2011-7-10

3、用偽代碼表示算法

■一什么是偽代碼

偽代碼是用介于自然語言和計算機

語言之間的文字和符號來描述算法。它

如同一篇文章一樣,自下而上地寫下來。

每一行(或幾行)表示一個基本操作。

它不用圖形符號,因此書寫方便、格式

緊湊,易學好懂,便于修改,也便于向

計算機語言(即程序)過渡。

2011-7-1030

3、用偽代碼表示算法

偽代碼表示算法的幾種結(jié)構(gòu)

?分支選擇結(jié)構(gòu)

IF(條件)THEN

語句組1

ELSE

語句組2

ENDIF

?循環(huán)結(jié)構(gòu)

DOWHILE(條件)

循環(huán)體

2?!昂驨DDO31

3、用偽代碼表示算法

-一舉例

例1.用偽代碼設計算法判斷N是否為素數(shù)。

解:判斷某個數(shù)N是否為素數(shù)的方法是潸N作為被

除數(shù),用2到仄各個整數(shù)輪流作除數(shù),如果

都不能被整除,則N為素數(shù)。

為了使程序能符合結(jié)構(gòu)化程序設計,這里設計

了一個開關W,使初值為0,若N能被某一個整

數(shù)整除,則使W值為1,否則W值不變。最后

根據(jù)W的值來確定N是否為素數(shù),若W值為0,

則N為素數(shù),否則N為非素數(shù)。

2011-7-10

Y<A>1設

3、用偽代碼表示算法

-一舉例

解:用偽代碼設計算法如下:

BEGIN(算法開始)

inputN

0=>W

2=>l

DOWHILEI<4NANDW=0

N/l余數(shù)=>R

IFR=0THEN1=>W

ELSEl+1=>l(轉(zhuǎn)下頁)

2011-7-1033

ENDIF

ENDDO

IFW=0THENp?rintN,“是素

數(shù)”

ELSEprintN,“不是素數(shù)”

ENDIF

END(算法結(jié)束)衿

2011-7-1034

3用偽代碼表示算法

一一舉例

例2用偽代碼設計算法用下面公式求sinx的值。

X4?-1X4/7+1

sinx=x--------1--------——+...-----------------1--------------

3!5!7!(4〃一1)!(4〃+1)!

解:

該多項式可以寫成下列形式:

3572n-1

?XXX1X

sinx=x--------1--------------\~...+(—1).

3!5!7!(2〃—1)!

2011-7-1035

該問題是求多項式的和。

?用變量SUM來存放和,初值賦為X。

?用變量S來存放符號,初值賦為1。

?用變量D來存放每一項的分母,初值賦為L

?用變量T來存放每一項的分子,初值賦為1。

?用變量TERM來存放每一項。

?用變量K控制內(nèi)循環(huán)次數(shù),初值賦為1。

?用變量i控制外循環(huán)次數(shù),初值賦為2。

算法使用了雙重循環(huán),外層循環(huán)用來求

出每一項,并把它加到和上。內(nèi)循環(huán)是分別

求出每一項的分子和分母。

2011-7-1036

求第I項的程序段為:i從2變化到N

內(nèi)循環(huán)是分別求出第i項的分子和分母。

WHILEK<2*i-1DO

D=D*K一D用來存放分母(2*i?1)!

T=T*X一T用來存放分子(X)⑵⑴

K=K+1

ENDDO

用下列算法求第i項的值:

S=(-1)*S

TERM=S*T/D

把求出第i項加到和中

SUM=SUM+TERM

完整的算法如下頁所示:

2011-7-1037

解:用偽代碼設計算法如下:

法一.BEGIN(算法開始)

輸入N,X

X=>SUM

1=>S

2=>i

WHILEi<NDO

D=1

T=1

K=1

WHILEK<2*i-1DO

D=D*K

T=T*X

K=K+1

ENDDO

2011-7-1038

S=(-1)*S

TERM=S*T/D

SUM=SUM+TERM

1=1+1

ENDDO

PRINTSUM

END(算法結(jié)束)

2011-7-10

法二:

BEGIN(算法開始)/-----------------------\

輸入X,N當當2時,D=2*3

X=>SUM當1=4時,D=4*5

X=>TERM當1=6時,0=6*7

T=X**2當1=8時,D=8*9

i=2

D=1

DOWHILEi<=2*N-1

D=i*(i+1)

TERM=TREM*T/D

TERM=TERM*(-1)

SUM=SUM+TERM

i=i+2

ENDDO

PRINTSUM

END(算法結(jié)束)

2011-7-10

溫馨提示

  • 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

提交評論