vb任意输入3个整数,按照由小到大排序输出。

我编的很繁琐,而且错了,出不来,告诉我哪里错了并且给我一个简洁的编程吧
Private Sub Command1_Click()
Dim a As Single, b As Single, c As Single
a = Text1.Text
b = Text2.Text
c = Text3.Text
If a > b > c Then
Text1.Text = a
Text2.Text = b
Text3.Text = c
ElseIf a > c > b Then
Text1.Text = a
Text2.Text = c
Text3.Text = b
ElseIf b > a > c Then
Text1.Text = b
Text2.Text = a
Text3.Text = c
ElseIf b > c > a Then
Text1.Text = b
Text2.Text = c
Text3.Text = a
ElseIf c > a > b Then
Text1.Text = c
Text2.Text = a
Text3.Text = b
ElseIf c > b > a Then
Text1.Text = a
Text2.Text = b
Text3.Text = a
End If

用户的这一行 If a > b > c Then是错误的,任何一门语言都是按照运算符优先级从左至右依次计算得出结果的,显然两个>运算符优先级是相同的,所以从左至右依次算。

可以参考以下代码:

Dim a As Single, b As Single, c As Single

a = Text1.Text

b = Text2.Text

c = Text3.Text

'无外乎就六种情况

'a>b>c

'a>c>b

'b>a>c

'b>c>a

'c>a>b

'c>b>a

If a > b And b > c Then 'a比b大,且b比c大

Text1.Text = c

Text2.Text = b

Text3.Text = a

ElseIf a > c And c > b Then 'a比c大,且c比b大

Text1.Text = b

Text2.Text = c

Text3.Text = a

'下面可以参照以上函数

End If

扩展资料:

VB常用函数

1、Time 

返回系统时钟的当前时间

2、Date 

返回系统时钟的当前日期

3、Now 

返回代表当前日期和时间的编码值,该函数经常用作其它系统时钟函数的参数

4、Hour(Time) 

返回指定时间的小时部分(0到23)

5、Minute(Time) 

返回指定时间的分钟部分(0到59)

6、Second(Time) 

返回指定时间的秒部分(0到59)

7、Day(Date) 

返回月份中的日期数(1到31)

8、Month(Date) 

返回日期中的月份(1到12)

9、Year(Date) 

返回日期中的年度

10、Weekday(Date) 

返回日期中代表一周中的星期几

参考资料来源:百度百科-Visual Basic

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-20

解释一下为什么错了吧!

看这一行 If a > b > c Then。

任何一门语言都是按照运算符优先级从左至右依次计算得出结果的。

显然两个 > 运算符优先级是相同的,所以从左至右依次算。

先算 a > b,如果 a 真的比 b 大,那么得出结果 True;否则得出 False。

再算 True/False > c,一个是布尔值,一个是单精度浮点,当然不能比较。

就好像算 3 + 4 + 5,是先算 3 + 4 = 7,再算 7 + 5 = 12 一样,计算机很笨的,只能依次运算。

 

Dim a As Single, b As Single, c As Single
a = Text1.Text
b = Text2.Text
c = Text3.Text
 
'无外乎就六种情况
'a>b>c
'a>c>b
'b>a>c
'b>c>a
'c>a>b
'c>b>a
 
If a > b And b > c Then 'a比b大,且b比c大
   Text1.Text = c
   Text2.Text = b
   Text3.Text = a
ElseIf a > c And c > b Then 'a比c大,且c比b大
   Text1.Text = b
   Text2.Text = c
   Text3.Text = a
'下面类似,不写了
End If

 

P.S. 楼下的利用了中间变量 t,通过冒泡排序来进行的运算,也很简单。

第2个回答  2013-10-21

任何程序设计语言都没有类似 a > b > c 这样的表达式的,必须拆分为两部分: a > b And b > c


你的代码可以简化为:

Private Sub Command1_Click()
Dim a As Single, b As Single, c As Single, k As Single
a = Text1.Text
b = Text2.Text
c = Text3.Text
If a > b Then k = a: a = b: b = k
If b > c Then k = b: b = c: c = k
If a > b Then k = a: a = b: b = k
Text1.Text = a
Text2.Text = b
Text3.Text = c
End Sub

第3个回答  2013-10-21
方法1
Private Sub Command1_Click()
Dim N(2) As Long
Dim I As Long, J As Long, T As Long
N(0) = CLng(Text1.Text): N(1) = CLng(Text2.Text): N(2) = CLng(Text3.Text)
For I = 0 To 1
For J = I + 1 To 2
If N(I) > N(J) Then
T = N(I): N(I) = N(J): N(J) = T
End If
Next
Next
Text1.Text = N(0): Text2.Text = N(1): Text3.Text = N(2)
End Sub

方法2
Private Sub Command2_Click()
Dim B(2) As Object
Dim I As Long, J As Long, T As String
Set B(0) = Text1: Set B(1) = Text2: Set B(2) = Text3
For I = 0 To 1
For J = I + 1 To 2
If CLng(B(I).Text) > CLng(B(J).Text) Then
T = B(I).Text: B(I).Text = B(J).Text: B(J).Text = T
End If
Next
Next
End Sub
第4个回答  推荐于2018-03-20
Private Sub Command1_Click()
Dim a As Single, b As Single, c As Single,t as single
a = val(Text1.Text)
b = Teval(xt2.Text)
c = val(Text3.Text)
If a > b Then t=b:b=a:a=t
If a > c Then t=c:c=a:a=t
If b > c Then t=c:c=b:b=t

Text1.Text = a
Text2.Text = b
Text3.Text = c
end sub追问

看不懂teval和:。。。。

追答

val 是将文本转换成数字
判断大小只要这样3句就ok
原则:a放最小数
If a > b Then t=b:b=a:a=t a大于b,就a b交换, a就是小的值,b是大的值,t是过渡数
If a > c Then t=c:c=a:a=t 如果 a值还是大于c,那么c最小,把他换给a,a最小
If b > c Then t=c:c=b:b=t 经过2个交换b c都是大数,在比较他们大小,大的给c,b第二大

本回答被提问者和网友采纳
相似回答