网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月18日漏签0天
vb吧 关注:156,058贴子:1,166,240
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 9回复贴,共1页
<<返回vb吧
>0< 加载中...

急!请帮我看看这个排序~

  • 只看楼主
  • 收藏

  • 回复
  • 水墨_女孩
  • 求过二级
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
题目是这样的,先看下面那个图~
A B C D…是代表课程名称
1001 1002…是代表学号
对应着A到F的是6门课程的成绩
最后1列是总分

要求把总分降序排列,要用选择法
输出排序后的每个学生的N门课程成绩和总分
注意,输出的时候,不只总分的摆放顺序要变,相应的学号和相应的各科成绩的顺序也要跟着变
像这样~
   A  B  C  D  E  F
1010 84    94    95    78    62    94   507
1002  77    94    80    89    87    74   501
…
等着交,请尽快帮帮我,谢谢~~~‘




  • 水墨_女孩
  • 求过二级
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
先把前半段的代码贴出来~
Private Sub Form_Click()
 Const m = 10, n = 6
 Dim data(m, n + 1) As Integer, i%, j%, k%, temp%
 Randomize Timer
 For i = 1 To m
 data(i, 0) = 1000 + i
 'Print data(i, 0)
 Next i
 For i = 1 To n
 data(0, i) = i + Asc("A") - 1
 Print Tab(8 * i); Chr(data(o, i));
 Next i
 Print
 For i = 1 To m
 For j = 1 To n
 data(i, j) = 60 + 40 * Rnd
 'Print Spc(4); data(i, j),
 Next j
 'Print
 Next i
 
 For i = 1 To m
 For j = 1 To n
 data(i, n + 1) = data(i, n + 1) + data(i, j)
 'Print data(i, n + 1);
 'Print
 Next j
 Next i
 
 For i = 1 To m
 For j = 0 To n + 1
 Print Tab(8 * j); data(i, j);
 Next j
 Print
 Next i

End Sub


2025-12-18 11:36:50
广告
不感兴趣
开通SVIP免广告
  • zfm634
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看不懂你在说什么?
重打一下你的要求.


  • 水墨_女孩
  • 求过二级
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
总分降序排列,要用选择法
输出排序后的每个学生的N门课程成绩和总分


  • zfm634
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你可以先按总分排一下,把它所对应的行值赋给一个数组,然后从下到下按数组里的值print原来行值, 就可以.
我忘了选择法怎么写的了,帮不了你了,书上应该有写法.


  • 水墨_女孩
  • 求过二级
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我连只排总分都成问题~~~
排了半天排不


  • 218.19.125.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
'这个是选择排序得vb描述!
Private Sub SelectionSort(A() As Long, ByVal N As Long)
 Dim Last, L As Long
 For Last = N - 1 To 1 Step -1
 L = IndexofLargest(A, Last + 1)
 Call Swep(A(L), A(Last))
 Next
End Sub
Private Function IndexofLargest(A() As Long, ByVal size As Long) As Long
 Dim IndexSoFar As Long
 IndexSoFar = 0
 Dim CurrentIndex As Long
 For CurrentIndex = 1 To size - 1
 If A(CurrentIndex) < A(IndexSoFar) Then
 IndexSoFar = CurrentIndex
 End If
 Next
 IndexofLargest = IndexSoFar
End Function
Private Sub Swep(x As Long, y As Long)
 Dim Temp As Long
 Temp = x
 x = y
 y = Temp
End Sub
'使用方法"
' Const N As Long = 4
' Dim B(N) As Long
' B(0) = 64
' B(1) = 234
' B(2) = 567
' B(3) = 75
' Call SelectionSort(B, 4)
' Dim I As Long
' For I = 0 To 3
' Debug.Print B(I)
' Next


  • 水墨_女孩
  • 求过二级
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
汗~~~`看不太懂哦~
谢谢楼上


2025-12-18 11:30:50
广告
不感兴趣
开通SVIP免广告
  • 水墨_女孩
  • 求过二级
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
搞定了~
贴上来给其他同胞看看~
Private Sub Form_Click()
 Const m = 10, n = 6
 Dim data(m, n + 1) As Integer, i%, j%, k%, t%
 Randomize Timer
 For i = 1 To m
 data(i, 0) = 1000 + i
 Next i
 For i = 1 To n
 data(0, i) = i + Asc("A") - 1
 Next i
 
 For i = 1 To m
 For j = 1 To n
 data(i, j) = 60 + 40 * Rnd
 Next j
 Next i
 
 For i = 1 To m
 For j = 1 To n
 data(i, n + 1) = data(i, n + 1) + data(i, j)
 Next j
 Next i
 
 For i = 1 To n
 Print Tab(8 * i + 1); Chr(data(0, i));
 Next i
 Print
 
 For i = 1 To m
 For j = 0 To n + 1
 Print Tab(8 * j); data(i, j);
 Next j
 Print
 Next i

For i = 1 To 80
 Print "-";
Next i
Print

For i = 1 To 9
 For j = i + 1 To 10
 If data(i, n + 1) < data(j, n + 1) Then
 For k = 0 To n + 1
 t = data(i, k)
 data(i, k) = data(j, k)
 data(j, k) = t
 Next k
 End If
 Next j
Next i


 For i = 1 To n
 Print Tab(8 * i + 1); Chr(data(0, i));
 Next i
 Print
 
For i = 1 To m
 For j = 0 To n + 1
 Print Tab(8 * j); data(i, j);
 Next j
 Print
 Next i
End Sub


  • xiaoyufen
  • 子类化
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
总感觉这段代码好长,定义两个数组,生成成绩时,直接判断大小
还有就是最好把窗口的autoredraw设为true


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 9回复贴,共1页
<<返回vb吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示