题目:求一位数组中最小数组元素,并将最小值数组元素与数组中第一个元素交换。(26, 43, 61, 87, 33, 19, 37, 59, 76, 69)
我的解答过程:
Private Sub Command1_Click()
Dim a, min%, imin%, t%
a = Array(26, 43, 61, 87, 33, 19, 37, 59, 76, 69)
min = a(0): imin = 0
For i = 1 To UBound(a)
If a(i) < a(0) Then
min = a(i): imim = i
End If
t = a(0): a(0) = a(i): a(i) = a(0)
Next i
For i = 0 To UBound(a)
Print a(i)
Next i
End Sub
书上的解答方法是:
Private Sub Command1_Click()
Dim a, min%, imin%, t%, i%
a = Array(26, 43, 61, 87, 33, 19, 37, 59, 76, 69)
min = a(0): imin = 0
For i = 1 To UBound(a)
If a(i) < min Then
min = a(i): imin = i
End If
Next i
t = a(0): a(0) = a(imin): a(imin) = t
For i = 0 To UBound(a)
Print a(i)
Next i
End Sub
很晕乎,array函数学的不好,排序求最值也学的不太好。知道自己的有错误,大概是与min和a(0)有关。但是,又觉得这样写应该没问题啊。
而且我觉得书上那个应该把t = a(0): a(0) = a(imin): a(imin) = t这一句放在上面的那个循环语句的里面,为什么放外面也对?
求解,谢谢。
1.是不是把For i = 1 To UBound(a)写成For i = LBound To UBound(a)也对?
2.还有为什么明明有十个元素,还要用Ubound表示呢,直接写For i = 1 To 9不就可以了吗?
3.还有a(0)为什么不能写成a(1)
4.是不是把 我做的里面的t = a(0): a(0) = a(i): a(i) =t 这句放到条件语句里面就可以了?
LBound(a) 的值是0,一般从1开始,但是在这里写成0也可以(它多比较一次,与自己比较不会小的)。
确定10个元素的话,确实可以的。
因为“第一个元素”是a(0)而不是a(1)。
不可以的。请注意我写的:
t = a(0): a(0) = a(imin): a(imin) = a(0) ‘比较完成后才能进行交换
For i = 1 To UBound(a)
If a(i) < min Then
min = a(i): imin = i
t = a(0): a(0) = a(i): a(i) = t
End If
Next i
可是这样写(把它放到if then 语句里面),我做出来也对啊,为什么不可以这样写?
那是你碰巧了,瞎猫碰到死老鼠了。你的做法与题目的要求是不符合的。
数组中只有一个数比a(0)小,如你把a(0)修改为96再试试?
恩恩,是的,我搞错了。不过我还是对这一块挺晕乎的,我先记住你跟我说的,以后再慢慢看看自己到底哪里转不过弯去了。谢谢啊O(∩_∩)O~
真的非常谢谢你。
是不是把 我做的里面的t = a(0): a(0) = a(i): a(i) =t 这句放到条件语句里面就可以了?【刚刚提问的时候打错了】
为什么VB 计算结果不对?
A = (1 \/ (2 * N - 1)) * ((-1) ^ (N + 1)) '把这句的N都改成i,这样就符合你要求了。你看对吗?因为你的语句中,i的作用根本没有利用到,我看就是这里错了。S = S + A Next --- 即A = (1 \/ (2 * i - 1)) * ((-1) ^ (i + 1))...
这个排序算法(vb)哪里错??
算法应该没问题。但有两个小细节:第一:Dim a(100), n, x As Integer不够规范,这样定义a和n其实是变体而不是integer类型。改为:Dim a(100) As Integer, n As Integer, x As Integer 较好。第二:a(i) = InputBox("aaaaaaa")当你输入双位数如12,它就把这个12当成文本来处理,如果再...
VB 中c=QBCOLOR (rnd*15+1)哪里错了
这是因为Rnd的返回值是个纯小数(大于等于0,小于1的小数),所以当rnd*15+1的值为15.5以上时,VB会自动进位为16,这样就出错了。其实你的算法本身就有问题,rnd*15的话,怎么算都只有15种颜色,不可能是16种,即使不会出错,也要么没有15这个颜色,要么没有0这个颜色。正确的应该是:QBColor(In...
帮忙看下这段VB代码,错哪里了,谢谢
参数不对 你的算法很奇怪,好像很没道理,你试试这样行不行
在写VB代码时,排从大到小的正整数,为什么说我下标越界了,如何修改?
1、严重错误:<下标越界>,错误点:for j=i+1 to n+1,改正:for j=i+1 to n。2、严重错误:<下标越界>,错误点:for i=0 to n,改正:for i=1 to n。3、普通错误:<算法错误>,错误点:前面排序时的一个for i=1 to n,改正:for i=1 to n-1。4、普通错误:<变量没有声明...
在vb中输入下面的程序,为什么这个曲线出不来?总显示错误。。。
Sqr(b ^ 2 - m ^ 2)这个在循环里会出现负数开平方的问题,你的程序在b ^ 2 - m ^ 2算法上有问题,你可以检查它的算法或Sqr(abs(b ^ 2 - m ^ 2))
vb中求100以内素数的算法,我这样做哪里错了?
n的赋值为0的位置不对 这样就可以了 Private Sub Command1_Click()Dim a%, b%, c%, n%, d%c = 0For a = 2 To 100n = 0 '要在这里赋值0 否则 n只会一直增上去 只会出现一次2 For b = 1 To a d = a Mod b If d = 0 Then n = n + 1 End If Next b If...
VB程序中的错误分为哪几种
语法错误是指输入的语句不符合VB语法规则,如将if错输成fi等等。这类错误在编译时系统会自动检测出来,并提示错误发生的位置等信息,所以这种错误又称编译期错误。逻辑错误是指我们输入的语法符合VB语法规则,但程序达不到我们要求的功能。例如我们编写了一个加法程序,运行后却发现程序不能完成两数相加的...
vb阶乘代码 我哪里错了 (结果说我n1 = n1 * i这一步溢出)
代码没错,只是你的计算结果远远超过32位操作系统的承受能力了,从1连续乘到170就有300多位数了,到100000的话,估计如果把数字按米粒大小排起来的话能绕太阳好几圈了。而且如果用Double的话,只有前15位数是精确的,也就是说即使能计算到300位,后面的285位数也都是0,这有意义吗?
用VB设计的四舍五入为什么有错呢? 要求输入数字的第三位小数四舍五入...
这种算法是没错,主要是变量的计算精度有问题导致的。由于x是Single(单精度),当它与0.005(这里默认是双精度double)相加时,要转换成双精度,转换后并不能与原来值相等( 0.264999985694885 )所以得到的结果就不是0.27了。如果将0.005也写成单精度,就不会有这个问题。如:a = 0.01 *int(...