《vb例题循环解读课件.ppt》由会员分享,可在线阅读,更多相关《vb例题循环解读课件.ppt(38页珍藏版)》请在三一办公上搜索。
1、2022/11/30,1,我国古代数学家张丘建在“算经”里提出一个世界数学史上有名的百鸡问题:鸡翁一、值钱五, 鸡母一、值钱三,鸡雏三、值钱一,百钱买百鸡,问鸡翁、母、雏各几何? 分析:若公鸡x只,母鸡y只,小鸡z只,依题意可以列出以下方程组:,2022/11/30,2,在上面的两个方程中,有3个未知数,属于不定方程,无法直接求解。下面我们用“穷举法”求解。穷举法是将各种可能的组合全部一一测试,将符合条件的组合输出。这里使用二层循环结构。即将公鸡数从1变化到100,母鸡数也从1变化到100,对于每一组公鸡和母鸡数,从100中减去公鸡和母鸡数就得到小鸡的个数,然后再计算买三种鸡的总钱数是否为10
2、0元。若是就得到一组解,然后再继续。,2022/11/30,3,再仔细分析一下,若100元钱全部都买公鸡最多买20只,如果全部买母鸡最多买33只,所以穷举法外循环中公鸡数可从1 变到19,内循环中母鸡数可从1 变化到33,小鸡个数应100中减去公鸡数和母鸡数得到。工程设计步骤如下:(1)新建“标准EXE”工程,在出现的窗体上添加四个标签、一个列表框、一个框架和两个命令按钮。其中标签1是放在框架内。,2022/11/30,4,(2)标签1的Caption属性设为“公鸡五元、母鸡三元、小鸡一元钱三只。100元钱买100只鸡。问公鸡、母鸡、小鸡各多少只?”标签2-标签4的Caption属性分别设置为
3、“公鸡”、“母鸡”、“小鸡”。如下图所示。,2022/11/30,5,(3)代码编写如下:编写单击命令按钮“计算”所执行的代码如下。Private Sub Command1_Click()List1.ClearFor x = 1 To 19 外循环求公鸡数 For y = 1 To 33 内循环求母鸡数 z = 100 - x y 小鸡数 If 5 * x + y * 3 + z / 3 = 100 Then p = Format(x, ) & Format(y,_ )& Format(z, ),Format 是格式化一个表达式。,2022/11/30,6,Rem 把满足条件的一种情况添加到列
4、表框中。 List1.AddItem p End If Next y Next xEnd Sub编写单击命令按钮“退出”所执行的代码如下。Private Sub Command2_Click() EndEnd Sub,在列表框中使用AddItem方法添加项目,2022/11/30,7,(4)运行结果。按F5键运行工程出现运行界面后按“计算”按钮后,得到结果如下图所示。,图4-17 百钱买百鸡问题的运行结果,2022/11/30,8,在窗体上输出下列图案,2022/11/30,9,问题分析: 该图案共有十行,每行有十个星号。要想输出该图案应使用 For 循环结构,可以先用变量a存放这十个星号。使
5、用语句: a=“*” 由于要输出的是一个平行四边形,每一行的起始位置比上一行位置多2列。因此要使用Tab函数来确定每一行输出的起始位置。 语句Print Tab(2* i) ;表示从第2* i 列开始输出内容。编写代码如下:,2022/11/30,10,Option ExplicitPrivate Sub Command1_Click()Dim a As String, i As Integer, j As Integera = *Form1.FontSize = 14 For i = 1 To 10 Print Tab(2 * i); Print a Next iEnd Sub,表示从每一行
6、的第2* i 列开始输出变量a的值。,2022/11/30,11,在窗体上输出下列图案,2022/11/30,12,问题分析: 该图案共有十行,每行有不同的星号。第一行有一个“*”,第二行有三个“*”,第三行有五个“*”,要想输出该图案应使用双层 For 循环结构,外层循环决定输出的行数,内层循环决定每行输出的星号数。可以先用变量a存放一个星号。使用语句: a=“*” 由于要输出的是一个等腰三角形,每一行的起始位置比上一行位置少一列。因此要使用Tab函数来确定每一行的起始位置。 语句Print Tab(18- i) ;表示从第18-i 列开始输出内容。编写代码如下:,2022/11/30,13
7、,编写代码如下:Option ExplicitPrivate Sub Form_Click() Dim a As String Dim i As Integer, j As Integer a = * Form1.FontSize = 14,2022/11/30,14,For i = 1 To 10 Print Tab(18 - i); For j = 1 To 2 * i - 1 Print a; Next j Print Next iEnd Sub,外循环决定共输出几行,内循环决定每行共有几个“*”第一行是1个“*”,第二行是3个“*”,第n是2*n-1个“*”。,输出的位置,2022/1
8、1/30,15,在窗体上输出乘法九九表,2022/11/30,16,Option ExplicitPrivate Sub Form_Click() Dim i As Integer, j As Integer, k As Integer Dim m As Integer FontSize = 12 Print Tab(25); 乘法九九表 Print: Print Print * ; For i = 1 To 9 Print Tab(i * 6); i; Next i Print,输出表头,2022/11/30,17,For j = 1 To 9 Print j; ; For k = 1 To
9、 j Print Tab(k * 6); j * k; ; Next k Print Next j End Sub,内循环决定输出乘积及个数,外循环决定共输出几行,2022/11/30,18,打印下列图案,分析:上面的图案可分成两个等腰三角形。上面的三角形有5行第1行为一个“*”,第2行为三个“*”,第3行为五个第5行有2*5-1个“*”。代码编写如下页所示。,2022/11/30,19,Option ExplicitPrivate Sub Form_Click() Dim i As Integer, j As Integer Dim a As String For i = 1 To 5 Pr
10、int Tab(20 - i); For j = 1 To 2 * i - 1 Print *; Next j Print Next i,输出上三角形,2022/11/30,20,For i = 4 To 1 Step -1 Print Tab(20 - i); For j = 1 To 2 * i - 1 Print *; Next j Print Next i End Sub,输出下三角形,2022/11/30,21,任意输入一个自然数,编程输出其各个因子。工程设计步骤如下:(1)新建“标准EXE”工程,在出现的界面上添加三个标签、一个文本框、和两个命令按钮如图4-18所示。,2022/1
11、1/30,22,(2)设置窗体及控件的属性。标签1的Caption属性为“请输入一个自然数”;标签2的Caption属性为“N的因子是:”;标签3的Caption属性为空,在运行时赋值。另外标签3的Autosize属性为True,以便在运行时赋值能根据实际内容自动适应。其他属性如下页图4-18所示。,2022/11/30,23,图4-18求自然数因子的工程界面及属性设置,2022/11/30,24,输入一个数y,图4- 19 输出某个自然数y的所有因子流程图,i=2,y Mod i=0,While y 1,输出 i,y =y i,i = i +1,Y,N,2022/11/30,25,(3)编写
12、代码如下:编写单击命令按钮“计算”所执行的代码Private Sub Command1_Click() Dim x As String, y As Single y = Val(Text1.Text) i = 2 x = ,2022/11/30,26,Do While y 1 If y Mod i = 0 Then x = x & * & Str(i) & Chr(13) y = y i Else i = i + 1 End IfLoop Label3.Caption = x Label2.Caption = Text1.Text & 的因子是:End Sub,为找下一个因子做准备。,2022
13、/11/30,27,(4)运行结果。按F5执行工程,当出现运行界面时,从文本中输入一个自然数,然后单击命令按钮“计算”就会得到如图4-20所示的结果。即在标签3中输出了自然数的各个因子相乘的结果;另外,标签2的内容也根据输入的数自动改变如图4-20所示。,2022/11/30,28,图4-20 求自然数因子的运行结果,2022/11/30,29,用牛顿迭代法求方程的根。所求的方程为:分析:用牛顿迭代法求方程f (x ) = 0在 x0 附近的实根的方法如下。(1)选一个接近x 的真实根x1 ;(2)通过x1 求出f( x1 )。在几何中就是作x = x1 ,交f (x )于 f ( x1 )见
14、图4-21所示。(3)过f( x1 )作f (x )的切线,交x 轴于 x2,可以用公式求出x2。由于,2022/11/30,30,(4)通过x2 求出f( x2 )。(5)再通过f( x2 )作f (x )的切线,交x 轴于 x3 。 (6)再通过x3 求出f( x3 )。再通过f( x3 )作f (x )的切线,交x 轴于 x4 。一直求下去,直到接近真正的根。当两次求出的根之差 | xn+1-xn |就认为xn+1足够接近于真实的根。,故,2022/11/30,31,牛顿迭代公式是:,f(x),x1,x2,x3,x4,f(x1),f(x2),f(x3),f(x4),y,x,图4-21牛顿
15、迭代法几何原理图,2022/11/30,32,工程设计步骤如下:(1)新建“标准EXE”工程,在出现的界面上添加两个标签、一个文本框、一个图片框和两个命令按钮。如图4-22左图所示。(2)设置窗体及控件的属性如图4-22左图所示。,4-22牛顿迭代法求方程根工程界面设计及运行结果,2022/11/30,33,(3)编写代码如下编写单击Command1命令按钮“求根”所执行的代码Private Sub Command1_Click() Dim f As Double, f1 As Double Const eps = 0.0001 Dim x0 As Double, x1 As Double x
16、1 = Val(Text1.Text),2022/11/30,34,Do x0 = x1 f = Exp(-x0) - x0 f1 = -Exp(-x0) - 1 x1 = x0 - f / f1 Loop While (x1 - x0) eps Picture1.Cls Picture1.Print x1End Sub,根从图片框上输出,牛顿迭代法求根,2022/11/30,35,编写单击Command2命令按钮“退出”所执行的代码Private Sub Command2_Click() EndEnd Sub编写单击窗体所执行的代码Private Sub Form_Click() Text1
17、.Text = Picture1.ClsEnd Sub,2022/11/30,36,编写文本框变化时所执行的代码Private Sub Text1_Change() Const Tile = 牛顿迭代法求方程根程序 If Text1.Text And_ Not IsNumeric(Text1.Text) Then MsgBox 输入的不是数字!, vbOKOnly, Tile Text1.Text = Text1.SetFocus End IfEnd Sub,2022/11/30,37,(4)运行工程。按F5键运行工程。当出现运行画面时在文本框中输入方程的初始根,然后单击“计算”命令按钮,就可在下面的图片框中输出方程的根如下页图4-23所示。注意:在程序中,对于文本框中输入的不是数字的其他情况给出了必要的提示。,2022/11/30,38,图4-23 牛顿迭代法求方程根程序运行结果,