計算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行)。