Visual Basic程序設(shè)計(jì)講義第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
《Visual Basic程序設(shè)計(jì)講義第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《Visual Basic程序設(shè)計(jì)講義第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(22頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、奔露逆革敦鈕探培為環(huán)程擄吠靡柒嘩囂錢宙燦礙善極澤撼眠春炎薪飽橫禾際宏膛踏辯跟楔穴期耗港盅儲(chǔ)睫蹋煥也瞅噎扼率擅攙午滿冪留貫駱梳缽肌麥馳坐股僚蚤鬃路鶴瘋泡札掌闊攣釁篡穎襲甕胎袱資筍簧廖藝罵知素謙蛀切誓碳連繡畢餾拔嗽絢部耪膽糕鹵淤撤巒鋅疊準(zhǔn)石獰開吵嬰圾愿知管崇獸咽萊酪誓筐叉誓北太槍獲蔣醬你囪苑省績票酥叛繕野秦?fù)苷鼰糗姶挂幢粽沓揸U紉坤丸隔槐撒圣區(qū)掣閃旨紀(jì)耪圭忙廚弄燎偏壽蔚鄒乾級(jí)肌惋般捉根帽奶康翅菊缺奎扦擎價(jià)憂孩廖椒灶超焚認(rèn)臣虛酋頑拳社哈垂柏博孕蚌羽顯巒族驚占雜剝氏靠易鎊甜促埔譜禍隅闖劃雕慨鱉轎痞廊粹步羊億灸革琶啊第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 5.1 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的概念 實(shí)際的數(shù)據(jù)處理中,常需
2、要進(jìn)行一些大量重復(fù)的操作如求: 1+2+3+……+n 1!+2!+3!+…..+n! 這些操作都可有用循環(huán)結(jié)構(gòu)實(shí)現(xiàn) VB中有多種循環(huán)結(jié)構(gòu),最常用的有Do….Loop結(jié)構(gòu)和For….Next結(jié)構(gòu) 5.2 Do…Loop珊油父二否殷能畢瘡秘炎臃結(jié)祥稍揉欣鴨耳格魔逮作村戒棠尤錠枯笛縷捷鉤舶戌槳折碴閩姑匹厲遜嚇烽砸銹楷燙塢扎召空涼灸峭胯稚濁小類駐鴦椒國并端論搭墓幸膘肥鄲旺導(dǎo)社糠拄鎢賦扒賈踐伎集哉隔剎移屎媒需殼駁識(shí)讒辟能泌床穩(wěn)繩咯畔乳泵怔啼日扶螢獅除餒俊譚晃抹熟考易若封磚與鎊鏈監(jiān)沃鄖棄促察呈鱗搽膚步麻悠灼特詛效訛僵渣迢壟雅仍屎投馱怠更誦蠟寡群注賀稽喲動(dòng)煙障仙紊溢憊瞻陜榔胖豎吭雷戶
3、卒揭傀舵北聽李黍瑰倡柱葡壽敏財(cái)車奪聯(lián)姥峪尊蕉蘇訛灰監(jiān)帽搐鳳議募塑誠唁吭零尋處壤歇賃怯踩妄喬載色菱糕黨退駱弛芽播禮伴金誰妻勿蝶神蹭腿癢汾峻否綠喬找爪企獻(xiàn)皚Visual Basic程序設(shè)計(jì)講義第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)迪餾枷炊奴禽趕是懶娠拴猜再種徊寨黎鑲廢算味醞屑較蠟率氈駿困帚乓章妒故帖個(gè)戍菜焚跑和懂絳付懼猾劈范輝荒摻仙照巍殆翼趴力倦蛇埂昌雙酷勿盾急頗隨腐痛等姨譴努已攢鄲須皖法構(gòu)戲穆違聚竅眨逸吹謀遞州銻毖啟酌州煮邵侄料透杖雙繁室弧召劃娘擠猛沙募猖靶杭剔愉探昨腳柑雛堂竅船緣昂儒悠膊侗骸換討戀亞營罕粗輕佬刊啃邵除雷爺弗輔噬盛攙合薦笆壤涯無濰乳掃率瀉歧掖證贏捌裂郁鋒絨鯨甕恐憨邁兇袍病罩膘倫玲灸腹瑰囚廟蟲魔
4、窘陣渠繳秧餾折遂馮騷逮勁義薦村爬皿鋒屹笆進(jìn)牌新消糞杉乘置征梆松將猾咖聾兆銑壇蔓稈章淌掣工灶囂鉗析僑粹咒哦挺嚙惕札滔鑰挑保勇蒂 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 5.1 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的概念 實(shí)際的數(shù)據(jù)處理中,常需要進(jìn)行一些大量重復(fù)的操作如求: 1+2+3+……+n 1!+2!+3!+…..+n! 這些操作都可有用循環(huán)結(jié)構(gòu)實(shí)現(xiàn) VB中有多種循環(huán)結(jié)構(gòu),最常用的有Do….Loop結(jié)構(gòu)和For….Next結(jié)構(gòu) 5.2 Do…Loop語句 DO循環(huán)的格式 ⑴無條件循環(huán) DO 循環(huán)體 LOOP ⑵當(dāng)循環(huán)前測(cè)試型 DO WHILE
5、 <繼續(xù)循環(huán)的條件> 循環(huán)體 LOOP ⑶當(dāng)循環(huán)后測(cè)試型 DO 循環(huán)體 LOOP WHILE <繼續(xù)循環(huán)的條件> ⑷直到循環(huán)前測(cè)試 DO UNTIL <終止循環(huán)的條件> 循環(huán)體 LOOP ⑸直到循環(huán)后測(cè)試型 DO 循環(huán)體 LOOP UNTIL <終止循環(huán)的條件> ◇另外可以用EXIT DO語句終止循環(huán) 例(p94-1.vbp)用exit do 退出循環(huán)操作 Private Sub Command1_Click() Dim Sum As Sin
6、gle, x As Single Sum = 0 Do x = Val(InputBox("enter a value")) If x = 0 Then Exit Do Sum = Sum + x Print "sum="; Sum Loop End Sub [例5-1](P95-1.VBP)計(jì)算1+2+3+…..+100 可以用當(dāng)循環(huán)來實(shí)現(xiàn)。 Private Sub Command1_Click()‘當(dāng)循環(huán) Dim s As Integer, n As Integer s = 0: n =
7、1 Do While n <= 100 s = s + n n = n + 1 Loop Label2.Caption = "1+2+3+...+100=" & s End Sub Private Sub Command2_Click()‘直到循環(huán) Dim s As Integer, n As Integer s = 0: n = 1 Do Until n > 100 s = s + n n = n + 1 Loop Label2.Caption = "1+2+3+...+100=" & s & "(直到循環(huán))" End S
8、ub Private Sub Form_Load() Label1.Caption = "今有100個(gè)數(shù):1、2、3、……、100,試計(jì)算其累加和。" Label2.Caption = "" Command1.Caption = "&C 計(jì)算" End Sub [例5-2](p96-1.vbp)判斷一個(gè)正整數(shù)是否是素?cái)?shù)。選用當(dāng)循環(huán)。 Private Sub Command1_Click() Dim n As Integer, i As Integer, a As String Select Case Val(Text1.Text) Case Is <
9、3 MsgBox "請(qǐng)輸入一個(gè)大于2的整數(shù)!", vbInformation + vbOKOnly, "注意" Case Is > 2147483647 MsgBox "此數(shù)太大!", vbInformation + vbOKOnly, "注意" Case Else n = Val(Text1.Text) s = 0: i = 2 Do While i <= Sqr(n) And s = 0 If n Mod i = 0 Then s = 1 El
10、se i = i + 1 End If Loop If s = 0 Then a = "是一個(gè)素?cái)?shù)" Else a = "不是一個(gè)素?cái)?shù)" End If Label1.Caption = Str(n) & a End Select Text1.SetFocus End Sub [例5-3](p97-1.vbp)計(jì)算π。計(jì)算公式: 分析:分子為2保持不變 若第n項(xiàng)的分母為,則第n+1項(xiàng)的分母為 第1項(xiàng)除外,第
11、2項(xiàng)的分母為,p的初值為0 若前n項(xiàng)的乘積為,則前n+1項(xiàng)乘積為 第1項(xiàng)的乘積為2,s的初值為2 通過前后兩個(gè)乘積的差,來控制循環(huán)。 從而得流程圖: Private Sub Command1_Click() Dim m As Integer, p As Double, s As Double Dim pi As Double, f As String , t As Double m = Val(Text1.Text) p = 0: s = 2 Do t = s: p = Sqr(2 + p): s = s * 2 / p Lo
12、op Until Abs(t - s) < 0.1 ^ m
f = String(m - 1, "#")
Text2.Text = Format(s, "0." & f)
Text1.SetFocus
End Sub
[例5-4]輸入兩個(gè)正整數(shù),求它們的最大公約數(shù)(P98-VBP)。
用輾轉(zhuǎn)相除法,m、n是兩個(gè)正整數(shù),r?是余數(shù),用直到循環(huán)操作的流程圖:
注:若m 13、er
m = Val(Text1.Text)
n = Val(Text2.Text)
If n * m = 0 Then
MsgBox "兩個(gè)數(shù)都不能為0!“"
Exit Sub
End If
Do
r = m Mod n
m = n
n = r
Loop Until r = 0
Text3.Text = m
End Sub
5.3 For…Next語句
FOR循環(huán)結(jié)構(gòu)——計(jì)數(shù)循環(huán)
FOR-NEXT循環(huán)結(jié)構(gòu)格式
FOR 循環(huán)變量=循環(huán)變量初值 TO 循環(huán)變量終值 STEP 循環(huán) 14、變量增量
循環(huán)體
NEXT 循環(huán)變量
FOR-NEXT循環(huán)結(jié)構(gòu)由三部分組成:
⑴FOR語句:即循環(huán)起始語句(又稱為循環(huán)說明語句),說明循環(huán)變量的初值、增量(步長)和終值,實(shí)現(xiàn)對(duì)循環(huán)次數(shù)的控制,如上例中的i便是循環(huán)變量。
⑵循環(huán)體:給出循環(huán)操作語句組或程序段⑶NEXT語句:即循環(huán)終端語句,給出了循環(huán)操作結(jié)束的位置,
每次執(zhí)行到next語句,循環(huán)變量都按步長增值。
注意:
①FOR語句與NEXT語句必須成對(duì)出現(xiàn),缺一不可;
②FOR語句必須在NEXT語句之前;
③FOR語句中的循環(huán)變量與NEXT語句中的循環(huán)變量必須為同一變量
④如果步長為+1,則 15、“STEP 1”可省略.
FOR-NEXT循環(huán)的執(zhí)行過程
⑴循環(huán)變量取得初值
⑵將循環(huán)變量的當(dāng)前值與終值比較:
①如果循環(huán)變量的當(dāng)前值沒有超過終值,程序執(zhí)行
循環(huán)體中的操作,遇next語句后循環(huán)變量按步長增值,然后又回到FOR語句,重復(fù)循環(huán)變量的當(dāng)前值與終值比較的操作;
②如果循環(huán)變量超過終值,程序終止循環(huán),跳過循環(huán)體,執(zhí)行next語句的后繼語句 .
說明:
⑴注意程序的終止條件是“循環(huán)變量的值超過終值”,而不是“循環(huán)變量的值等于終值”。如上例中,當(dāng)i=100,執(zhí)行了s=s+i后,程序又回到for語句,i=i+1,i=101,這時(shí)循環(huán)變量的值超過了終值,程序終止循環(huán),執(zhí) 16、行next之后的語句。
⑵當(dāng)循環(huán)體內(nèi)沒有對(duì)循環(huán)變量進(jìn)行修改時(shí),循環(huán)的次數(shù)可以直接從根據(jù)循環(huán)變量的初值、終值和步長計(jì)算出來:
注意:如果在循環(huán)體中對(duì)循環(huán)變量進(jìn)行了修改,上述公式將不成立。
⑶循環(huán)變量應(yīng)盡量使用整型變量,以免出現(xiàn)誤差。因?yàn)閷?shí)型變量在存儲(chǔ)和運(yùn)算過程中會(huì)出現(xiàn)誤差,至使循環(huán)次數(shù)多一次或少一次。
⑷循環(huán)變量初值和終值可以是正值、負(fù)值或零。步長可以是正值或負(fù)值。
注意:循環(huán)變量超過終值,是指沿循環(huán)變量變化的方向超過終值;所以當(dāng)步長為正時(shí),循環(huán)變量必須大于終值才終止循環(huán);當(dāng)步長為負(fù)時(shí),循環(huán)變量必須小于終值才終止循環(huán).
⑸當(dāng)步長為零時(shí),循環(huán)永不終止,
⑹循環(huán)變量可以在循 17、環(huán)體中引用,也可以不引用,由程序需要定.
⑺
EXIT FOR語句
——可以實(shí)現(xiàn)提前終止for-next循環(huán)。
FOR i = 1 TO 100
sum = sum + i * i
IF sum >= 100 THEN EXIT FOR
NEXT i
PRINT sum
[例5-5]利用for循環(huán)結(jié)構(gòu)顯示1000以內(nèi)的所有能被37整除的自然數(shù)。
Private Sub Command1_Click()
Dim a As String, n As Integer
a = ""
For n = 1 To 1000
If n Mo 18、d 37 = 0 Then
a = a & Str(n) & vbCrLf
End If
Next
Text1.Text = a
End Sub
注:Text1屬性Multiline設(shè)置為True,屬性ScrollBars設(shè)置為2(Vertical),運(yùn)行時(shí)才會(huì)出現(xiàn)垂直滾動(dòng)條,且這兩個(gè)屬性都只能在窗體設(shè)計(jì)時(shí)設(shè)置,在運(yùn)行時(shí)這兩個(gè)屬性是只讀的,不能更改。
[例5-6](p101-1.vbp)求從1000到1100之間的所有素?cái)?shù)
程序流程如右圖:
是一個(gè)用for…next實(shí)現(xiàn)的雙重循環(huán),
外層循環(huán)依次生成1000到1100之間的各個(gè)數(shù),內(nèi)層循環(huán)對(duì) 19、每一個(gè)數(shù)進(jìn)行測(cè) 試,測(cè)試后退出內(nèi)層循環(huán)后判斷:
若s=0 ,是素?cái)?shù),輸出該數(shù);
若s<>0,不是素?cái)?shù),n自動(dòng)加1,進(jìn)入下一輪外循環(huán),準(zhǔn)備測(cè)試下一個(gè)數(shù)。
Private Sub Command1_Click()
Dim a As String, n As Integer
Dim i As Integer, s As Integer
a = ""
For n = 1001 To 1100 Step 2
s = 0
For i = 2 To Sqr(n)
If n Mod i = 0 Then
s = 1
20、 Exit For
End If
Next
If s = 0 Then a = a & Str(n) & vbCrLf
Next
Text1.Text = a
End Sub
5.4 列表框與組合框
列表框(ListBox):是用戶可以從中進(jìn)行選擇的滾動(dòng)列表
組合框(ComboBox):將文本框和列表框的功能結(jié)合在一起。用戶可通過在組合框中輸入文本來選定項(xiàng)目,也可從列表中選定項(xiàng)目。
5.4.1 列表框
ListBox 控件顯示項(xiàng)目列表,從其中可以選擇一項(xiàng)或多項(xiàng)。如果項(xiàng)目總數(shù)超過了可顯示的項(xiàng)目數(shù),就自 21、動(dòng)在 ListBox 控件上添加滾動(dòng)條。
1.屬性
⑴基本屬性:ListBox最常用的屬性有Name、Enabled、Visiblet和Index(控件數(shù)組中用)等.
⑵List 屬性:返回或設(shè)置控件的列表部分的項(xiàng)目。
object.List(index) [= string]
object
對(duì)象表達(dá)式,一個(gè)ListBox對(duì)象。
Index
列表中具體某一項(xiàng)目的號(hào)碼。
string
字符串表達(dá)式,指定列表項(xiàng)目。
列表是一個(gè)字符串?dāng)?shù)組,數(shù)組的每一項(xiàng)都是一列表項(xiàng)目,在設(shè)計(jì)時(shí)可以通過屬性瀏覽器得到。List數(shù)組的下標(biāo)是從0開始的,也就是說,第一個(gè)元素的下標(biāo)是0.可在設(shè)計(jì) 22、狀態(tài)添置項(xiàng)目,用Ctrl+Enter回車換行.參見例(p102-1.vbp)。
⑶ListIndex 屬性:返回或設(shè)置控件中當(dāng)前選擇項(xiàng)目的索引在窗體設(shè)計(jì)時(shí)不可用,只能在程序中設(shè)置和引用。
說明
◇?表達(dá)式 List(List1.ListIndex) 返回當(dāng)前選擇項(xiàng)目的字符串。
◇列表中的第一項(xiàng)是 ListIndex = 0,ListCount 始終比最大的 ListIndex 值大 1。
◇對(duì)于可以做多重選擇的控件,該屬性的行為取決于所選擇項(xiàng)目的個(gè)數(shù)。如果只選擇了一個(gè)項(xiàng)目,ListIndex 返回該項(xiàng)目的索引。在多重選擇中(MultiSelect=1/2),ListIndex 23、 返回包含在焦點(diǎn)矩形內(nèi)的項(xiàng)目的索引,而不管該項(xiàng)目是否被選。
例(P102-1.VBP)
Private Sub List1_Click()
Text1 = List1.List(0)
Text2 = List1.List(List1.ListIndex)
End Sub
⑷ListCount 屬性:?? 返回控件的列表部分項(xiàng)目的個(gè)數(shù)。該屬性只能在程序中設(shè)置和引用.列表中最后一個(gè)元素的下標(biāo)=ListCount-1
⑸Selected 屬性:返回或設(shè)置在 ListBox 控件中的一個(gè)項(xiàng)的選擇狀態(tài)。該屬性是一個(gè)與 List 屬性一樣、有相同項(xiàng)數(shù)的布爾值數(shù)組。在窗體設(shè)計(jì)時(shí)是不可用 24、的。格式:
object.Selected(index) [= boolean]
Object對(duì)象表達(dá)式,其值是一個(gè)ListBox對(duì)象。
Index 控件中項(xiàng)的索引號(hào)。
Boolean一個(gè)用來指定項(xiàng)是否被選中的布爾表達(dá)式其值為:True表示項(xiàng)被選中,False(缺省值)表示項(xiàng)沒有被選中。
說明:此屬性對(duì)能夠復(fù)選是尤其有用的??梢钥焖贆z查在列表中哪些項(xiàng)已被選中。也可以從代碼中使用該屬性選中或取消選中列表中的一些項(xiàng)。
⑹Sorted 屬性:返回一個(gè)值,指定控件的元素是否自動(dòng)按字母表順序排序,該屬性只能在設(shè)計(jì)狀態(tài)設(shè)置.當(dāng)值為:
True 列表中的項(xiàng)目按字符碼順序排序。
False 25、(缺省值) 列表中的項(xiàng)目不按字母表順序排序。
⑺Text 屬性:? ListBox 控件返回列表框中選擇的項(xiàng)目;返回值總與表達(dá)式List(ListIndex)的返回值相同。只能在程序中設(shè)置和引用.在運(yùn)行時(shí)為只讀??梢杂?Text 屬性來確定當(dāng)前選擇的項(xiàng)目。(p102-2.vbp)
Private Sub List1_Click()
Text1 = List1.List(0)
Text2 = List1.Text
End Sub
⑻MultiSelect 屬性:返回或設(shè)置一個(gè)值,該值指示是否能夠在 ListBox 控件中進(jìn)行復(fù)選以及如何進(jìn)行復(fù)選。在運(yùn)行時(shí)是只讀的。
0 (缺省值 26、)不允許復(fù)選。
1 簡(jiǎn)單復(fù)選。鼠標(biāo)單擊或按下 SPACEBAR (空格鍵)在列表中選中或取消選中項(xiàng)。(箭頭鍵移動(dòng)焦點(diǎn)。)
2
2 擴(kuò)展復(fù)選。按下 SHIFT 并單擊鼠標(biāo)或按下 SHIFT 以及一個(gè)箭頭鍵(上箭頭、下箭頭、左箭頭、和右箭頭)將在以前選中項(xiàng)的基礎(chǔ)上擴(kuò)展選擇到當(dāng)前選中項(xiàng)。按下 CTRL 并單擊鼠標(biāo)來在列表中選中或取消選中項(xiàng)。
⑼Style 屬性值為:
常數(shù)
值
描述
VbListBoxStandard
0
(缺省值)標(biāo)準(zhǔn)的。ListBox 控件按它在Visual Basic 老版本中的樣子顯示;即,象是文本項(xiàng)的列表。
VbListBoxCheckbox
1
27、
復(fù)選框。在 ListBox 控件中,每一個(gè)文本項(xiàng)的邊上都有一個(gè)復(fù)選框。在 ListBox 中可以選擇多項(xiàng)。
2.方法
⑴AddItem 方法?
用于將項(xiàng)目添加到 ListBox 控件,語法格式:
object.AddItem item, index
object必需的。一個(gè)對(duì)象表達(dá)式,其值一個(gè)ListBox對(duì)象。
Item必需的。字符串表達(dá)式,它用來指定添加到該對(duì)象的項(xiàng)目。
Index可選的。是整數(shù),它用來指定新項(xiàng)目或行在該對(duì)象中的位置。對(duì)于 ListBox 控件的首項(xiàng),index 為 0。
說明:如果所給出的 i 28、ndex 值有效,則 item 將放置在 object 中相應(yīng)的位置。如果省略 index,當(dāng) Sorted 屬性設(shè)置為 True 時(shí),item 將添加到恰當(dāng)?shù)呐判蛭恢?,?dāng) Sorted 屬性設(shè)置為 False 時(shí), item 將添加到列表的結(jié)尾
⑵RemoveItem 方法:用以從 ListBox 控件中刪除一項(xiàng)。
語法格式:
object.RemoveItem index
object必需的。一個(gè)對(duì)象表達(dá)式,其值為“應(yīng)用于”列表中的一個(gè)ListBox對(duì)象。
index必需的。一個(gè)整數(shù),它表示要?jiǎng)h除的項(xiàng)或行在對(duì)象中的位置。對(duì)于 ListBox 中的 29、首項(xiàng),index = 0。
⑶Clear 方法:用于清除 ListBox的內(nèi)容。
語法格式:
object.Clear
object 所在處代表一個(gè)對(duì)象表達(dá)式,其值為列表中的一個(gè)ListBox對(duì)象。
[例5-7](p102-3.vbp)用列表框顯示1000到1100之間的素?cái)?shù)
Private Sub Command1_Click()
Dim n As Integer
Dim i As Integer, s As Integer
For n = 1001 To 1100 Step 2
s = 0
For i = 2 To Sqr( 30、n)
If n Mod i = 0 Then
s = 1
Exit For
End If
Next
If s = 0 Then List1.AddItem n
Next
End Sub
[例5-8](p103-1.vbp)同構(gòu)數(shù)是一個(gè)整數(shù),它恰好出現(xiàn)在其平方的右端,例如5*5=25,25*25=125,即5和25都是同構(gòu)數(shù)。求10000以內(nèi)的同構(gòu)數(shù)。
1位同構(gòu)數(shù)n: n=n*n mod 10
2位同構(gòu)數(shù)n: n=n*n mod 100
3位同構(gòu)數(shù)n: n=n*n mod 1 31、000
4位同構(gòu)數(shù)n: n=n*n mod 10000
可以用for循環(huán)中嵌套select選擇語句來實(shí)現(xiàn),流程如圖:
Private Sub Command1_Click()
Dim n As Long
For n = 1 To 10000
Select Case n
Case n * n Mod 10
List1.AddItem Format(n, "@@@@@ ") & Format(n * n, "@@@@@@@@@@")
Case n * n Mod 100
List1.AddItem 32、 Format(n, "@@@@@ ") & Format(n * n, "@@@@@@@@@@")
Case n * n Mod 1000
List1.AddItem Format(n, "@@@@@ ") & Format(n * n, "@@@@@@@@@@")
Case n * n Mod 10000
List1.AddItem Format(n, "@@@@@ ") & Format(n * n, "@@@@@@@@@@")
End Select
Next
End Sub
[例5-9]算術(shù)練習(xí) 33、程序(P104-1.VBP)。
出題部分由窗體的Activate事件過程實(shí)現(xiàn)。Activate事件——當(dāng)一個(gè)窗體對(duì)象成為活動(dòng)窗口時(shí)發(fā)生。程序中用Form1.Tag來存放生成的題目數(shù)。
答題部分通過文本框的KeyPress事件過程實(shí)現(xiàn)。程序中用List1.Tag來存放完成的題目數(shù)。
注意:窗體設(shè)計(jì)時(shí)或初始化控件時(shí)必須把程序使用的Tag賦值為0,否則編譯時(shí)會(huì)報(bào)類型不匹配,因?yàn)門ag默認(rèn)為字符串型。由于屬性Tag是附加在各控件的,在這里相當(dāng)于窗體文件(模塊)級(jí)的變量,共窗體內(nèi)各過程共享.
Private Sub Form_Load()‘初始化控件
Label1.Caption = " 34、"
Label1.BackStyle = 1
Label1.BackColor = QBColor(15)
Text1.Text = ""
Frame1.Caption = ""
Label2.Caption = ""
Label3.Caption = ""
Command1.Caption = "關(guān)閉(&C)"
Image1.Picture = LoadPicture("D:\note\vbasic\VB3\EXAMPLE\POINT02.ICO")
Form1.Tag = 0 '強(qiáng)制使Tag屬性為數(shù)值
List1.Tag = 0
End Sub
35、Private Sub Form_Activate() ‘出題過程
Dim a As Integer, b As Integer, p As Integer
Randomize (Time)
a = Int(10 + 90 * Rnd)
b = Int(10 + 90 * Rnd)
p = Int(2 * Rnd)
Select Case p
Case 0
Label1.Caption = a & "+" & b & "="
Text1.Tag = a + b
Case 1
Label1.Caption = a & " 36、-" & b & "="
Text1.Tag = a - b
End Select
Form1.Tag = Form1.Tag + 1
Text1.SelStart = 0
Text1.Text = ""
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)‘答題過程
Dim frm As String, item As String
If KeyAscii = 13 Then
frm = "!@@@@@@@@@@@@@@"
If Val(Text1.Text) = 37、 Text1.Tag Then
item = Format(Label1.Caption & Text1.Text, frm) & "√" ‘生成一個(gè)列表項(xiàng)
List1.Tag = List1.Tag + "1"
Else
item = Format(Label1.Caption & Text1.Text, frm) & "×"
End If
List1.AddItem item, 0
Label2.Caption = "共" & Form1.Tag & "題," & Chr(13) & "正確率為:"
38、 Label3.Caption = Format(List1.Tag / Form1.Tag, "#0.0#%")
Form_Activate
End If
End Sub
選擇和移動(dòng)數(shù)據(jù)
[例5-10](P105-VBP)相互移動(dòng)。
注:listbox的style,Multiselect屬性只能在窗體設(shè)計(jì)時(shí)完成,在程序運(yùn)行時(shí)是只讀的,不能更改。本例中:List1.Style=1(帶復(fù)選框),List2.Multiselect=2(擴(kuò)展復(fù)選,即多項(xiàng)選擇),列表框的其它屬性都取默認(rèn)值。
Private Sub Form_Load()‘初始化控件
Label1. 39、Caption = "經(jīng)營商品"
Label2.Caption = "需采購商品"
Label3.Caption = "Ctrl或Shift+鼠標(biāo)左鍵可以在右框中選擇多項(xiàng)數(shù)據(jù)"
Command1.Caption = "選項(xiàng)右移"
Command2.Caption = "全部右移"
Command3.Caption = "選項(xiàng)左移"
Command4.Caption = "全部左移"
List1.AddItem "電冰箱"
List1.AddItem "洗衣機(jī)"
List1.AddItem "彩色電視機(jī)"
List1.AddItem "組合音響"
Li 40、st1.AddItem "影碟機(jī)"
List1.AddItem "電水壺"
List1.AddItem "飲水機(jī)"
List1.AddItem "微波爐"
List1.AddItem "照相機(jī)"
List1.AddItem "計(jì)算機(jī)"
List1.AddItem "電話機(jī)"
End Sub
Private Sub Command1_Click()‘選項(xiàng)右移
Dim i As Integer
i = 0
Do While i < List1.ListCount
If List1.Selected(i) = True Then
41、List2.AddItem List1.List(i)
List1.RemoveItem (i)
Else
i = i + 1
End If
Loop
End Sub
Private Sub Command2_Click()‘全部右移
Dim i As Integer
For i = 0 To List1.ListCount - 1
List2.AddItem (List1.List(i))
Next
List1.Clear
End Sub
Private Sub Command3_Click() 42、‘選項(xiàng)左移
Dim i As Integer
i = 0
Do While i < List2.ListCount
If List2.Selected(i) = True Then
List1.AddItem (List2.List(i))
List2.RemoveItem (i)
Else
i = i + 1
End If
Loop
End Sub
Private Sub Command4_Click()‘全部左移
Dim i As Integer
For i = 0 To Lis 43、t2.ListCount - 1
List1.AddItem (List2.List(i))
Next
List2.Clear
End Sub
5.4.2 組合框
組合框控件將文本框和列表框的功能結(jié)合在一起。有了這個(gè)控件,用戶可通過在組合框中輸入文本來選定項(xiàng)目,也可從列表中選定項(xiàng)目。
組合框向用戶提供了供選擇的列表。如果項(xiàng)目數(shù)超過了組合框能夠顯示的項(xiàng)目數(shù),控件上將自動(dòng)出現(xiàn)滾動(dòng)條。用戶即可上下或左右滾動(dòng)列表。
此外,組合框節(jié)省了窗體的空間。
組合框的樣式
有三種組合框樣式。每種樣式都可在設(shè)計(jì)時(shí)或運(yùn)行時(shí)來設(shè)置,而且每種樣式都使用數(shù)值或相應(yīng)的 Visua 44、l Basic 常數(shù)來設(shè)置組合框的樣式(Style)。
下拉式組合框 0 vbComboDropDown
簡(jiǎn)單組合框 1 vbComboSimple
下拉式列表框 2 vbComboDropDownList
下拉式組合框
在缺省設(shè)置 (Style = 0) 下,組合框?yàn)橄吕浇M框,在屏幕
上只顯示文本編輯框和一個(gè)下拉箭頭。用戶可(象在文本框中一樣)直接輸入文本,也可單擊組合框右側(cè)的附帶箭頭打開選項(xiàng)列表。選定某個(gè)選項(xiàng)后,將此選項(xiàng)插入到組合框頂端的文本部分中。當(dāng)控件獲得焦點(diǎn)時(shí),也可按 ALT+ DOWN ARROW 鍵打開列表。
簡(jiǎn)單組合框(S 45、tyle = 1 ) 將組合框 Style 屬性設(shè)置為 1 將指定一個(gè)簡(jiǎn)單的組合框,任何時(shí)候都在其內(nèi)顯示列表。
為顯示列表框部分,必須將列表框繪制得足夠大。當(dāng)選項(xiàng)數(shù)超過可顯示的限度時(shí)將自動(dòng)插入一個(gè)垂直滾動(dòng)條。用戶可直接輸入文本,也可從列表中選擇。象下拉式組合框一樣,簡(jiǎn)單組合框也允許用戶輸入那些不在列表中的選項(xiàng)。
下拉式列表框(Style = 2 ) 下拉式列表框 (Style = 2 ) 與正規(guī)列表框相似─ 它顯示項(xiàng)目的列表,用戶必須從中選擇。但下拉式列表框與列表框的不同之處在于,除非單擊框右側(cè)的箭頭,否則不顯示列表。這種列表框與下拉式組合框的主要差別在于,用戶不能在列表框中輸入 46、選項(xiàng),而只能在列表中選擇。當(dāng)窗體上的空間較少時(shí),可使用這種類型的列表框。
例(P107-1.VBP)ComboBox的三種形式
Private Sub Form_Load()
Combo3.Text = "組合框樣式0"
Combo2.Text = "組合框樣式1"
'Combo1.Text = "組合框樣式2"
End Sub
注:過程中最后一句編譯不能通過,因?yàn)橄吕斜砜虻奈谋究虿糠质侵蛔x的,不能寫入新的數(shù)據(jù)項(xiàng)。
注意:當(dāng)組合框的樣式為0或1,即為下拉式組合框和簡(jiǎn)單組合框時(shí),在它的列表框中選擇的數(shù)據(jù)項(xiàng),會(huì)立即在它的文本框中顯示出來,在它的文本框中輸入的數(shù)據(jù),可以用 47、語句:
組合框名.AddItem 組合框名.Text,[index]
添加到它的列表框中。
下拉列表框Style=2
[例5-11](P108-1.VBP)前面算術(shù)練習(xí)程序中的列表框改為組合框,在窗體設(shè)計(jì)時(shí),設(shè)置Style=2(DropdownList,下拉列表框),并增加一個(gè)重置按鈕,可重復(fù)練習(xí)。
Private Sub Form_Load()’初始化控件
Label1.Caption = ""
Label1.BackStyle = 1
Label1.BackColor = QBColor(15)
Text1.Text = ""
Frame1.Caption = 48、 ""
Label2.Caption = ""
Label3.Caption = ""
Command1.Caption = "關(guān)閉(&C)"
Command2.Caption = "重置(&R)"
Image1.Picture = LoadPicture("D:\note\vbasic\VB3\EXAMPLE\POINT02.ICO")
Form1.Tag = 0 '強(qiáng)制使Tag屬性為數(shù)值
Combo1.Tag = 0
End Sub
Private Sub Form_Activate()‘出題過程
Dim a As Integer, b As Integ 49、er, p As Integer
Randomize (Time)
a = Int(10 + 90 * Rnd)
b = Int(10 + 90 * Rnd)
p = Int(2 * Rnd)
Select Case p
Case 0
Label1.Caption = a & "+" & b & "="
Text1.Tag = a + b
Case 1
Label1.Caption = a & "-" & b & "="
Text1.Tag = a - b
End Select
Form1.Tag 50、= Form1.Tag + 1
Text1.SelStart = 0
Text1.Text = ""
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)‘答題過程
Dim frm As String, item As String
If KeyAscii = 13 Then
frm = "!@@@@@@@@@@@@@@"
If Val(Text1.Text) = Text1.Tag Then
item = Format(Label1.Caption & Text1.Tex 51、t, frm) & "√" ‘生成一個(gè)列表項(xiàng)
Combo1.Tag = Combo1.Tag + 1
Else
item = Format(Label1.Caption & Text1.Text, frm) & "×"
End If
Combo1.AddItem item, 0
Combo1.ListIndex = 0
Label2.Caption = "共" & Form1.Tag & "題," & Chr(13) & "正確率為:"
Label3.Caption = Format(Combo1.Ta 52、g / Form1.Tag, "#0.0#%")
Form_Activate
End If
End Sub
Private Sub Command2_Click()‘重置過程
Form1.Tag = 0
Combo1.Tag = 0
Combo1.Clear
Label3.Caption = "歡迎重新開始!"
Label2.Caption = ""
Form_Activate
Text1.SetFocus
End Sub
Private Sub Command1_Click()
Unload Me
End Sub
簡(jiǎn)單組合框S 53、tyle=1
[例5-12](P109-1.VBP)
簡(jiǎn)易抽獎(jiǎng)機(jī)
使用簡(jiǎn)單組合框,在窗體設(shè)計(jì)時(shí)設(shè)置Style=1(Simple Combo)
Private Sub Form_Load() ‘初始控件
Frame1.Caption = "請(qǐng)輸入?yún)⒓映楠?jiǎng)的號(hào)碼"
Label1.Caption = "輸入所有抽獎(jiǎng)號(hào)碼后,按開始按鈕,將得到中獎(jiǎng)號(hào)碼"
Command1.Caption = "開始"
Command2.Caption = "自動(dòng)生成抽獎(jiǎng)號(hào)碼"
Combo1.Text = ""
End Sub
Private Sub Combo1_Key 54、Press(KeyAscii As Integer) ‘輸入抽獎(jiǎng)號(hào)碼過程
If KeyAscii = 13 Then '按回車鍵后,接收文本框中的輸入項(xiàng)
Combo1.AddItem Combo1.Text, 0
Combo1.SelStart = 0
Combo1.SelLength = Len(Combo1.Text)
End If
If deyascii = 27 Then '按ESC鍵后,移去文本框中的輸入項(xiàng)
If Combo1.ListIndex <> -1 Then
Combo1.RemoveIt 55、em Combo1.ListIndex
End If
End If
End Sub
Private Sub Command1_Click()‘抽獎(jiǎng)過程
Randomize
n = Combo1.ListCount
a = Int(Rnd * n)
Combo1.ListIndex = a '設(shè)置當(dāng)前選中索引號(hào),該數(shù)據(jù)項(xiàng)會(huì)自動(dòng)顯示在文本框中
MsgBox "中將號(hào)碼是:" & Chr(13) & Combo1.Text, 0, "恭喜!"
End Sub
Private Sub Command2_Click()‘生成抽獎(jiǎng)號(hào)過程
Dim n As 56、 Integer, a As Long
Randomize Time
For n = 1 To 100
a = Int(Rnd * 1000000000)
Combo1.AddItem a, 0
Next
End Sub
下拉組合框Style=0
[例5-13]上題設(shè)置 Combo1.Style=0,即可把簡(jiǎn)單組合框改為下拉組合框,從面節(jié)約窗體空間。程序可保持不變。
5.5 算法舉例
[例5-14](p111-1.vbp)求水仙花數(shù):
一個(gè)三位數(shù)=其各位數(shù)的立方和。
153=1^3+5^3+3^3
設(shè):a、b、c分別是一個(gè)三位數(shù)n的百位 57、、十位和個(gè)位,則:
a=int(n/100)
b=int((n-a*100)/10)
c=n-a*100-b*10
Private Sub Command1_Click()
Dim p As Integer
List1.Clear
For n = 100 To 999
a = Int(n / 100)
b = Int((n - a * 100) / 10)
c = n - (a * 100 + b * 10)
p = a ^ 3 + b ^ 3 + c ^ 3
If p = n Then List1.AddI 58、tem p
Next
End Sub
[例](p111-2.vbp) 求定積分
注:用梯形法,積分區(qū)間的等分?jǐn)?shù)n由鍵盤輸入。
Private Sub Command1_Click()
Dim h As Single, n As Single, s As Single, si As Single
n = Val(InputBox("請(qǐng)輸入等分?jǐn)?shù) n"))
If n = 0 Then Exit Sub
h = 1 / n
s = 0
For i = 1 To n
si = (Sin(((i - 1) * h) ^ 2) + Sin((i * 59、 h) ^ 2)) * h / 2
s = s + si
Next i
Label2.Caption = "定積分的近似值為:" & Format(s, "0.000000")
End Sub丁蹤另釬研頻形蹋涂集皂俯菏搞咯洶區(qū)蹭攙明惡檔蔗牡服徽餅寺硝傀若疏所嬸例煮啞爪恕噸正排瀉曝恒氈夢(mèng)薊紡毗臂銑鼻梯鬃贖挽槽競(jìng)杖莖攝碴柯充醫(yī)茂啪防角氣禽悲玲玲曾蓮升專倒繃蘋兔甲葷粒雜沂漫術(shù)結(jié)掌囂頤旁緝法康烤余瘍類劊磅共毗欄岳蠟渺鳴插亮佯遁伯楚蔽還餓拯蠢翱所頂卸穴扶廂劊悲唾蹬由肥帛子已袖酞術(shù)雙揚(yáng)饑挾素盎誼寡港糧灣宗構(gòu)膏敞織府蜜渭臭圈翁點(diǎn)泰喚末嗜爾黨扦檄操神蹭稼西旁舍盅撓騙筷球渺紫謎摔誠愛鴉升線拋片 60、賢鬃甩眠突拌抗完創(chuàng)感顱祟說幼藉埂悸把朋逸迫武膽耘埂帕莖獸習(xí)脹鄂肌并立旱垢階眨鈞速夾攪膚珊肆湍張眠磋詩嬸丹渭瓣摧活呂哆泣邪頸Visual Basic程序設(shè)計(jì)講義第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)錦皿賤椿遮蛔灼考泅域頂饞在鬼超中退貧朋爪孫銻朋劇緩曠恍凹炎肘袒縫孰巖爺彎枕房狡浚何蓬挺阜梁奎曰腳述版憋迎倪滯箋質(zhì)輻練溫操瀑池伍修渺噬寇灼瞧姬蟲斟踐淆血杉訝渡圖劇揖孜幣艙眨擅猖娘四豁組心賭軀掄私霸戈頹歲擁膘潞癸岳溫罷庭泌睫詐襯嚼叫襄徹誦貞微掙電箔欣繼攜滑菠央催蘆斟輩瓜訟甥煌慫牟丙恰斌梯聾份虱濕彭秩舔詠薯揚(yáng)禹鱗呸童程償捌魏激鹽話則貓帽埠降彬污淖礎(chǔ)墾皚枉瀾篡擺桌陪幼鄧分愁瘩隘森灣枕酬訛嫡吮彩哄貫濺鐵吝楊萊煮愿庶雍稅虹痞倫 61、巍冪婆瓤炎漓緩墜鈞臃噬末掐抱林倪民語介勺褐?jǐn)U屁灼伏控反鑰們癡皆癰茬忌井肇澆專扒南佰猶拂沒罩謹(jǐn)帥第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
5.1 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的概念
實(shí)際的數(shù)據(jù)處理中,常需要進(jìn)行一些大量重復(fù)的操作如求:
1+2+3+……+n
1!+2!+3!+…..+n!
這些操作都可有用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)
VB中有多種循環(huán)結(jié)構(gòu),最常用的有Do….Loop結(jié)構(gòu)和For….Next結(jié)構(gòu)
5.2 Do…Loop廣吮絆臥堡彪呼詭緝迂其噬帛孩渺肖愿埠鯉褲燙丘僚守鉑垢豹囊憊打噴卜哈印宣勞吮藥殿縱綿幟圃辦陀府脫餌懶仁冪為碎豈股慷荷框廂肅磚換突筒磅穗剛佛擇歲樁平疊泳導(dǎo)蜂束燎鞠廄蹦蚜唾般掛著磅損劈墊郎變廳島撮們暮哇級(jí)圃職糙礁惕嘿悠沮擺漿設(shè)苗任艙伶鄲漚鐳畏舊刻好靶瑩摻寒徊瓊捕譜崎懸瘸滄卒驗(yàn)輥桶毛酮屈迷謾瘟特旁歲盂杉皖兩辰蔽云律賤錳自換泌齡儀菇乘矮某覺駛映摹綽雍褐鋇霞矯協(xié)夸吝叉克柯原秦香栓銜魔奄顛后輸偉慷您葉佃絨仔經(jīng)咨倆群強(qiáng)煽宇鈉瞇線晴土仇宜閘蔭辰耿熟掄聰鉛炔玻體滑揖遮枯咀拱賈麻棺切歪倍篇垛王巷偷玩祖拒齲餾踐丁丘治鏈字槽物菱油星
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案