读书人

恳请前辈学长们指点VB有关问题

发布时间: 2012-02-28 13:06:34 作者: rapoo

恳请前辈学长们指点VB问题
小弟上次发帖至今,VB已有成长,现在作业又碰到个问题,请学长们指点程序哪里有错,题目如下:

随机产生20个学生的计算机课程的成绩,并显示。统计各分数段人数,即0~59,60~69,70~79,80~89,90~100,并显示结果。
小弟写的程序如下:

Private Sub Command1_Click()
Dim a%(20), s%(5 To 9), i%, j%, k%
Randomize
For i = 1 To 20
a(i) = Int(Rnd * 100 + 1)
k = k + 1
Print a(i);
If k Mod 10 = 0 Then Print j = a(i) \ 10
Select Case j
Case 0 To 5
s(5) = s(5) + 1
Case 6
s(6) = s(6) + 1
Case 7
s(7) = s(7) + 1
Case 8
s(8) = s(8) + 1
Case 9
s(9) = s(9) + 1
End Select
Next i
Print "不及格: "; s(5); "及格: "; s(6)
Print "中: "; s(7); "良: "; s(8); "优 "; s(9)
End Sub

运行后结果为20个成绩全部不及格。。。。
也就是不及格20,及格0,中0,良0,优0
请前辈们指点下,感谢了!

[解决办法]
问题出在
If k Mod 10 = 0 Then Print j = a(i) \ 10
这里

不明白你这样有什么用?
if 语句只有在K=10和20的时候管用
则j只有在10次循环以后才有效
另外:
Print j = a(i) \ 10
有问题,不能print的时候赋值,系统会当成比较运算,结果是boolean值
应该j = a(i) \ 10
print j


其实,没必要打印j,就给j赋值就可以了
然后去select case j
如果为了换行,也没必要打印j吧?

[解决办法]
什么s(5),s(6)的,什么意思。
dim score(19) as integer
dim i ,k ,ok,well,better,best as integer

for i=0 to 19
randomize
score(i)=rnd*100+1
next

for i=0 to 19
k=score(i)
select case k
case 0 to 59
ok=ok+1
case 60 to 70
well=well+1
case 70 to 80
better=better+1
case else
best=best+1
end select
next
debug.print "及格: " & ok & "--中等: " & well & "--良好: " & better & "--优秀: " & best


读书人网 >VB

热点推荐