回 帖 发 新 帖 刷新版面

主题:高手指点一下这段代码哪里出问题了

输入10个同学3门课成绩,求每个同学的总分,并按总分从高到低顺序输出。(每个同学名次),但是指导老师说有问题,哪里出问题了,麻烦各位看一下,谢谢



Private Sub Command1_Click()
Dim a(10, 5)
Print "成绩1"; Tab(6); "成绩"; Tab(12); "成绩"; Tab(18); "总分"; Tab(24); "名次"
  For i = 1 To 3
  a(i, 4) = 0
   For j = 1 To 3
    a(i, j) = Val(InputBox("第" & i & "个同学第" & j & "门成绩"))
    a(i, 4) = a(i, 4) + a(i, j)
   Next j
  Next i
   For i = 1 To 3
    a(i, 5) = 1
     For j = 1 To 3
      If a(j, 4) > a(i, 4) Then
       a(i, 5) = a(i, 5) + 1
      End If
    Next j
    Next i
    For i = 1 To 3
     For j = 1 To 5
         Print Tab((j - 1) * 6); a(i, j);
     Next j
     Print
     Next i
     
    
End Sub

回复列表 (共2个回复)

沙发

Private Sub Command1_Click()
Dim a(10, 5)
Print "成绩1"; Tab(6); "成绩"; Tab(12); "成绩"; Tab(18); "总分"; Tab(24); "名次"
  For i = 1 To 3  //既然是1个同学,为什么i最大是3?
  a(i, 4) = 0    //a(i,4)什么意思?
   For j = 1 To 3
    a(i, j) = Val(InputBox("第" & i & "个同学第" & j & "门成绩"))
    a(i, 4) = a(i, 4) + a(i, j)
   Next j
  Next i
   For i = 1 To 3
    a(i, 5) = 1
     For j = 1 To 3
      If a(j, 4) > a(i, 4) Then
       a(i, 5) = a(i, 5) + 1
      End If
    Next j
    Next i
    For i = 1 To 3
     For j = 1 To 5
         Print Tab((j - 1) * 6); a(i, j);
     Next j
     Print
     Next i
End Sub

电脑测试了一下,貌似没有别的问题。当然,需要处理通过inputbox输入的数据,因为通过inputbox输入的数据有可能含有字符等不允许的内容。

板凳

错误在于:
1、要求是10个同学,但你的循环都是“1 to 3”,后7个同学的资料没有处理。
2、既然只有3门功课,a(i, 4)记录总分,a(i, 5)是什么东西?
3、原题要求按照名次输出,你却按照原序号输出。

修改:
第一步不变,计算总分。
第二步按照总分对数组排序(这个是关键)
第三步输出。可以把名次放到最前面,这里名次也就是顺序号,无需占用数组。

我来回复

您尚未登录,请登录后再回复。点此登录或注册