搜档网
当前位置:搜档网 › Ch07exe

Ch07exe

· 1 ·

【例7.4】

已知一个数为5,求这个数乘以3,然后再加2,之后再除以5,再乘以20等于多少? 分析:这个例题本身没有什么意义,只不过是一个很明显的顺序结构的例子,我们只要先把5赋给x,再把x 乘以3赋给x ,再把x+2赋给x ,…, 然后依题意一直做到最后就行。

流程图如图7-2-2。 程序如下:

Private Sub Form_Click() Dim x As Single x = 5 x = x * 3 x = x + 2 x = x / 5 x = x * 20 Print "x="; x End Sub

图7-2-3(b)。选择结构的实现通常也有两种不同的方式:条件(二分支)语句和多分支语句。

【例7.5】

输入x ,计算y 的值。其中:

??

?<-≥+=)

0(21)

0(1x x

x x

y

分析:该题是数学中的一个分段函数,它表示当0≥x 时,用公式x y +=1来计算y 的值;当0

0≥x 作为If 条件。程序中当0≥x 为真时,执行x y +=1,为假时,执行x y 21-=。

程序界面如图7-2-4。 程序如下:

图7-2-4 例7.5界面

图7-2-2 例7.4流程图

Private Sub Command1_Click()

Dim x As Single

Dim y As Single

x = Val(Text1.Text) …Val函数是把字符型的Text1.Text转换成数值型。

If x >= 0 Then '当x>=0时

y = 1 + x

Else '当x<0时

y = 1 - 2 * x

End If

Text2.Text = y

End Sub

【例7.6】

通过键盘输入一个学生成绩,然后打印出它的等级。

流程图如图7-2-5所示。

图7-2-5 例7.6流程图

程序如下:

Private Sub Form_Click()

Dim score As Single

score = InputBox("请输入你的成绩(0~100)", "输入窗口")

· 2 ·

Select Case score

Case 0 To 59

Print "你的成绩不及格!"

Case 60 To 69

Print "你的成绩及格。"

Case 70 To 79

Print "你的成绩中等。"

Case 80 To 89

Print "你的成绩良好。"

Case 90 To 100

Print "恭喜你,你的成绩优秀!。"

Case Else

Print "你的成绩输入有问题。"

End Select

End Sub

【例7.7】

计算1到100之间的偶数和,当和大于等于400,则不再求,最后输出和值。

分析:这里是求1到100之间偶数和,即2, 4, 6, … ,100的和,可以用一个循环来求,由于这里循环的次数基本确认,故可用For … Next循环语句来求和。循环初值为2,终值为100,步长为2。

程序如下:

Private Sub Form_Click()

Dim sum As Integer, i As Integer

sum = 0

For i = 2 To 100 Step 2

sum = sum + i

If sum >= 400 Then Exit For

Next

Print "和为:"; sum;" 此时i为:"; i

End Sub

【例7.8】

按下式累加求自然对数的近似值:

· 3 ·

· 4 ·

!

1!31!21!111n e +++++

= 直到最后一项的值小于10-6为止。

分析:首先找出和式中各项的规律:设第n 项的分母为n P ,则第n+1项的分母为

)1(1+?=+n P P n n 。若设前n 项和为n S ,则前n+1项和为1

11

+++

=n n n P S S 。求有限式的和式需要用一个循环,循环结束的条件是6110-+

程序如下:

Private Sub Form_Click()

Dim sum As Single, item As Single Dim i As Integer, n As Integer sum = 1 item = 1 i = 1

Do While 1 / item >= 0.000001 sum= sum + 1 / item i = i + 1 item = item * i Loop

Print "自然对数近似值:"; sum; ", 累加项数:" ;i End Sub

【例7.9】

定义数组

Dim A1%(-10 To 20)

…A1%是一个一维整型数组,有31个元素 Dim S1(10) As String …S1是一个一维字符串数组,有11个元素 Public Sum(20) As Integer …21个整型元素, (Public 指明数组为全局变量) Dim A(3,4) As Double

…二维双精度数组, 有4行5列,共20个元素。 现在举例,说明数组的应用。

【例7.10】

编一个统计10个学生语文平均分和总分。

分析:要求数组的平均值,先求数组的和,然后再用和去除以数组中元素的个数,所得的数就是平均数。

程序如下:

Private Sub Form_Click()

Dim i As Integer

Dim sScore(10) As Single …定义一个一维数组sScore,共11个元素(下标0~10)

Dim sSum As Single

For i = 1 To 10

sScore(i) = InputBox("输入第" +str(i) + "个学生的语文成绩")

Next

…下面四行代码是把数组的10个元素加起来,和放到变量sSum中

sSum = 0 …初始化sSum为0

For i = 1 To 10

sSum = sSum + sScore(i) …把数组中第i个分量加到sSum中

Next

Print"总分:"; sSum ; "总平均:"; sSum / 10

End Sub

【例7.11】

输入10个数,求这10个数的最大值。

分析:求一个数组的最大值、最小值是编程中经常遇到的算法。要求最大值,设一个变量sMax放最大值,先认为数组的第一个元素是最大值,然后把数组中其余的元素依次去和这个最大值sMax去比较,如果有元素大于最大值sMax,就把该元素的值赋给sMax。数组中所有的元素都和sMax进行相应的比较之后,所得到的sMax的值就是该数组的最大值。

程序如下:

Private Sub Form_Click()

Dim i As Integer

Dim sNum(1 To 10) As Single '定义一个一维数组sNum,共10个元素

Dim sMax As Single

For i = 1 To 10

sNum(i) = InputBox("输入第" + Str(i) + "个数")

Next

sMax = sNum(1) '初始化,先认为第1个元素最大,赋给sMax

· 5 ·

· 6 ·

For i = 1 To 10

If sNum(i) > sMax Then sMax = sNum(i) End If Next

Print "10个数为:"; For i = 1 To 10 Print sNum(i); Next

Print '10个输出后加一个换行符 Print "最大值为:"; sMax End Sub

在为sMax 赋初值(初始化)时,我们这里是用数组的第一个元素作为初值,有时候也可以用一个特别小的常量值作为初值,该常量值一定要比数组中的所有元素都小(为什么?)。大家可以根据以上求最大值的程序自行设计一个求最小值的程序。

【例7.12】

计算阶乘5!、7!和8!,以及阶乘的和5!+7!+8!,用过程来解。(如图

7-2-7)

图7-2-7 计算阶乘以及阶乘的和

分析:要计算s=5!+7!+8!,先要分别计算出5!,6!和8!。由于3个求阶乘的运算过程完全相同,因此可以用通用Sub 过程来计算任意阶乘m!。在该过程被调用时,需要调用该过程的主过程提供两个实参:一个整数值的实参传给Sub 过程,用来告诉Sub 过程求几的阶乘,另外,还需要一个实参变量tot 用来返回m!的结果。在Sub 过程中将所求结果放入到total 变量中,返回主程序后实参tot 变量接收变量参数total 的值。这样3次调用子程序便可求得s 。

应用程序用户界面的建立参见图7-2-7,窗体中各对象属性的设置参见表7-2-6。

表7-2-6 计算阶乘的窗体属性设置

fact通用子过程为:

Sub fact(ByVal m As Integer, total As Long)

Dim i As Integer

total = 1

For i = 1 To m

total = total * i

Next

End Sub

四个命令按钮的Click事件过程代码如下:

Private Sub Command1_Click()

Dim a As Integer, tot As Long

a = 5

fact a, tot …注意这里的调用方式

Label1.Caption = a & "! = " & tot

End Sub

Private Sub Command2_Click()

Dim a As Integer, tot As Long

a = 7

Call fact(a, tot) …注意这里的调用方式与上面的调用方式不一样

Label1.Caption = a & "! = " & tot

End Sub

Private Sub Command3_Click()

Dim a As Integer, tot As Long

a = 8

Call fact(a, tot)

Label1.Caption = a & "! = " & tot

End Sub

Private Sub Command4_Click()

Dim a As Integer, tot As Long, sum As Long

a = 5

Call fact(a, tot)

·7 ·

sum = tot

a = 7

Call fact(a, tot)

sum = sum + tot

a = 8

Call fact(a, tot)

sum = sum + tot

Label1.Caption = "5!+7!+8! = " & sum

End Sub

从该题中可以看出fact过程只写一次,但可以被多次调用,从而减少重复代码。在fact过程的两个参数中,m是用ByVal引导,表示m只接受参数值,不返回结果。另一个参数total没有用ByVal引导,说明total既可接受参数,也可以通过total返回计算结果。

另外,从该题的编码可以看出,这里有四个事件过程:Command1_Click()、Command2_Click()、Comman,3_Click()和Command4_Click(),这些过程中都定义了变量a和tot, 这两个变量都是局部变量,它们的作用域只能在各自定义它们的过程中有效,出了相应的过程就不可见,也就是说,在定义它们的过程外就无效了。

【例7.13】

下面是通过过程average来对一个数组的元素求平均数的例子。Average过程有三个参数,a 是数组,n是整形数,aver是单精度数,因此调用它的主程序的参数必须在类型、顺序上相一致。

相关程序如下:

Sub average(a() As Single, ByVal n As Integer, aver As Single)

Dim i As Integer, total As Single

total = 0

For i = 1 To n

total = total + a(i)

Next

aver = total / n

End Sub

Private Sub Form_Click()

Dim b(100) As Single, aver1 As Single, i As Integer

·8 ·

For i = 1 To 100

b(i) = i * i

Next i

Call average(b, 100, aver1)

Print "数组b的平均数为:"; aver1

End Sub

在该例中,数组的默认下界为1,上界通过参数传进来为n。实际上此处也可以不告诉过程average数组的上下界,让过程用Lbound和Ubound去测试上下界。请同学们自己试一试。

【例7.14】

例7.12的另一解法,利用函数来解。

相关程序如下:

Function fact(m As Integer) As Long …函数的返回类型是长整型Long Dim i As Integer, total As Long

total = 1

For i = 1 To m

total = total * i

Next

fact = total …这条语句把total的值通过fact函数名返回出去

End Function

Private Sub Command1_Click()

Dim a As Integer, tot As Long

a = 5

tot = fact(a)

Label1.Caption = a & "! = " & tot

End Sub

Private Sub Command2_Click()

Dim a As Integer, tot As Long

a = 7

tot = fact(a)

Label1.Caption = str(a)+ "! = " +str( tot)

End Sub

Private Sub Command3_Click()

·9 ·

Dim a As Integer, tot As Long

a = 8

tot = fact(a)

Label1.Caption = str(a)+ "! = " +str(tot)

End Sub

Private Sub Command4_Click()

Dim tot As Long

tot = fact(5) + fact(7) + fact(8)

Label1.Caption = "5!+7!+8! = " & tot

End Sub

请注意上述实例中字符串连接的“+”和“&”两种不同方法的使用。

通过对同一道题目的不同解法,可以使它们在定义和调用方式上有所不同。如果返回值只有一个,那么采用函数方式在调用时就比较方便。但函数通过函数名的返回值只能有一个。采用Sub过程也可以有返回值,由于通过没有ByVal引导的参数返回结果,所以可以用多个参数返回多个结果。同样地在函数中也可以通过没有ByVal引导的参数来返回结果。

1 基本排序

将一组任意序列的数表按递增或递减的次序排列的过程就是排序。排序是一种基本的操作,在许多算法或程序中都要使用,是基本的算法。排序分两种:升序和降序。排序算法很多,不同的排序算法其辅助内存(待排序数表所占内存除外所需要内存空间)不同,运行时所需时间也不同。选择一个排序算法的依据是对大时数据排序时所需辅助内存尽量少并且尽量少占用机器时间。常见的排序算法有:选择法排序、冒泡法排序、希尔排序、插入法排序、合并法排序等。我们这里用的是最简单的选择法排序。

选择法排序的基本思想:

设有n个数的数表需要排序,不失一般性,我们这里以升序来说明。

1)从n个数中选出最小的数,与第1个数交换位置,使第一个数为n个数中最小

的数。这就是第1趟选择排序。

2)在第2个到第n个共(n-1)个数中选出其最小数,然后与第2个数交换,这第2

个数就是n个数中次小的数。这就是第2趟选择排序。

3)在剩余的n-2个数中利用上面所介绍的方法选出最小数与第3个数交换。这样前

3个数就是按升序排列。这就是第3趟选择排序。

4)依此类推,当到第i个数时,在第i个到第n个共n-i+1个数中选出最小数和第·10 ·

i个数进行交换,这就是第i趟选择排序。继续(n-1)次,最后便可构成升序序列。

上面总共需要n-1趟选择排序。

进行选择法排序的过程如图7-2-8。

图7-2-8 选择法排序过程

在图7-2-8中,带“*”的数字代表当前这次排序中所得的最小值。在第二次排序中,由于最小数就在第2个位置,也就不需要交换了。

【例7.15】对数组按从小到大的次序排序。

程序如下:

Private Sub Form_Click()

Dim i As Integer, k As Integer, aarray(1 To 10) As Integer

k = 10

For i = 1 To k

aarray(i) = InputBox("请输入第" & i & "个整数", "输入窗口")

Next

Print "排序前的数据为:"

For i = 1 To k

Print aarray(i);

Next

Print

Call sort(aarray(), k) '这里用数组作为参数

Print "排序后的数据为:"

For i = 1 To k

Print aarray(i);

Next

Print

End Sub

…下面这个过程是用于选择法排序,a()为待排数表,n为数表的个数

Sub sort(a() As Integer, n As Integer)

Dim i As Integer, j As Integer, t As Integer

·11 ·

· 12 ·

Dim min As Integer, min_no As Integer 'min 放最小值,min_no 放最小值的序号 For i = 1 To n - 1 '共n-1趟选择排序

min = a(i) '初始化最小值为第i 个数 min_no = i '初始化最小值序号为i For j = i + 1 To n If a(j) < min Then

min = a(j) '记录下此时新的最小值 min_no = j '记录下此时新的最小值序号 End If Next

If i <> min_no Then '如果最小值序号就是第i 个数,就不用交换 t = a(i)

a(i) = a(min_no) a(min_no) = t End If Next End Sub

运行结果如图7-2-9。

2 水仙花数

【例7.16】“水仙花数”是指一个3位数,其各位数的立方和等于该数,如: 153=13+53+33。

编写程序,输出所有的“水仙花数”,如图7-2-10。

分析:此题的关键是把任意3位数的每一位数分离出来。设a, b, c 分别是3位整数n 的百位数、十位数、个位数,则

a=Int(n/100) b=Int((n-a*100)/10) c=n-a*100-b*10

窗体界面的设计如图7-2-10,

设计步骤:

图7-2-9 排序结果图

(1)在Form1中先放一个Frame1框,该框是一个立体边框,去除Frame1框的Caption属性,大小如图;(2)在Frame1中添加一个Label1和一个列表框List1,Label1的Caption 属性为“按“开始”按钮,可以得到所有的“水仙花数”。”,Label1的WordWrap属性改为True, List1框的属性都为默认值,大小如图。(3)在Form1中添加一个命令按钮Command1, 并把该命令按钮的Caption属性改为“开始”。

命令按钮Command1的Click事件代码如下:

Private Sub Command1_Click()

Dim p As Integer, n As Integer, _

a As Integer,

b As Integer,

c 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.AddItem p

Next n

End Sub

3 *斐波那契序列数

斐波那契序列数的特点是除前两项数外,其他项数的值等于前两项的和。如:0,1,1,2,3,5,8, 13,21,34,55,…

【例7.17】求前24项斐波那契序列数。

程序代码如下:

Private Sub Form_Click()

Dim f As Long, f1 As Long, f2 As Long

f1 = 1: f2 = 1

Print "f(1)="; f1

Print "f(2)="; f2

For i = 3 To 24

f = f1 + f2

Print "f(" & i & ")="; f

f1 = f2: f2 = f

Next

End Sub

分析:该程序的F or…Next循环体中,先用f=f1+f2相当于f(3)=f(1)+f(2), 这时的f 相当于f(3), 然后再用新的f1代替f2(即f1相当于f(2)), f2代替f(即f2相当于f(3)), 在下

·13 ·

一次的循环(i=4)中,再执行f=f1+f2相当于f(4)=f(2)+f(3),这时的f相当于f(3), …,依此类推,直到i>24循环执行结束。

4 绘制函数曲线

绘制函数曲线是程序设计中经常遇到的问题,难度并不高,主要问题是编程者需要掌握一些绘制图形的函数和一些绘图技巧。下面我们首先介绍一些相关的函数:

(1) 设置新的坐标系

在VB或大多数高级程序语言中,都是屏幕或窗体的左上角的坐标原点为(0,0),横坐标向右增大,纵坐标向下增大,不符合人们的数学习惯,所以最好先设置一个新的符合人们习惯的坐标系,使坐标原点(0,0)在窗体中间,横坐标向右增大,纵坐标向下增大。在VB中有一个设置坐标的方法Scale, 其格式为:

Scale (x1,y1)-(x2,y2)

(x1,y1)为窗体的左上角坐标,(x2,y2)为窗体的右下角坐标。如图7-2-11所示。如果x2>x1 并且y1>y2,则所设置的坐标就是人们

习惯的坐标系。

(2) 画直线函数

画直线函数Line格式为:

Line (x1,y1)-(x2,y2)

所画的直线为点(x1,y1)到点(x2,y2)之间的

线段。

(3) 画点函数

画点函数PSet的格式为:

PSet(x1,y1)

此函数的功能是在(x1,y1)画一个点。

【例7.18】在窗体中绘制一条SIN曲线。

分析:首先要设置一个新的坐标系,它的坐标原点(0,0)在窗体的左中部。新的坐标

系可以设置窗体的左上角为(-1, 2),右下角为(15, -2),即X轴从-1到15,Y 轴从下到上范围为(-2,2)。这样的设置考虑到画SIN曲线的X轴范围为(0,4π),2个周期;SIN曲线的Y轴范围是(-1,1)。然后,画X轴和Y轴,画X 轴即画直线((-1, 0)-(15, 0)),画Y轴即画直线((0, 2)-(0, -2))。最后,画SIN

曲线,

(x2,y2) 图7-2-11 设置新的坐标系

·14 ·

该曲线在X轴上x的取值范围为(0,4π),x的增大幅度为π/100,对每个x值求一个SIN(x)函数值y,这样就可以得到每个坐标点(x,y), 然后在新的坐标系用PSet(x,y)画出来即可。画出曲线效果如图7-2-12。

在窗体中仅仅加一个命令按钮Command1,它的Caption(标题)属性为“开始画线”,见图7-2-12。

程序如下:

Option Explicit

Const PI = 3.1415926

Private Sub Command1_Click()

Dim x As Single, y As Single '坐标x,y

'设置窗体的左上角坐标为(-1,100),右下角坐标为(15,-100)

Form1.Scale (-1, 2)-(15, -2) '设置新的坐标系

Form1.Line (-1, 0)-(15, 0) '画X轴

Form1.Line (0, 2)-(0, -2) '画Y轴

x = 0 '设置x的初始值为0

Do While x <= 4 * PI '总共画4PI长的SIN曲线

y = Sin(x)

Form1.PSet (x, y) '在坐标x,y画一个点

x = x + PI / 100 'x递增PI/100,x每隔PI/100画一个点

Loop

End Sub

5 哥德巴赫猜想

1742年6月,德国数学家哥德巴赫在给彼得堡的大数学家欧拉的信中提出一个问题:任何大于6的偶数均可以表示为两个素数之和吗?欧位复信道:“任何大于6的偶数均可以表示为两个素数之和,这一猜想这还不能证明,但我确信无疑地认为这是完全正确的定理。”这就是至今尚未被证明的哥德巴赫猜想。

我们这里并不证明哥德巴赫猜想,而是用计算机来验证。

【例7.19】验证哥德巴赫猜想。窗体如图7-2-13。

·15 ·

图7-2-13 验证哥德巴赫猜想

分析:首先考虑问题。所谓“素数”是指除1和该数本身之外,不能被其他任何整数整除的数。判断一个自然数n(n>2)是否素数,只要依次用2~n作除数去除n,若n 不能被其中任何一个数整除,则n即为素数。在判断一个数是否为素数时,可以定义一个函数来判断,该函数的返回类型用布尔型,如果为真说明是素数,否则就不是素数。

然后考虑如何验证哥德巴赫猜想。给出一个大于6的偶数m,假设m是两个素数p1,p2的和,则p2=m-p1。先设p1=3,然后验证p1,p2是不是都是素数,如是素数,即验证成功;否则,再执行p1=p1+2(因为素数不可能是偶数, p1原为3,不断加2,使p1一直为奇数),再验证p1,p2是不是都是素数,如是素数,则验证成功;否则,再执行p1=p1+2,再验证,…… , 依此类推,直到p1大于m/2为止。

注意:在这个例子中,给定一个大于6的偶数,程序求出了所有的素数对。

程序如下:

Option Explicit …强制变量说明,即变量在使用前必须说明

Private Sub Command1_Click()

Dim lngA As Long, i As Long

Dim strTemp As String

Dim intPrimes As Integer

If Text1.Text = "" Then …一定要给出一个值,不能不输内容

Exit Sub

End If

lngA = CLng(Text1.Text) …把所输入的字符型数据变成长整型的偶数

List1.Clear …列表框清空

intPrimes = 0

For i = 3 To lngA / 2 Step 2 …此处的i相当于分析中的p1,lngA-i相当于p2

·16 ·

If IfPrime (i) And IfPrime (lngA - i) Then …判断i与lngA – i是否都是素数strTemp = lngA & "=" & i & "+" & lngA – i …把两个素数变成字符串

List1.AddItem strTemp …把素数对加入到列表框中

intPrimes = intPrimes + 1 …统计素数对的数目

End If

Next

Label2.Caption = "所有满足条件的素数和如下列表共" & intPrimes & "个" End Sub

Private Sub Command2_Click()

Unload Me

End Sub

Function IfPrime (ByVal n As Long) As Boolean

'判断一个长整型数是否为素数

Dim i As Long, m As Long

m = Sqr(n + 1)

For i = 3 To m

If n Mod i = 0 Then

Exit For …通过这里退出For循环说明n能够整除i,即n不是素数End If

Next

If i > m Then …当i > m时说明上面的For循环退出不是通过Exit For IfPrime = True …是素数

Else …说明上面的For循环是通过Exit For退出的

IfPrime = False … 不是素数

End If

End Function

属性设置如表7-2-7所示

表7-2-7 哥德巴赫猜想窗体属性设置

·17 ·

· 18 ·

6 *方程求根

在数学中我们知道,对有些代数方程可以利用公式求解,而有些则不行,即没有一般的代数解。但这些无公式解的方程我们可以利用数值迭代方法。常用的有效迭代方法有牛顿切线法、二分法、弦截法等。我们这里介绍牛顿法。(见图7-2-14)

牛顿法基本思想: 1) 任选一个x 1。 2) 通过x 1求出f(x 1)。

3) 通过f(x 1)作f(x)的切线,交x 轴于x 2。 可以用公式求出x 2。 由于 2

111)

()('x x x f x f -=

)

(')

(1112x f x f x x -

= 4) 通过x 2求出f(x 2)。

5) 通过f(x 2)作f(x)的切线,交x 轴于x 3。

6) 通过x 3求出f(x 3),……一直求下去,得到牛顿迭代公式为

)

(')

(1n n n n x f x f x x -

=+ 当两次求出的根之差ε≤-+||1n n x x ,则x n+1就是所求方程根的近似值。 【例7.20】求013 x 5 - x 4 - x 3)(2

3

=+=x F 的根。(保留6位有效数字) 程序如下:

Private Sub Form_Click()

Dim x0 As Single, x1 As Single

x0 = InputBox("请输入初值x0:") '由用户输入初值 x1 = x0

图7-2-14 牛顿迭代公式

· 19 ·

Do x0 = x1

x1 = x0 - fx(x0) / f1x(x0) '分别调用函数f(x)和其导数f'(x) Loop While Abs(x1 - x0) > 0.000001 Print "x="; x1 End Sub

Function fx(x As Single) As Single …fx 表示f(x)函数

fx = 3 * x * x * x - 4 * x * x - 5 * x + 13

End Function

Function f1x(x As Single) As Single …f1x 作为f(x)的导数函数 f1x = 9 * x * x - 8 * x - 5 End Function

分析:在上面的程序中,用了直到型循环Do…Loop Whi le, 这种循环是先执行循环体,然后再判断,所以循环体至少要做一次。另外,该循环结束的条件是Loop While 后面的条件不成立,我们这里是当x1与x0的距离小于10-6,相当于ε≤-+||1n n x x 。

还有,上述程序对任何函数都适用,只需对定义的函数f(x)作一下改动即可,当然f(x)的导函数f?(x)也要自己计算后也改动一下。通过运行上面的程序可以看到,无论输入初值是什么,最终所得的结果总是一样,不过可以体会到求解的速度是不同的。

·20 ·

相关主题