計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)
Download
Report
Transcript 計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)
程式設計-使用Visual Basic 2010
第6章
進階迴圈概念
巢狀迴圈
巢狀迴圈並不是新的程式結構,只是迴圈範圍內可以
又有一個迴圈,巢狀迴圈可以有好幾層,其運作原理
與單層迴圈相同。
由外層迴圈來看,內層迴圈只是外層迴圈作用範圍內
的動作,外層迴圈執行一次,內層迴圈要執行直到完
成。
以九九乘法表為例,當外層迴圈執行一次,內層迴圈
要執行九次;當外層迴圈執行九次,外層迴圈每執行
一次,內層迴圈就要執行九次,所以內層迴圈總共執
行八十一次。
九九乘法表(
ch6\九九乘法表\)
寫一程式印出九九乘法表。使用巢狀迴圈外層迴圈的
迴圈變數為i,內層迴圈的迴圈變數為j。
外層迴圈i等於1,內層迴圈j由1變化到9,印出「1*1=1
,1*2=2,1*3=3,…,1*9=9」。
i遞增1,外層迴圈i等於2,內層迴圈j由1變化到9,印
出「2*1=2,2*2=4,2*3=6,…,2*9=18」,…,外
層迴圈i等於9,內層迴圈j由1變化到9,印出「9*1=9
,9*2=18,9*3=27,…,9*9=81」。
九九乘法表(
流程圖表示
ch6\九九乘法表\)
九九乘法表(
ch6\九九乘法表\)
預覽結果
按下「印出九九乘法表」按鈕,結果顯示在TextBox1中。
九九乘法表(
ch6\九九乘法表\)
表單配置
在表單中新增一個TextBox與一個Button。
九九乘法表(
屬性設定
物件
屬性
設定值
印出九九乘法
Button1
Text
表
TextBox1 Multiline True
TextBox1 Size
268,213
TextBox1 ScrollBars Both
ch6\九九乘法表\)
九九乘法表(
ch6\九九乘法表\)
程式碼新增與解說
點選「印出九九乘法表」按鈕,新增程式碼在Button1_Click函
式中,如下方程式區塊。
行號 程式碼
1
2
3
4
5
6
7
8
9
10
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
For i As Integer = 1 To 9
For j As Integer = 1 To 9
TextBox1.Text = TextBox1.Text & i & "*" & j & "=" & i * j & " "
Next
TextBox1.Text = TextBox1.Text & vbNewLine
Next
End Sub
End Class
九九乘法表(
ch6\九九乘法表\)
解說
第3~8行:變數i為外層迴圈,其變化值由1到9,其範圍包含內層
迴圈。
第4~6行:變數j為內層迴圈,其變化值由1到9,當外層迴圈執行
一次,內層迴圈執行九次,依序將「變數i*變數j=變數i與j相乘結
果」加到TextBox1字串後面(第5行),i與j值變化如下表。
第7行:將換行加到TextBox1字串後面,換行以vbNewLine表示。
九九乘法表(
ch6\九九乘法表\)
巢狀迴圈印出九九乘法表原理,如下表,在Visual Basic中外層迴
圈包含內層迴圈,外層迴圈執行一次,內層迴圈要執行完畢,九
九乘法表外層迴圈執行九次,內層迴圈共執行八十一次。
印星號(
ch6\印星號\)
請使用巢狀迴圈印出以下星號:第一行一個星號,第二
行兩個星號,…,第五行五個星號,全部靠左排列。
*
**
***
****
*****
印星號(
流程圖表示
ch6\印星號\)
印星號(
ch6\印星號\)
預覽結果
按下「印出星號」按鈕,結果顯示在TextBox1中。
印星號(
ch6\印星號\)
表單配置
在表單中新增一個TextBox與一個Button。
印星號(
屬性設定
物件
Button1
TextBox1
TextBox1
TextBox1
屬性
Text
Multiline
Size
ScrollBars
設定值
印出星號
True
270,215
Both
ch6\印星號\)
印星號(
ch6\印星號\)
程式碼新增與解說
點選「印出星號」按鈕,新增程式碼在Button1_Click函式中,如
下方程式區塊。
行號 程式碼
1
2
3
4
5
6
7
8
9
10
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
For i As Integer = 1 To 5
For j As Integer = 1 To i
TextBox1.Text = TextBox1.Text & "*"
Next
TextBox1.Text = TextBox1.Text & vbNewLine
Next
End Sub
End Class
印星號(
ch6\印星號\)
解說
第3~8行:變數i為外層迴圈,其變化值由1到5,其範圍包含內層
迴圈。
第4~6行:變數j為內層迴圈,其變化值由1到i,當外層迴圈執行一
次,內層迴圈執行i次,將星號加到TextBox1字串後面(第5行)。
第7行:將換行加到TextBox1字串後面,換行以vbNewLine表示。
印星號(
ch6\印星號\)
巢狀迴圈印出星號原理,如下表,在Visual Basic中外層迴圈包含
內層迴圈,外層迴圈執行一次,內層迴圈要執行完畢,本範例內
層迴圈執行次數受外層迴圈限制,i等於1,j由1依序變化到1;i等
於2,j由1依序變化到2;i等於3,j由1依序變化到3;i等於4,j由1
依序變化到4;i等於5,j由1依序變化到5。
計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)
( ch6\計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)\)
允許使用者輸入一數值n,程式計算出
1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的結果。
流程圖表示
計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)
( ch6\計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)\)
預覽結果
輸入n值為「3」,按下「計算加總」按鈕,結果顯示在TextBox2
中。
計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)
( ch6\計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)\)
表單配置
在表單中新增兩個TextBox,兩個Label與一個Button。
計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)
( ch6\計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)\)
屬性設定
物件
Label1
Label2
Button1
TextBox2
TextBox2
TextBox2
屬性
Text
Text
Text
Multiline
Size
ScrollBars
設定值
輸入 n值
結果
計算加總
True
145,175
Both
計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)
( ch6\計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)\)
程式碼新增與解說
點選「計算加總」按鈕,新增程式碼在Button1_Click函式中,如下方
程式區塊。
行號 程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim n As Integer = Val(TextBox1.Text)
Dim sum As Integer
Dim sumAll As Integer = 0
For i As Integer = 1 To n
sum = 0
For j As Integer = 1 To i
sum = sum + j
Next
TextBox2.Text = TextBox2.Text & "i=" & i & ",sum=" & sum & vbNewLine
sumAll = sumAll + sum
Next
TextBox2.Text = TextBox2.Text & "1+(1+2)+(1+2+3)+...+(1+2+3+...+n)=" & sumAll
End Sub
End Class
計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)
( ch6\計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)\)
解說
第3行:宣告n為整數變數,並初始化為元件TextBox1的輸入值。
第4行:宣告sum為整數變數。
第5行:宣告sumAll為整數變數,並初始化為0。
第6~13行:變數i為外層迴圈,其變化值由1到n,其範圍包含內層迴圈。
第7行:變數i有改變時,每次重新設定sum等於0。
第8~10行:變數j為內層迴圈,其變化值由1到i,當外層迴圈執行一次,內
層迴圈執行i次,利用sum=sum+j暫存加總結果(1+2+3+…+j)(第9行)。
第11行:顯示每個「i值」與每個i值的加總結果「sum值」,再加上換行以
vbNewLine表示。
第12行:利用sumAll=sumAll+sum暫存加總
1+(1+2)+(1+2+3)+…+(1+2+3+…+i)的結果。
第14行:顯示字串「1+(1+2)+(1+2+3)+...+(1+2+3+...+n)=」,之後再顯示
sumAll值的結果。
計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)
( ch6\計算1+(1+2)+(1+2+3)+…+(1+2+3+…+n)\)
此範例同印星號原理,如下表,在Visual Basic中外層迴圈包含內
層迴圈,外層迴圈執行一次,內層迴圈要執行完畢,本範例內層
迴圈執行次數受外層迴圈限制,i等於1,j由1依序變化到1;i等於2
,j由1依序變化到2;i等於3,j由1依序變化到3;i等於4;j由1依
序變化到4;i等於5,j由1依序變化到5。
列出2-10000所有質數(
ch6\列出質數\)
可以參考第5章質數判斷,某數的因數只有1與自己,
沒有其他因數,稱為質數。程式中要判斷一個數是否
是質數,就要判斷他的因數是否只有1與自己,要列
出2-10000所有質數,除了需要質數判斷程式外,外
層需要一個迴圈從2變化到10000,對每一個數進行
質數判斷,若是質數就顯示出來。
列出2-10000所有質數(
流程圖表示
ch6\列出質數\)
列出2-10000所有質數(
ch6\列出質數\)
預覽結果
按下「列出質數」按鈕,結果顯示在TextBox1中。
列出2-10000所有質數(
ch6\列出質數\)
表單配置
在表單中新增一個TextBox與一個Button。
列出2-10000所有質數(
屬性設定
物件
Button1
TextBox1
TextBox1
TextBox1
屬性
Text
Multiline
Size
ScrollBars
設定值
列出質數
True
270,215
Both
ch6\列出質數\)
列出2-10000所有質數(
程式碼新增與解說
ch6\列出質數\)
點選「列出質數」按鈕,新增程式碼在Button1_Click函式中,如
下方程式區塊。
行號 程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim Flag As Integer
Dim j As Integer
For i As Integer = 2 To 10000
Flag = 1
j=2
Do While ((Flag = 1) And (j < i))
If ((i Mod j) = 0) Then
Flag = 0
End If
j=j+1
Loop
If (Flag = 1) Then
TextBox1.Text = TextBox1.Text & i & "為質數" & vbNewLine
End If
Next
End Sub
End Class
列出2-10000所有質數(
ch6\列出質數\)
解說
第3行:Flag為整數變數,若Flag為1表示為質數,若Flag為0表示不是質
數。
第4行:宣告j為整數變數。
第5行:For迴圈中i為迴圈變數,其變化由2依序遞增到10000,對每個i
進行質數測試。
第6行:對每一個i值,Flag預設為1,表示先視為質數。
第7行:j為迴圈變數,用於While迴圈,迴圈變數j依序指向所有小於i的
數,初始值為2。
第8~13行:當Flag為1且變數j小於i(第8行),繼續測試變數j是否可以整除
i(第9行),若變數j整除變數i,則變數j為變數i的因數,設定Flag為0,i為
非質數(第10行),變數j值加1(第12行),重複While迴圈回到第8行(第13
行)。
第14~16行:若Flag為1,顯示「i為質數」。
迴圈結構特殊指令的使用—Exit與Continue
迴圈於特殊需求下可以使用Exi t與Cont inue指令
當要跳出迴圈時可以使用Exit跳出迴圈
當要跳過迴圈後,迴圈變數值遞增(減)後繼續執行迴圈則使用
Continue
迴圈結構特殊指令的使用—Exit與Continue
針對不同的迴圈結構Exit後面接不同的敘述,如下表。
迴圈結構特殊指令的使用—Exit與Continue
針對不同的結構Continue後面接不同的敘述,如下表。
登入系統(
ch6\登入系統\)
請寫一程式模擬帳號與密碼登入,使用者使用InputBox
輸入帳號與密碼,系統使用MsgBox輸出「登入成功」
或「登入失敗」。
流程圖表示
登入系統(
ch6\登入系統\)
預覽結果
按下「登入系統」按鈕。
依序出現輸入帳號與密碼視窗,帳號輸入「abc」,點選「確認」
;接著密碼輸入「123」,點選「確認」。
登入系統(
ch6\登入系統\)
帳號與密碼驗證後符合,出現「登入成功」,跳出迴圈。
登入系統(
表單配置
在表單中新增一個Button。
屬性設定
物件
Button1
屬性
Text
設定值
登入系統
ch6\登入系統\)
登入系統(
ch6\登入系統\)
Do…Loop While (1)的使用
本程式使用Do…Loop While (1),While (1)(括弧表示條件測試,1
表示為「真」)所以表示條件測試永遠為「真」,Do…Loop While
(1)為無窮迴圈,因為條件測試永遠為「真」,遇到Exit Do才跳出
迴圈。
例如:帳號密碼確認程式中,要使用無窮迴圈,使用者才能輸入
帳號密碼直到正確才跳出迴圈。
登入系統(
ch6\登入系統\)
程式碼新增與解說
點選「登入系統」按鈕,新增程式碼在Button1_Click函式中,如
下方程式區塊。
行號 程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim acc As String
Dim pass As String
Do
acc = InputBox("請輸入帳號")
pass = InputBox("請輸入密碼")
If (acc = "abc" And pass = "123") Then
MsgBox("登入成功)
Exit Do
Else
MsgBox("登入失敗")
End If
Loop While (1)
End Sub
End Class
登入系統(
ch6\登入系統\)
解說
第3行:宣告acc與pass變數為字串變數。
第5行到第14行:使用Do-Loop While無窮迴圈,登入成功後使用
Exit跳出迴圈。
第6行:出現輸入視窗輸入帳號,並將帳號儲存入字串變數acc。
第7行:出現輸入視窗輸入密碼,並將密碼儲存入字串變數pass。
第8行到第13行:判斷帳號是否等於預設帳號「abc」,密碼是否等
於預設密碼「123」(第8行),若是,顯示「登入成功」訊息(第9行)
,跳出迴圈(第10行);否則,顯示「登入失敗」訊息(第12行)。