<samp id="uu9tx"></samp>
        <samp id="uu9tx"><tr id="uu9tx"><nav id="uu9tx"></nav></tr></samp>
        <delect id="uu9tx"><legend id="uu9tx"><meter id="uu9tx"></meter></legend></delect>
                <samp id="uu9tx"><tr id="uu9tx"><meter id="uu9tx"></meter></tr></samp><nav id="uu9tx"></nav>
                <samp id="uu9tx"></samp>
                  <samp id="uu9tx"><tr id="uu9tx"><meter id="uu9tx"></meter></tr></samp>
                  江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
                  江蘇省計算機等級考試二級vb過程講解

                  8   過程

                  教學要求

                  掌握VB的兩種過程:事件過程和通用過程

                   掌握Sub過程的定義

                   掌握Function過程的定義

                   掌握過程的調用

                   掌握參數的傳遞——按值傳遞和按地址傳遞

                   掌握遞歸算法

                   掌握變量的作用域

                  8.1   Sub過程
                     8.1.1 事件過程

                  當對象識別某事件后,進行的操作處理——以代碼的形式存儲在事件過程中。

                  分類:

                  窗體事件過程

                  控件事件過程

                  1  定義事件過程

                  [形式]

                  Private Sub Form_事件名([參數列表]

                        [局部變量和常數聲明]

                        語句塊

                  End Sub

                  Initialize(初始化)事件——配置窗體時觸發

                  Load(加載)事件——窗體裝入內存時觸發

                  Activate(激活)事件——窗體被激活時觸發

                  Gotfocus事件(得到焦點)事件——窗體成為當前焦點時觸發

                  窗體上無可視控件時,觸發窗體的Gotfocus事件;

                  窗體上有可視控件時,觸發控件的Gotfocus事件;

                  執行次序:

                         Initialize          Load           Activate           Gotfocus

                  窗體的Initialize、Load事件發生在窗體被顯示之前,其中可放置系統初始化命令,但其中語句有所限制;

                  窗體加載后,只要不被卸載,就不會再執行Initialize、Load事件,Activate事件會多次發生;

                  當訪問另一窗體上的非可視數據或調用其中定義的全局過程時,只會觸發該窗體的Initialize事件,Load事件不觸發;

                  當訪問另一窗體上的可視數據時,會同時觸發該窗體的InitializeLoad事件;

                  3  定義控件的事件過程

                  [一般形式]

                  Private Sub 控件名_事件名([參數列表]

                          [局部變量和常數聲明]

                          語句塊

                  End Sub

                  8.1.2  通用過程

                  完成某一特定功能的程序段

                                      ——通用過程(自定義)

                  必須顯式調用方可執行;

                  分為:

                  公有過程(Public

                  私有過程(Private

                  1  通用Sub過程的定義

                  [一般形式]

                    [Private|Public] [static] Sub <過程名>([<參數列表>])

                           <過程體>

                     End Sub

                  [說明]

                  (1) Sub開頭,End Sub結束,,中間是過程體——包括變量聲明和語句塊;

                  (2) Private為前綴的過程是模塊級的,Public為前綴的過程是應用程序級的,缺省默認是Public;

                  (3) Static 選項說明過程中的局部變量是靜態變量;

                  (4) 過程名的命名規則和變量名相同,在同一個模塊中,過程名必須是唯一的;

                  5  參數列表中的參數稱為形式參數,可以沒有,但無參數時圓括號不能省略;有多個參數時,參數之間用逗號間隔;

                  6)參數說明格式:

                      [Optional][ByVal|ByRef] <變量名>[()][As <數據類型>]

                      其中:

                      a) 若參數是數組,則在變量名后面加一對圓括號,但無維界定義

                  b) ByVal:指明參數傳遞方式是傳值;

                  c) ByRef:指明參數傳遞方式是傳地址,為缺省值;

                  d) 若參數是字符型的,必須是不定長字符串;

                  e)Optional:參數是可選的,必須定義在必選參數后面。

                  7 當過程調用結束,即執行到End Sub語句,系統自動返回調用程序的調用語句處,執行調用語句的下一條語句;

                   8 過程不能嵌套定義,但可嵌套調用;

                   9Exit Sub語句的功能是提前退出過程調用,返回調用語句。

                  :      Private  Sub  Exchange(x As Integer,y As Integer)

                                       Dim Temp As Integer

                                       Temp=x : x=y : y=Temp

                              End Sub

                  該通用過程實現交換功能,包含兩個參數,均是ByRef形式的參數。

                  3  Sub過程調用

                        必須在事件過程或其它通用過程中顯示調用。

                  Sub過程調用

                  [格式一]  Call  <過程名>[<實在參數表>]

                  [格式二]  <過程名>  [<實在參數表>]

                  [功能]:對已定義的過程進行調用。

                  如:

                  Call  Fact(x)

                     Fact  x

                  1)調用的過程必須是已經定義的,否則系統會出現“子程序或函數未定義”的信息提示;

                  2)實在參數可以是常量、變量或表達式;

                  3)實在參數的數目及類型要和定義時必選參數保持一致,否則系統會出現“參數不可選”的信息提示,參數之間用逗號間隔;

                  4)若子程序沒有參數,則格式一中的括號可以省略;

                  5)格式一和格式二的區別在于:格式二的參數表無須括號,而是和過程名之間用空格隔開;

                  8-2  試編寫一個找出任意一個正整數的因子的程序

                  Option Explicit

                  Private Sub Command1_Click()

                  Dim inta As Integer, st As String

                   inta = Text1

                   Call factor(inta, st)

                   Text2 = st

                  End Sub

                  Private Sub factor(ByVal n As Integer, s As String)

                   Dim i As Integer

                   For i = 1 To n - 1

                          If n Mod i = 0 Then s = s & Str(i)

                    Next i

                  End Sub

                  優點:程序即Sub過程的使用不僅可以縮短程序的長度,還能夠使程序的結構更加清楚。

                  :定義一個通用過程用以求一維數組中的最小值

                  Private Sub value(a() As Integer, min As Integer)

                      Dim i As Integer

                      min = a(1)

                      For i = 2 To UBound(a)

                           If a(i) < min Then min = a(i)

                      Next i

                  End Sub

                  8 . 2   Function 過程

                  Function過程的特點是返回一個值,因此我們通常也稱之為自定義函數。通常我們利用Function過程得到一個數值或一個字符串或一個邏輯值。

                   [格式]

                   [Private|Public] Function <函數名>([參數列表]) [As <數據類型>]

                                    <函數體>

                   End Function

                  1 Function開頭,End Function結束,中間是函數體;

                  2)函數名命名規則、參數列表的表示都和Sub過程相同;

                  3As 數據類型:函數過程將由函數名返回一個值,值的類型由[As 數據類型]定義;

                  4 函數體中一定要有對函數名賦值的語句——函數名=表達式,否則返回相應類型的初值;

                  5)函數體內可有Exit Function語句——無條件退出函數過程,返回主程序。

                  6Function過程不能嵌套定義,但可嵌套調用。

                  例:定義函數:

                  Private  Function f(ByVal x As Integer) As Integer

                            f = 3*x^3-2*x^2+6*x-1

                  End Function

                  8-1:編寫一個求n!的函數。

                  Private  Function Fact(Byval n As Integer) As Long

                      Dim K As Integer

                      Fact=1

                      If  n=0 Or n=1 Then

                                 Exit Function

                      Else

                                 For K=1 To N

                                       Fact=Fact*K

                                Next K

                      End If

                  End Function

                  2  調用 Function 過程

                  [格式]<函數名>[實在參數表]

                  [功能]:返回一個函數值。

                  [說明]

                  1)一般情況下,函數的調用出現在賦值語句中,并且在賦值號的右側;

                  2)若函數沒有參數,函數名后的括號不能省略;

                  3)雖然VB允許象調用Sub過程那樣調用Function過程,但這樣調用時系統不返回函數值,建議大家不要使用這種調用方法。

                  Call  fact(x) 

                  Fact   x      這兩種方法均放棄函數的返回值

                  :用函數實現求一維數組中的最小值,對比前例(SUB)

                  Private Function min( a( ) As Integer ) As Integer

                      Dim i As Integer

                      min = a(1)

                      For i = 2 To UBound(a)

                           If a(i) < min Then min = a(i)

                      Next i

                  End Sub

                  :定義函數用以判斷一個數是否是素數

                  Private Function Prime(N As Integer) As Boolean

                  Dim i As Integer

                  Prime = False        

                  For i = 2 To N-1

                          If N Mod i = 0 Then Exit For

                  Next i  

                  If i =N then  Prime = True

                  End Function

                  []S=1!+2!+…+10!

                  Private Sub Form_Click()

                      Dim S As Long, i As Integer

                      For i = 1 To 10

                            

                      Next i

                      Print ”S="; S

                  End Sub

                  Private Function Fact(n As Integer) As Long

                     Dim i As Integer

                     Fact = 1

                     For i = 1 To n

                             Fact = Fact * i

                     Next i

                  End Function

                  8-3:利用函數過程編寫一個求兩個正整數的最大公約數的程序

                  Private Sub Form_Click( )          主調過程

                      Dim N As Integer, M As Integer, G As Integer

                      N = InputBox("輸入N")

                      M = InputBox("輸入M")

                      G = Gcd(N, M)

                      Print N; ""; M; "的最大公約數是:"; G

                  End Sub

                  Private Function Gcd(ByVal A As Integer, ByVal B As Integer) As Integer

                      Dim R As Integer

                      R = A Mod B

                      Do While R <> 0

                          A = B

                          B = R

                          R = A Mod B

                      Loop

                      Gcd = B

                  End Function

                  2、調用標準模塊中的公有過程

                  [格式]Call   [<標準模塊名>.]<過程名>[<實參表>]

                  [功能]:調用其他標準模塊中定義的公有過程。

                  [說明]

                  若公有過程唯一,則直接調用,不加模塊名。

                  若存在同名的公有過程,則:

                  調用本模塊中過程:直接調用,不加模塊名

                  調用其它模塊中過程:必須加模塊名。

                  被調用的函數和過程必須是公有的;

                  函數也可以這樣調用。

                  8.4  參數的傳遞

                  8.4.1 形式參數和實在參數

                  形式參數:

                   過程定義時,在過程名后面的圓括號里的一系列變量;

                   過程被調用執行時,系統才給形參分配存儲空間;

                   可以是除定長字符串外的任一簡單變量;

                   可以是數組,變量名后接括號;

                   簡稱“形參”

                  實在參數

                   主調程序中,調用語句中,出現在過程名后面圓括號里的變量,是實在參數,可以是常量、變量或表達式;

                    過程調用傳遞參數時,實參按位置和形參結合;

                    實在參數和形式參數,要求個數一樣,位置對應,類型一致,否則會出錯;

                    定長字符串變量可以作為實在參數;

                   簡稱“實參”

                  舉例:寫出下列程序執行的結果

                  Private   Sub   ExamSub( x as integer,y as integer)

                         x=x+10 :  y=y-10

                  End Sub

                  Private Sub Form-click()

                         Dim x as integer,  y as  integer

                         x=10:y=100

                         Call  ExamSub( y ,x )

                         Print  “x=” ; x ;  “y=” ; y

                  End Sub

                  8.4.2  按值傳遞參數

                  [格式]ByVal  <變量說明>

                  [傳遞方式 ]

                          調用時,系統為形參分配一個臨時存儲單元,并將實參的值存儲到該臨時單元中。

                         若在被調用的過程體中改變了形參的值,只是改變了臨時存儲單元中的數據,對實參的值無任何影響。

                  [參數傳值傳遞]舉例:

                  Private Sub Form_Click()

                      Dim M As Integer, N As Integer

                      M = 15: N = 20

                      Call Value_change(M, N)

                      Print "M="; M, "N="; N

                  End Sub

                  Private Sub Value_change(ByVal x As Integer, ByVal y As Integer)

                      x = x + 20

                      y = y + 20

                      Print "X="; x, "Y="; y

                  End Sub

                  傳值是單向的:

                  調用時,實參將值傳遞給形參,兩者就無任何關聯。過程中形參的值發生變化,對實參無任何影響。

                  8.4.3 按地址傳遞參數

                  [格式] ByRef  <變量說明>

                  [傳遞方式]

                          系統在調用執行過程時,為形參分配臨時存儲單元,并將實參的內存單元地址傳送給形參,存儲在臨時存儲單元中

                          在被調用的過程體中一切對形參的操作,都是直接對地址保存在形參中的內存單元中的數據進行的,而實參就是保存在此內存單元中的數據,所以任何對形參的操作也就是對實參的操作;

                          按地址傳遞時,形式參數和實在參數共用同一內存單元。

                  [參數傳址傳遞]舉例:(對比前例)

                  Private Sub Form_Click()

                        Dim M As Integer, N As Integer

                        M = 15: N = 20

                        Call Value(M, N)

                        Print "M="; M, "N="; N

                  End Sub

                  Private Sub Value(x As Integer, y As Integer)

                        x = x + 20

                        y = y + 20

                        Print "X="; x, "Y="; y

                  End Sub

                  傳地址是雙向的:

                  舉例:計算5!+4!+3!+2!+1!

                  Private Sub Form_Click()

                      Dim Sum As Integer, I As Integer

                      For I = 5 To 1 Step -1

                          Sum = Sum + Fact(I)

                      Next I

                      Print "Sum="; Sum

                  End Sub

                  Private Function Fact(n As Integer) As Integer

                      Fact = 1

                      Do While n > 0

                           Fact = Fact * n

                           n = n - 1

                      Loop

                  End Function

                  將傳地址修改為傳值的方式為:

                  方法一:在形參n前加ByVal

                  方法二:將調用語句中fact(i)改為fact( ( i ) )

                  參數有兩種傳遞方式:傳值(ByVal)和傳地址(ByRef)。

                          若調用時實參為常量或表達式,這兩種方式沒有區別,無論形參定義的是按值傳遞還是按地址傳遞,系統都是按傳值方式傳遞

                         系統在調用時為形參分配一個臨時存儲單元,將表達式的值計算出來,存儲到該臨時單元;調用結束,系統收回臨時單元。

                          調用函數或過程時,將單個變量轉換成表達式的方法:將變量放在一對括號中。如用Fact((I))的方式調用函數,系統會按傳值來處理。

                  按地址傳遞時,當實參是變量時,實參與形參必須類型完全一致;

                          按地址傳遞時,當實參是常量或表達式時,VB會自動進行類型轉換,然后再傳遞相應的值(即類型無須完全一致);

                          在算術表達式中,函數的優先級最高,若表達式中有函數的實參,而函數的參數又是按地址傳遞的,則函數中有可能改變了實參的值,即改變了表達式中變量的值,會引起混淆。

                  Private Sub Form_Click()

                       Dim S As Single

                       S=125.5

                       Call Convert((S),”12”+”.5”)

                  End Sub

                  Private Sub Convert(Inx As Integer,Sing As Single)

                        Inx=Inx*2

                        Sing=Sing+23

                        Print “Inx=”;Inx,”Sing=”;Sing

                  End Sub

                  8.4.4 數組參數

                         VB允許把數組作為形式參數,聲明數組的格式是:

                                           <數組名>() As   <數據類型>

                  [注意]

                  1)數組參數只能按地址傳遞,即不能用ByVal來修飾數組參數

                  2)定義數組參數時無須說明數組的維數和下標變化范圍;

                  3)調用過程時,對應的實在參數也必須是數組,但只需要數組名,無須后跟括號,且數據類型也要一致。`

                  4)在過程體或函數體中無須對數組參數再次說明;

                  5)若實參是動態數組,在過程體或函數體中可以使用重定義語句修改數組的維界;

                  舉例

                  Private Sub Form_Click()

                      Dim a() As Integer, i As Integer

                      Dim n As Integer

                      n = InputBox("請輸入數組的初始大小")

                      ReDim a(n)

                      For i = 1 To n

                             a(i) = i

                      Next i

                      Call PrintArray(a)

                      Call Array1(a)

                      Call PrintArray(a)

                  End Sub

                  Private Sub PrintArray(x() As Integer)

                     Dim i As Integer

                     For i = LBound(x) To UBound(x)

                               Print x(i);

                      Next i

                      Print

                  End Sub

                  Private Sub Array1(a() As Integer)

                      Dim m As Integer, n As Integer

                      n = UBound(a)

                      m = InputBox("請輸入新大小")

                      ReDim Preserve a(m)

                      Dim i As Integer

                      For i = n + 1 To m

                              a(i) = 0

                      Next i

                  End Sub

                  輸入58,程序執行結果為:

                  舉例:自定義一個將一維數組按從小到大排序的通用過程

                  Private Sub Command1_Click()

                      Dim i As Integer, j As Integer

                      Dim a(10) As Integer

                      For i = 1 To 10

                          a(i) = Int(8 * Rnd)

                          Picture1.Print a(i);

                      Next i

                      Call sort(a)

                       For i = 1 To 10

                         Picture2.Print a(i);

                      Next i

                  End Sub

                  Private Sub sort(a() As Integer)

                      Dim i As Integer, j As Integer

                      For i = 1 To UBound(a) - 1

                          For j = i + 1 To UBound(a)

                              If a(i) > a(j) Then

                                     temp = a(i) 

                                     a(i) = a(j)   

                                     a(j) = temp

                              End If

                          Next j

                      Next i

                  End Sub

                  本程序的功能是找出100~200之間的所有素數。

                  Private Sub Form_Click()

                      Dim i As Integer, x As Integer

                      For i = 100 To 200

                               If   prime(i)        Then Print i

                      Next i

                  End Sub

                  Private Function prime(   byval n  as integer      ) As Boolean

                      Dim i As Integer

                      For  i = 2 To Sqr(n)

                              If n Mod i = 0 Then

                      Next  i

                      prime = True

                  End Function

                  8.5 遞歸過程

                          所謂遞歸,就是在過程定義中,調用過程本身。

                  例:使用遞歸函數求N!。  [提示]N!=N*(N-1)!

                  Private Sub Form_Click()

                      Dim n As Integer

                      n = InputBox("輸入一個正整數")

                      Print n; "!="; fact(n)

                  End Sub

                  Private Function fact(ByVal n As Integer) As Long

                      If  n = 1 Then

                            fact = 1

                      Else

                             fact = n * fact(n - 1)

                      End If

                  End Function

                  總結:

                           使用遞歸算法,最重要的是要有一個結束遞歸的條件,可以使遞歸得以返回,即終止條件或邊界條件。

                  例:使用遞歸算法計算裴波拉挈數列。

                  Private Sub Form_Click()

                      Dim n As Integer

                      n = InputBox("求數列的第幾項")

                      Print “數列中第”; n; “項是”;   Cal(n)

                  End Sub

                  Private Function Cal(n As Integer)

                      If n = 1 Or n = 2 Then

                              Cal = 1

                      Else

                              Cal = Cal(n - 1) + Cal(n - 2)

                      End If

                  End Function

                  遞推法利用未知項與已知項之間存在的某種關系,從已知項逐項推出未知項的方法。

                  Private Sub Form_Click()

                       Dim fb() As Integer

                       Dim i As Integer,, n as integer

                       n = InputBox(“求數列中第幾項的值”)

                       Redim fb(n)

                       fb(1)=1:fb(2)=1

                       For i = 3 To n

                            fb(i)=fb(I-1)+fb(I-2)       

                       Next i

                       Print "數列中的第"; n; "項是"; fb(n)

                  End Sub

                  [8-9]編寫一個遞歸函數,求任意兩個整數的最大公約數。

                  Private Sub Command1_Click()

                      Dim Gcdvalue As Long,  M As Long, N As Long

                      If M < > 0 And N < > 0 Then

                              Gcdvalue = Gcd(M, N)

                              Text3.Text = CStr(Gcdvalue)

                      End If     

                  End Sub

                  Private Function Gcd(ByVal X As Long, ByVal Y As Long)

                      Dim R As Long

                      R = X Mod Y

                      If R = 0 Then

                            Gcd = Y

                      Else

                             X = Y Y = R  Gcd = Gcd(X, Y)

                      End If

                  End Function

                   

                  寫出下列程序運行的結果:

                  Private Sub Command1_Click()

                         Dim a As Integer

                         a = 2

                         Call sub1(a)

                  End Sub

                  Private Sub sub1(x As Integer)

                         x = x * 2 + 1

                         If x < 10 Then

                               Call sub1(x)

                         End If

                         x = x * 2 + 1

                         Print “x=”;x

                  End Sub

                  Private Sub Command1_Click()

                         Dim a As Integer

                         a = 2

                         Call sub1(a)

                  End Sub

                  Private Sub sub1(x As Integer)

                         x = x * 2 + 1

                         If x < 10 Then

                               Call sub1(x)

                         End If

                         x = x * 2 + 1

                         Print “x=”;x

                  End Sub

                  8.6 變量的作用域

                  8.6.1 過程級變量

                            在一個過程內部聲明的變量,只在過程內部有效,又稱為局部變量;

                  例:

                  Private Sub Command1_Click()

                      Dim i As Integer

                      i = i + 1

                      Print i

                  End Sub

                  Private Sub Command2_Click()

                      i = i - 1

                      Print i

                  End Sub

                  過程級變量,過程開始執行時,系統分配給其存儲單元,而一旦過程運行結束,系統就收回存儲空間。在其它過程中,不可訪問。

                  8.6.2  模塊級變量

                          在模塊的通用聲明段中用PrivateDim聲明的變量,模塊中任何一個過程都可以訪問;

                  Dim i As integer

                  Private Sub Command1_Click()

                              i = i + 1

                      Print i

                  End Sub

                  Private Sub Command2_Click()

                      i = i - 1

                      Print i

                  End Sub

                  模塊級變量,在模塊加載時,即分配給其內存存儲單元,模塊中任意過程均可對該變量進行操作,直到模塊卸載時,系統才收回存儲空間。但在其它模塊中,不可訪問。

                  8.6.4  關于同名變量

                          當變量的作用域不同時,允許變量的名稱相同。

                   例如:

                  Dim i As integer

                  Private Sub Command1_Click()

                      i = i + 1

                      Print i

                  End Sub

                  Private Sub Command2_Click()

                      Dim i As integer

                      i = i + 10

                      Print i

                  End Sub

                  說明:當變量名稱相同而作用域不同時,優先訪問局限性大的變量,即作用范圍小的變量屏蔽作用范圍大的變量。

                  Option explicit

                  Public x as integer,y as integer,z as integer

                   

                  Private sub form_activate()

                      Conflict_x

                      Debug.print “X,YZ是:”,x,y,z

                  End sub

                  Private sub  form_load()

                      X=10 : y=20 : z=35

                  End sub

                  Private sub  conflict_x()

                     Dim x as integer

                     x=135

                     Debug.print “X,YZ是:”,x,y,z  

                  End sub

                  8.6.5  靜態變量

                    在過程內的變量定義時,Static 關鍵字定義的變量。

                    所謂靜態變量,是指僅在過程第一次執行時,分配給該變量內存單元,到過程執行結束時,并不象其它局部變量一樣收回存儲空間,系統并不收回分配給靜態變量的存儲空間,其內的內容得以保留,當再次調用執行該過程時,靜態變量中保留了上次運行時的數據,本次執行可直接訪問。

                    靜態變量只在過程內有效,即是局部變量

                  Private Sub Command1_Click()

                      Static   i  As integer

                      i = i + 1

                      Print i

                  End Sub

                  舉例:

                  Option explicit

                  Private sub command1_click()

                      Dim k as integer

                      K=5

                     Call static-variable(k)

                     Debug.print “第一次調用:k=”;k

                     K=5

                     Call static-variable(k)

                     Debug.print “第二次調用:k=”;k

                  End sub

                  Private sub static_variable(n as integer)

                      Static  sta as integer

                      Sta=n+sta

                      N=sta+n

                  End sub

                  說明:    

                   因二次過程調用時,STA的初值不同,所以雖然實參一樣,但運行結果不同。

                   

                  Dim a As Integer, b As Integer               模塊級變量

                  Private Sub Form_click()

                      Dim x As Integer, y As Integer

                      a = 5: b = 3

                      x = x + a: y = y + b

                      Print fun1(x, y)

                      Print fun1(x, y)

                  End Sub

                  Private Function fun1(m As Integer, n As Integer) As Integer

                      Static k As Integer                                   靜態變量

                      Dim a As Integer, b As Integer               同名的過程級變量

                      a = a + m

                      b = b - n

                      k = k + a + b

                      fun1 = k

                  End Function

                  寫程序運行結果

                   

                  上課習題講解

                  1執行下面的程序,單擊Commandl,則窗體上第一行顯示的是  (______)  ,第二行顯示的是(______________)  。

                      Option Explicit

                      Dim X As Integer

                      Private Sub Commandl_Click()

                         Dim Y  as  Integer

                         X=10Y=2

                         Call process(Y)

                         Print X,Y

                         Call process((Y))

                         Print X,Y

                      End Sub

                      Private Sub process(n As Integer)

                         Dim Y As Integer

                         If n>0 Then

                           X=X-n

                           Y=X

                         Else

                           X=X+n

                           Y=X+2  

                         End If

                         n=-n

                      End Sub

                  2.執行下面的程序,連續三次單擊命令按鈕Commandl之后,A數組共有  (________)  個元素;數組元素A(2)的值是(____________)  ,A(4)的值是.(_______________)  。

                      Option Explicit

                      Option Base 1

                      Private Sub Commandl_Click()   

                          Static A()As Integer,n As Integer

                          Dim i As Integer,k As Integer

                          k=n   

                          n=n +2

                          ReDim  Preserve  A(n)

                          For i=k+1 To  n   

                  A(i)=i*n+1

                          Next i

                          For i=1 To n

                             Print A(i);

                          Next i

                          Print

                      End Sub

                  3.執行下面的程序,單擊Commandl,在窗體界面上顯示的第一行是  (___________) ,第二行是 (___________)  ,第三行是(_______________)  ,第四行是(____________)  。

                      Option Explicit

                      Private Sub Commandl_Click()

                           Dim a As Integer,b As Integer,i As Integer

                           i=1218

                           a=i\100

                           b=i Mod 100

                           If b<>0 Then

                              Print a

                              Print b

                            Print Lcd((a),(b));a;b

                              Print Lcd(a,b);a;b

                          End If

                      End Sub

                      Private Function Lcd(x As Integer,Y As Integer)As Integer

                           Dim d As Integer   

                           If x<Y Then

                               d=xx = YY = d

                           End If

                           d=X

                           Do

                              If x Mod Y=0 Then

                                Lcd=x

                                Exit Do

                              Else

                               X=x+d

                              End If

                           Loop

                  End Function

                  4.本程序的功能是利用無窮級數求cos(x)的近似值,已知:

                  當第n項的絕對值小于等于10^-7時計算終止。

                      Option Explicit

                      Private Sub Commandl_Click()

                         Dim X As Single,n As Integer,sum As Single

                         Dim a As Single

                         x=Textl   

                          (  ______________  )

                         a=1

                         n=1

                         Do

                           a=-a

                           a=(   _________________   )

                           sum=sum+a

                           n=n+1

                         Loop Until(  __________________ )

                         Text2=sum

                      End Sub

                  7.定義方陣的一種范數為該方陣各列元素的絕對值之和中的最大值。以下程序的功能

                  是求一個4×4方陣的范數。該方陣的數據是隨機生成的-2020之間的整數。

                      Option Explicit

                      Option Base 1

                      Private Sub Commandl_Click()

                        Dim a(4,4) As Integer

                        Dim i As Integer,j As Integer

                        For i=1 T0 4

                          For j=1 To 4

                            a(i,j)=  ( _________ )

                            PicturelPrint Right(" "&Str(a(i,j)),4);

                          Next j

                          PicturelPrint

                       Next i

                       Textl.Text=  (______________ )

                      End Sub

                      Private Function fan(a()As Integer)As Integer

                           Dim b(4) As Integer,max As Integer

                           Dim i As Integer,j As Integer

                           For i=1 To  4

                  For j=1 To 4

                                   b(j)=(    ______________  )

                                Next J

                           Next i

                      max=b(1)

                           For i=2 To 4

                             If max<b(i) Then max=b(i)

                           Next i

                           fan=max

                      End Function  

                  8.下面程序的功能是:找出僅由數字1、2、3、4組成的4位素數,要求每個素數由4個不 同數字組成。算法提示:函數Validate用于驗證一個4位數是否由4個不同數字組成。在函 數中用A數組的各個元素分別對應數字09,只要某數字出現在四位數中,無論幾次,均將該數字對應的數組元素值置為1。

                  Option Explicit

                     Private Sub Commandl_Click()

                        Dim i As Integer,Flg As Boolean

                        For i=1234 To 4321

                            (  ________________ )

                            Call Prime(i,Flg)

                            If Flg Then

                               If Validate(i)Then

                                   Textl=Textl & i & vbCrLf

                            End If

                            End If

                        Next i

                      End Sub

                      Private Sub Prime(n As Integer,f As Boolean)

                        Dim k As Integer

                        For k=2 To Sqr(n)

                            (   __________________   )

                        Next k

                        f=True

                      End Sub

                      Private Function Validate(n As Integer)As Boolean

                         Dim A(0 To 9)As Integer,s As String,i As Integer

                         Dim sl As String*1

                       (   ____________________   )

                      For i=1 To Len(s)

                         sl=Mid(s,i,1)

                        (    ____________________   )

                      Next i

                        If A(1)+A(2)+A(3)+A(4)=4 Then

                         (   ________________________   )

                        End If

                      End Function

                      9.下面程序的功能是:首先生成一個由小到大已排好序的整數數組,再輸入一個數據,單擊“插入”按鈕會自動把這個數據插人到原數組適當的位置,并保持數組的有序性。

                    Option Explicit

                    Dim a( )As Integer

                  Private Sub Form_Activate()

                      Dim i As Integer

                      ReDim a(10)

                      For i=1 To 10

                        a(i)=(i-1)*10+1

                        Textl=Textl & Str(a(i))

                      Next i

                      Text2.SetFocus

                  End Sub

                  Private Sub Commandl_Click()

                    Dim n As Integer,i As Integer

                    n=Text2

                    For i=1 To UBound(a)

                      If (   __________________   )Then Exit For

                    Next i

                    (   ______________________   )

                      For i=1 To UBound(a)

                         Text3=Text3 & Str(a(i))

                      Next i

                  End Sub

                  Private Sub inst(P()As Integer,n As Integer,k As Integer)

                                                    '數組元素移位并實現插入

                      Dim i As Integer

                      (   ____________________   )

                      For i=UBound(P)-l To k Step -1

                      (   ____________________   )

                      Next i

                      P(k)=n

                  End Sub

                   

                  課后習題:

                  1.運行下面的程序,單擊commandl,在窗體上顯示的變量A的值為( _____ ),變量B的值為( _______ )

                    Option Explicit

                    Dim A As Integer   

                    Private Sub Command1_Click()   

                      Dim B As Integer

                      B=3   

                      A=4

                      B=Fun(Fun(A,B+2),A)+B

                      Print A,B

                    End Sub

                    Private Function Fun(N As Integer,K As Integer)  

                      N=N+A  

                      K=N-K

                      Fun=N+K+A

                    End Function

                  2執行下面的程序,單擊command1,窗體上顯示的第一行是(_____ ),第二行是( _____ ),第四行是( _______ ),最后一行是( ________ )

                      Option Explicit

                      Private Sub Command1_Click()

                       Dim n As Integer   

                       n=5   

                       Call test(n)   

                       Print n

                      End Sub   

                      Private Sub test(ByVal n As Integer)

                        Dim i As Integer,S As String

                        If n>0 Then   

                          For i=1 To n   

                            S=S & CStr(i)

                          Next i

                          Print S   

                          Call test(n-2)   

                       Else

                         Print "OVER"

                       End If

                      End Sub

                    3.運行下列程序,單擊Command1,在窗體上顯示的第一行內容是 (______  ),第二行的內容是(________ ),第三行的內容是( ________ )("A"ASCII碼是65,"z"90)

                      Option Explicit

                      Private Sub Command1_Click()

                        Dim i As Integer, st As String, n As Integer, p As String * 1

                        p = "B"

                      For  i = 3 To 1 Step -1

                          n = Asc(p) - i

                          If n < 65 Then n = n + 26

                         st = Chr(n)

                         st = st & F(i)

                         Print st

                      Next i

                      End Sub

                      Private Function F(n As Integer)

                         Dim i As Integer

                         Static S As Integer

                         For i = 1 To n

                          S = S + i

                         Next i

                         F = S

                      End Function

                   6•用以下公式求f(x)的值。當通項的絕對值小于10^-7時停止計算,x的值由鍵盤輸入。

                      f(x)=a1x1-a2x2+a3x3-+(-1)n+1anxn+  |X|<l其中  a1=1,a2=2,an= ,n=3,4,5…

                  Option Explicit

                  Private Sub Command1_Click()、

                    Dim x As Single,fx As Single

                    Dim a As Single,a1 As Single,a2 As Single

                    Dim t As Single

                    a1=la2=2

                    x=text1

                    If  (______________ ) Then

                      MsgBox("x必須在-1---1之間")

                      ExitSub

                    End If

                    fx=a1*x-a2*x*x

                      t=(-1)*x*x

                    DO

                      a=1/(al+a2)

                      t=(-1)*x*x

                      fx=(________________ )

                      al=a2

                      ( ________________ )

                    Loop Until Abs(a*t)<0.0000001

                    Text2=fx

                   End Sub

                  7.學生的某次課程測驗中,選擇題的答案已記錄在列表框list1,其數據行格式是:學號為6個字符長度,2個空格,選擇題的答案為15個字符長度,程序根據標準答案進行批改,每答對一題給1,并將得分存放到列表框list1,標準答案存放在變量Exact中。

                  Option Explicit

                  Private Sub Command1_click()

                    Dim  Anw as string , StudId as string

                    Dim Scor as Integer, Exact as string

                    Dim I as Integer, J as integer

                    Exact=”ABCCBAACBBDCCDA”

                    For I=(   ____________   )

                  Anw=  _______________ 

                  StudId=Left(Anw,6)

                  Anw=Right(Anw,Len(Anw)-8)

                  (  _______________  )

                  For J=1 to  Len(Anw)

                     If  ________________ Then

                        Scor=Scor+1

                     End If

                     Next J

                     List2.AddItem StudId & “  “ & Scor

                   Next I

                  End Sub

                  8.下面程序的功能是:統計存放在數組A中的N個數有多少個是不同的。具體做法是:變量Left指向要被處理的數(從第2個元素開始),Right指向數組最后一個元素。若A(Left)與排在它前面的某個數組元素值相同,就用數組元素A(Right)的值來替換A(Left)的值,同時將變量Right的值減1;否則將變量Left的值加1,處理數組下一個元素,重復以上過程,直到Left>Right為止。Right的值即為不同的數的個數。

                   Option Explicit

                   OptionBase 1  

                   Private Sub Commandl_Click()

                  Dim A() As Integer,N As Integer,I AS Integer

                  Dim OP As Integer

                  N=InputBox("請輸入數據個數", ,10)

                  ReDim A(N)   

                  Randomize

                  For I=1 To N   

                     A(I)=Int(Rnd*10)+1

                     Text1=Text1 & A(1) & " "

                  Next I

                  Call Statistic(A,OP)

                  Text2=""  & oP & "個不同的數:"

                  For I=1 To OP

                    Text2=Text2 & A(I) & " "

                   Next I

                  End Sub

                  Private Sub Statistic(A() As Integer,Right As Integer)

                      Dim Left As Integer,K As Integer,I As Integer

                      Right=( __________ )

                      Left=2

                      Do While Left<=Right

                         K=( ___________ )

                         For I=K To 1 Step -1

                           If A(Left)=A(I) Then Exit For

                         Next I

                         If ( _______________ )Then

                           Left=Left+1

                       Else

                           A(Left)=A(Right)

                          ( ______________ )

                         End If

                     Loop

                  End Sub

                  9.在計算機中用一個字節(8),來存儲一個字符的Ascii,其中低7位二進制數對應字符的編碼,每個字節的最高位一般保持為0”,在數據傳輸時可用作奇偶校驗位,傳輸時Ascii代碼轉換成傳輸碼的方法是:7Ascii碼有偶數個1,最高位為1,有奇數個1,則最高位為0,例如字母”A”Ascii碼十進制表示為65,二進制表示為00100001。”A”的傳輸碼則為”1010 0001”,本程序的功能就是把Ascii碼轉換成這種傳輸碼

                  Option Explicit

                  Private Sub Command1_Click()

                     Dim i As Integer,S As String

                     Dim str As String,ch As String

                     str=Text1.text

                     For i=1 To Len(str)   

                      ( __________________ )

                      Call convert(ch,s)

                      List1.AddItem ch & "==>" & S

                    Next i

                  End Sub

                  Private Sub convert(ch As String,S As String)

                    Dim m As Integer,k As Integer,n As Integer,iAs Integer

                    s= ( _______________ )

                    n=Asc(ch)

                    Do While n>0

                      (  ____________  )

                      S=m & S

                      If m=1 Then

                         k=k+1

                      End If

                      n=n\2

                      Loop

                      For i=1 To 7-Len(s)  '將字符的二進制代碼補足7

                      S="0" & S

                      Next i

                      If k Mod 2=0 Then

                           ( __________________ )

                      Else

                        S="0" & S

                      End If

                    End Sub

                   

                   

                  亚洲欧美日韩国产一区二区三区_全亚洲免费一级黄片_国产一区二区三区不卡视频手机版_国产污三级网站在线观看