最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

高中技術(shù)05 算法與程序設(shè)計(VB)

2018-09-22 11:44 作者:swiss126  | 我要投稿

算法與程序設(shè)計(VB)

【教學目標】

1.???????? 掌握算法的基本概念及面向?qū)ο缶幊趟枷?/p>

2.???????? 熟練掌握并運用VB基礎(chǔ)編程知識和基本算法知識

*請下載課程需要的軟件,對照知識點和練習題進行上機操作練習。

【知識歸納】

1.???????? 算法基本概念

(1)?????? 特征:有窮性、確定性、可行性、有輸出

(2)?????? 形式:自然語言、流程圖、計算機語言

(3)?????? 結(jié)構(gòu):順序、分支(選擇)、循環(huán)

2.???????? 常用算法:枚舉、解析、排序(冒泡排序、選擇排序)、查找(順序查找、對分查找)

3.???????? 面向?qū)ο缶幊?/p>

(1)?????? 對象:擁有狀態(tài)和方法,是對客觀事物的抽象

(2)?????? 類:對相同性質(zhì)的對象的抽象,一個對象是類的一個示例

(3)?????? 事件:發(fā)生在一個對象上的事情,通常指用戶在對象上激發(fā)的動作

*VB工具箱中每種控件都是一個類。對象是窗體和控件生成的工具。每個對象都有自己的屬性、方法,并且可以響應(yīng)外部事件。

4.???????? VB可視化編程(窗體文件名后綴是.frm):

(1)?????? 常用控件:Label(標簽)、TextBox(文本框)、CommandButton、(按鈕控件)、Image(圖像框)、ListBox(列表框)、Timer(時鐘)

(2)?????? 常用屬性:Name(名稱)、Font(字體)、Text(文本)、Caption(標題)、BackColor(背景色)、Width(寬度)、Height(高度)、Left(左邊距)、Top(頂邊距)、Visible(可視)

(3)?????? 改變控件屬性的方法:對象名.屬性名

5.???????? VB程序設(shè)計(工程文件名后綴是.vbp):

(1)?????? 常用數(shù)據(jù)類型:Integer(整型)、Long(長整型)、Single(實數(shù))、Double(實數(shù))、String(字符串,帶"")、Boolean(邏輯型)、Date(日期型,帶# #)

(2)?????? 常量:Const 常量名=數(shù)值

(3)?????? 變量:Dim 變量名 As 數(shù)據(jù)類型

(4)?????? 變量命名:①字母、數(shù)字、下劃線組成②只能字母開頭③不能使用關(guān)鍵字、保留字

(5)?????? 基本運算

(6)?????? 語法規(guī)則:

注釋語句:以單引號(')開頭的一串文字,對附近的程序段進行簡要的說明

賦值語句:變量名=表達式? 或???? 對象名.屬性名=表達式

選擇語句:行If、塊If

循環(huán)語句:For循環(huán)、While循環(huán)、Do While循環(huán)

(7)?????? 函數(shù)

①???? 常用函數(shù):絕對值A(chǔ)bs(x)、取整(取不大于x的最大整數(shù)) Int(x)、

截取x的整數(shù)部分Fix(x)、算術(shù)平方根Sqr(x)、字符轉(zhuǎn)ASCII碼Asc(x)、

ASCII碼轉(zhuǎn)字符Chr(x)、取值Val(x)、轉(zhuǎn)字符串Str(x)、字符串長度Len(x)、

截取字符串Mid(x,n,k)、求隨機數(shù)Rnd()

②???? 自定義函數(shù):

Function函數(shù)名(參數(shù)表) As 類型名

 語句塊

End Function


?

【知識梳理】

1.???????? 算法:對解題方法的精確而完整的描述,即解決問題的方法和步驟。

(1)?????? 特征:

①?? 有窮性:一個算法必須保證它的執(zhí)行步驟是有限的,即它是能終止的。一般來說,“有窮性” 也指在有限的或者合理的時間范圍內(nèi)完成全部操作。

②?? 確定性:算法中的每個步驟必須有確切的含義,不能有兩義性。

③?? 可行性:算法中的每一個步驟都要是足夠簡單、能實際操作的,而且能在有限的時間內(nèi)完成。

④?? 有0個或多個輸入。算法常需要對數(shù)據(jù)進行處理,因此算法常常需要數(shù)據(jù)輸入。如果初始數(shù)據(jù)已經(jīng)存在,則不再需要從外部輸入數(shù)據(jù)。

⑤?? 有一個或多個輸出:算法的目的是用來解決問題的,它必須向人們提供最終的結(jié)果。

(2)?????? 表示方法:

①???? 自然語言:用自然語言描述算法通俗易懂,但其缺點是敘述比較繁瑣冗長,容易出現(xiàn)“歧義性”。

②???? 流程圖:一種直觀易用,圖形描述算法的方法,也是目前使用最廣泛的一種方法。

③???? 計算機語言:計算機語言表示算法必須嚴格遵守所使用的程序設(shè)計語言語法規(guī)則。

(3)?????? 結(jié)構(gòu):

①???? 順序結(jié)構(gòu):在算法流程中,執(zhí)行完一個處理步驟Step1后,順序執(zhí)行緊跟著的下一個步驟Step2, 一直這樣下去直至完成任務(wù)。

順序結(jié)構(gòu)流程圖

②???? 選擇結(jié)構(gòu)也叫分支結(jié)構(gòu),就是判斷條件是否成立,并選擇某一條路徑中的指令執(zhí)行。

選擇結(jié)構(gòu)流程圖

?

③???? 循環(huán)結(jié)構(gòu)就是首先判斷條件是否成立,如果不成立則跳出循環(huán)體,如果條件成立則執(zhí)行循環(huán)體內(nèi)的指令,然后再次判斷條件是否成立,如果條件成立則再次執(zhí)行循環(huán)體內(nèi)的指令,直至條件不成立跳出循環(huán)體為止。


??


當型循環(huán)(While循環(huán))結(jié)構(gòu)流程圖

直到型循環(huán)(Do While循環(huán))結(jié)構(gòu)流程圖


??

【典型例題】

1.某算法部分流程圖如圖所示。執(zhí)行這部分流程,依次輸入12、-5、29、18、7,則輸出值是


A.12

B.-5

C.29

D.7

2.某算法的流程圖如下圖所示,它主要表示的是算法中的(? )。


A、選擇結(jié)構(gòu)

B、順序結(jié)構(gòu)

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

D、流程結(jié)構(gòu)


?
?

?

2.???????? 面向?qū)ο缶幊?Object Oriented Programming,簡稱OOP)

(1)?????? 對象:擁有狀態(tài)和方法,是對客觀事物的抽象

(2)?????? :對相同性質(zhì)的對象的抽象,一個對象是類的一個示例

(3)?????? 事件:發(fā)生在一個對象上的事情,通常指用戶在對象上激發(fā)的動作

*VB工具箱中每種控件都是一個類。對象是窗體和控件生成的工具。每個對象都有自己的屬性、方法,并且可以響應(yīng)外部事件。

?

3.???????? VB可視化編程(窗體文件名后綴是.frm):

(1)?????? 常用控件



(2)?????? 常用屬性

*改變控件屬性的方法:對象名.屬性名

?

4.???????? VB程序設(shè)計(工程文件名后綴是.vbp):

(1)?????? 常用數(shù)據(jù)類型:Integer(整型)、Long(長整型)、Single(實數(shù))、Double(實數(shù))、String(字符串,帶"")、Boolean(邏輯型)、Date(日期型,帶# #)

(2)?????? 常量:Const 常量名=數(shù)值

(3)?????? 變量:Dim 變量名 As 數(shù)據(jù)類型

(4)?????? 變量命名:①字母、數(shù)字、下劃線組成②只能字母開頭③不能使用關(guān)鍵字、保留字

(5)?????? 基本運算

(6)?????? 語法規(guī)則:

注釋語句:以單引號(')開頭的一串文字,對附近的程序段進行簡要的說明

賦值語句變量名=表達式??????? 或???? 對象名.屬性名=表達式

選擇語句

行If:

? If 條件表達式 Then 語句1? Else 語句2 ?或 If 條件表達式 Then 語句

塊If:

If 條件表達式1 ?Then

????????語句1

ElseIf 條件表達式2? Then

????????語句2

????????……

ElseIf 條件表達式n? Then

????????語句n

Else

????????語句0

End If

循環(huán)語句:

For循環(huán):

For 循環(huán)變量 = 初值 To 終值 Step 步長

????????語句塊

Next 循環(huán)變量

While循環(huán):

While 條件表達式 ?

????????語句塊

Wend

Do While循環(huán):

Do While 條件表達式 ?

????????語句塊

Loop

(7)?????? 函數(shù)

Function ? 函數(shù)名(參數(shù)表) ?As 類型名

????????語句塊

End? Function

【典型例題】

1.有如下VB程序段:

a(1) = 1: a(2) = 1

b(1) = 1: b(2) = 2

For i = 3 To 5

??? a(i) = a(i - 1) + a(i - 2)

??? b(i) = b(i - 1) + a(i)

Next i

執(zhí)行該程序段后,數(shù)組元素b(5)的值為


??

A.12

B.8

C.5

D.5


??

?

?2.有如下程序段:

?????????????????? For i=1 To 2

??????????????????????????? For j=1 To 7-i

???????????????????????????????????? If a(j)>a(j+1) Then

?????????????????????????????????????????????? t=a(j):a(j)=a(j+1):a(j+1)=t

???????????????????????????????????? End If

??????????????????????????? Next j

?????????????????? Next i

???????? 數(shù)組元素a(1)到a(7)的值依次為"44,24,33,67,77,58,12",經(jīng)過該程序段“加工”后,數(shù)組元素a(1)到a(5)的值依次為


??

A.12,24,44,33,58

B.12,24,33,67,77

C.24,44,44,58,12

D.44,24,33,58,12


??

?

5.???????? 常用算法

(1)?????? 枚舉算法:例舉出問題可能的解,并在例舉過程中檢驗是不是問題真正解的算法。

(2)?????? 解析算法:利用解析方法找到表示問題的前提條件和結(jié)果之間關(guān)系的數(shù)學表達式,并通過表達式計算實現(xiàn)問題求解的算法。

(3)?????? 排序算法

①???? 冒泡排序:重復(fù)的順序訪問數(shù)組,依次比較相鄰兩個數(shù)據(jù),如果他們順序錯誤就把他們交換過來,直到?jīng)]有數(shù)據(jù)需要交換為止。

升序排序n個數(shù)據(jù)的數(shù)組d:

For i=1 To n-1 'n個數(shù)排序共需進行n1

???????? For j=n To i+1 Step-1 '每一趟從后往前,相鄰兩數(shù)兩兩比較

?????????????????? If d(j)d(j-1) Then '若滿足條件則進行互換

??????????????????????????? Temp=d(j):d(j)=d(j-1):d(j-1)=temp

?????????????????? End If

???????? Next j

Next i

*若要降序排列,只需將語句"If d(j)<d(j-1) Then"改為"If d(j)>d(j-1) Then"即可。

?

②???? 選擇排序:從數(shù)組中找到最小(或最大)的一個數(shù),使他與第一個數(shù)交換位置,然后從剩下的數(shù)中找到最小(或最大)的一個數(shù)與數(shù)組中的第二個數(shù)交換位置,以此類推,直到所有數(shù)排成一個有序數(shù)組為止。示例代碼如下:

升序排序n個數(shù)據(jù)的數(shù)組d:

For i=1 To n-1 'n個排序共進行n1趟排序

???????? k=i 'i趟排序時,首先用k記錄i

???????? For j=i+1 To n 'k位置上的數(shù)依次與j位置上的數(shù)進行比較

?????????????????? If d(k)>d(j) Then k=j '若找到比k位置上更小的數(shù),則更新k的值

???????? Next j

???????? If k<>i Then 'i位置上的數(shù)不是最小數(shù),則和k位置上的數(shù)進行互換

?????????????????? temp=d(i):d(i)=d(k):d(k)=temp

???????? End If

Next i

*若要降序排列,只需將語句" If d(k)>d(j) Then k=j "改為" If d(k)>d(j) Then k=j "即可。

?

(4)?????? 查找算法

①???? 順序查找:從第一個數(shù)開始,順序逐個與給定值進行比較,若某個數(shù)和給定值相等,則查找成功,否則查找失敗。

在數(shù)組d中查找值key:

For循環(huán):

For i=1 to n

???????? If d(i)=key Then '找到,做相應(yīng)處理

Next i 'i>n表示未找到

?Do - While循環(huán):

 i=1

 Do While i<=n

????????????? If d(i)=key Then '找到,做相應(yīng)處理

????????????? i=i+1

 Loop'i>n表示未找到

②???? 對分查找:在有序數(shù)據(jù)序列中,首先把要查找的數(shù)據(jù)與數(shù)組中間的元素進行比較,如果相等,則查找成功并退出查找;否則,根據(jù)數(shù)組元素的有序性,確定在數(shù)組前半部分還是后半部分查找,確定了查找范圍后重復(fù)進行以上比較,直到找到或未找到為止。

*注意:

???????????????????????? i.????????????? 數(shù)據(jù)序列必須有序。

?????????????????????? ii.????????????? "未找到"是指在指定范圍內(nèi)起點大于終點時仍未找到該數(shù)據(jù)。

【典型例題】

???????? 有一組正整數(shù),要求供對其中的素數(shù)進行升序排序。排序后素數(shù)在前,非素數(shù)在后。排序示例如下。

Const n = 8

Dim a(1 To n) As Integer

Private Sub Command1_Click()

???????? Dim i As Integer, j As Integer, k As Integer, t As Integer

???????? Dim flag As Boolean

???????? '讀取一組正整數(shù),存儲在數(shù)組a中,代碼略

???????? For i = 1 To n - 1

???????? ???????? k = 1

???????? ???????? If IsPrime(a(k)) Then flag = True Else flag = False

???????? ?????????????????? For j = i + 1 To n

?????????????????? ?????????????????? If IsPime(a(j)) Then

??????????????????????????? ?????????????????? If a(j) < a(k) Then

?????????????????? ???????? ???????? ???????? k = j

?????????????????? ???????? ???????? ???????? flag = True

?????????????????? ?????????????????? End If

??????????????????????????? End If

?????????????????? Next j

?????????????????? If k <> i Then

??????????????????????????? t = a(k): a(k) = a(i): a(i) = t

?????????????????? End If

?????????????????? If Not flag Then Exit For 'Exit For表示退出循環(huán)

???????? Next i

???????? '依次輸出排序后的數(shù)據(jù)。代碼略

End Sub

Function IsPrime(m As Integer) As Boolean

???????? '本函數(shù)判斷m是否是素數(shù):是素數(shù)返回值為True,不是素數(shù)返回值為False

???????? '代碼略

End Function


?

?

【課堂練習】


?

1. ?? Dim i As Integer, j As Integer, k As String, n As Integer

???????? n=3

???????? List1.Clear

???????? For i=1 To n

???????? k=""

???????? For j=1 To i

?????????????????? k=k+"*"

?????????????????? Next j

?????????????????? List1.AddItem k

???????? Next i

該程序運行中,在列表框List1中顯示的是(  )


??

2.某數(shù)組的6個元素依次為“27,32,57,78,80,90”。若對該函數(shù)組進行順序查找,其平均查找次數(shù)為(1+2+3+4+5+6)/6=7/2;若對該數(shù)組進行對分查找,其平均查找次數(shù)為( ?。?/p>


??

A.7/2

B.7/3

C.5/2

D.2


?

3.用VB編寫一個字符串分行程序,功能如下:單擊“分行”按鈕Command1,將文本框Text1中的英文文本在列表框List1中分行顯示(分行時單詞不得跨行,每行字符盡可能多但不超過40個),并在標簽Label1中輸出總行數(shù),運行效果如圖所示。分行算法如下:

(1)將文本框中的字符串保存到變量s中;

(2)當s中字符個數(shù)超過40時,循環(huán)執(zhí)行下列①②③步,否則跳轉(zhuǎn)到(3):

①如果第41個字符不是英文字母,則分行位置p=40;否則,向左逐個查找,直至找到第一個非英文字母,將其位置作為分行位置p;

②截取s的前p個字符,作為新增行顯示在列表框List1中,同時總行數(shù)加1;

③將s中未分行部分重新賦值給變量s。

(3)將s作為新增行顯示在列表框List1中,同時總行數(shù)加1。

實現(xiàn)上述功能的VB程序如下,請在畫線處填入合適代碼。

Private Sub Command1_Click( )

???????? Dim s As String,c As String

???????? Dim r As Integer,total As Integer,p As Integer

???????? total=0

???????? s=__(1)__

???????? Do While Len(s)>40

?????????????????? r=41

?????????????????? c=Mid(s,r,1)

?????????????????? If Not((c>="a" And c<="z")Or(c>="A" And c<="Z")) Then

 ?????????????????????? p=40

?????????????????? Else

 ?????????????????????? '從第41個字符開始向左找到第1個非英文字母,并將其位置值賦給p

 ?????????????????????? Do While(c>="a" And c<="z")Or(c>="A"And c<="Z")

???????????????????????????????????? r=__(2)__

???????????????????????????????????? c=Mid(s,r,1)

 ?????????????????????? Loop

 ?????????????????????? p=r

?????????????????? End If

?????????????????? List1.AddItem Mid(s,1,p)

?????????????????? total=total+1

?????????????????? s=__(3)__

 ???? Loop

 ???? List1.AddItem s

 ???? total=total + 1

 ???? Label1.Caption="共"+Str(total)+"行"

End Sub

?

4. 某種編碼以4位二進制碼為一組,每組前兩位表示方向,后兩位表示距離。編寫一個程序,將編碼翻譯成方向和距離,距離值為每組編碼后兩位二進制碼轉(zhuǎn)換為十進制數(shù)的值。具體功能如下:在文本框Text1中輸入連續(xù)多組編碼,單擊“翻譯”按鈕Command1,結(jié)果顯示在列表框List1中。程序運行界面如圖所示。

(1)要使程序運行時,文本框Text1的Width屬性值為2018,可在Form_Load事件過程中添加語句??????? (單選,填字母:A. Width=2018 / B.Text1. Width = 2018 / C. Width. Text1=2018)。

(2)實現(xiàn)上述功能的VB程序如下,請在劃線處填入合適的代碼。

Private Sub Command1_Click()

Dim s As String, c As String, d As String

Dim n As Integer, bl As Integer, b2 As Integer, v As Integer, i As Integer

s = Text1.Text: n = Len(s): i = 1

Do While i <= n

??? c = Mid(s, i, 2)

??? If c = "00" Then

?????????????????? d = "東"

??? ElseIf c = "01" Then

?????????????????? d = "南"

??? ElseIf c = "10" Then

?????????????????? d = "西"

??? Else

?????????????????? d = "北"

??? End If

??? b1 = Val(Mid(s, i + 2, 1))

??? b2 = Val(Mid(s, i + 3, 1))

??? v=____①____?????????????

??? List1.AddItem d + " " + Str(v)

____②____

Loop

End Sub

(3)若文本框Text1中輸入的內(nèi)容為“1111”,單擊“翻譯”按鈕,列表框List1中顯示的內(nèi)容是________。

?


高中技術(shù)05 算法與程序設(shè)計(VB)的評論 (共 條)

分享到微博請遵守國家法律
夏河县| 新竹县| 大同县| 丰宁| 蓝山县| 周口市| 长岛县| 二连浩特市| 丹凤县| 遵义市| 兴化市| 宾川县| 杭锦后旗| 洛阳市| 明光市| 滁州市| 威远县| 台江县| 平罗县| 文山县| 吉安市| 宜兰市| 阿拉善右旗| 南召县| 武山县| 万宁市| 陵川县| 永德县| 南投市| 和田市| 阿尔山市| 清河县| 葵青区| 庆云县| 历史| 沁源县| 兴仁县| 砚山县| 罗山县| 牙克石市| 盖州市|