100分高分求助vb问题,x=sum/m总是溢出, 哪错了啊?

OptionBase1Constnum=10Dima(num)AsSingle,b(num)AsSingle,c(num)AsSingleDimxAsSingle,mAs... Option Base 1
Const num = 10
Dim a(num) As Single, b(num) As Single, c(num) As Single
Dim x As Single, m As Single
Dim sum As Single, i As Integer

Private Sub Command1_Click()

sum = 0
For i = 1 To num
c(i) = ((a(i) - 60) / 10 + 1) * b(i)
sum = sum + c(i)
Next i

x = sum / m
Print "Text00.Text"; x
End Sub

Private Sub Form_Load()

a(1) = Val("Text1.Text") '各科成绩
a(2) = Val("Text2.Text")
a(3) = Val("Text3.Text")
a(4) = Val("Text4.Text")
a(5) = Val("Text5.Text")
a(6) = Val("Text6.Text")
a(7) = Val("Text7.Text")
a(8) = Val("Text8.Text")
a(9) = Val("Text9.Text")
a(10) = Val("Text10.Text")
b(1) = Val("Text11.Text") '各科学分
b(2) = Val("Text12.Text")
b(3) = Val("Text13.Text")
b(4) = Val("Text14.Text")
b(5) = Val("Text15.Text")
b(6) = Val("Text16.Text")
b(7) = Val("Text17.Text")
b(8) = Val("Text18.Text")
b(9) = Val("Text19.Text")
b(10) = Val("Text20.Text")
m = Val(Text0.Text) '总学分
End Sub
题目哈: [(单科成绩-60)/10+1]*单科学分
求和后再除以总学分
展开
 我来答
newkedison
2008-07-13 · TA获得超过734个赞
知道小有建树答主
回答量:234
采纳率:0%
帮助的人:437万
展开全部
下面是根据你的程序改起来的,改动的地方就是把Form_load函数中的40个双引号去掉
Option Explicit

Option Base 1
Const num = 10
Dim a(num) As Single, b(num) As Single, c(num) As Single
Dim x As Single, m As Single
Dim sum As Single, i As Integer

Private Sub Command1_Click()
sum = 0
For i = 1 To num
c(i) = ((a(i) - 60) / 10 + 1) * b(i)
sum = sum + c(i)
Next i

x = sum / m
Print "Text00.Text"; x
End Sub

Private Sub Form_Load()
a(1) = Val(Text1.Text) '各科成绩
a(2) = Val(Text2.Text)
a(3) = Val(Text3.Text)
a(4) = Val(Text4.Text)
a(5) = Val(Text5.Text)
a(6) = Val(Text6.Text)
a(7) = Val(Text7.Text)
a(8) = Val(Text8.Text)
a(9) = Val(Text9.Text)
a(10) = Val(Text10.Text)
b(1) = Val(Text11.Text) '各科学分
b(2) = Val(Text12.Text)
b(3) = Val(Text13.Text)
b(4) = Val(Text14.Text)
b(5) = Val(Text15.Text)
b(6) = Val(Text16.Text)
b(7) = Val(Text17.Text)
b(8) = Val(Text18.Text)
b(9) = Val(Text19.Text)
b(10) = Val(Text20.Text)
m = Val(Text0.Text) '总学分
End Sub

============================================
下面是我给你写的程序,你可以和你的程序比较一下孰优孰劣
窗体上左上角放一个TextBox和右边放一个按钮就可以了,不需要象你那样放21个TextBox
Option Explicit

Option Base 1
Const Total = 10

Private Sub Command1_Click()
Dim Sum As Single, Score(Total) As Single, Credit(Total) As Single
Dim i As Integer, SumCredit As Integer
For i = 1 To Total
Score(i) = (Val(Text1(i - 1).Text) - 60) / 10 + 1
Credit(i) = Val(Text1(i + Total - 1).Text)
Sum = Sum + Score(i) * Credit(i)
SumCredit = SumCredit + Credit(i)
Next i

MsgBox "平均学分:" & Format(Sum / SumCredit, "0.00")
End Sub

Private Sub Form_Load()
Dim i As Integer
Text1(0).Text = 90
For i = 0 To Total - 1
If i <> 0 Then
Load Text1(i)
Text1(i).Left = Text1(0).Left
Text1(i).Top = Text1(i - 1).Top + Text1(0).Height + 100
Text1(i).Visible = True
Text1(i).Text = Int(Rnd * 60) + 35
End If
Load Text1(i + Total)
Text1(i + Total).Left = Text1(0).Left + Text1(0).Width + 400
Text1(i + Total).Top = Text1(i).Top
Text1(i + Total).Visible = True
Text1(i + Total).Text = Int(Rnd * 5) + 1
Next
End Sub
=========================================
我觉得,你的程序的一个闪光点就是
c(i) = ((a(i) - 60) / 10 + 1) * b(i)
这一句.如果这句是你自己写的,那证明你还是很有想法的
dl_会飞的青蛙
2008-07-13 · TA获得超过2458个赞
知道大有可为答主
回答量:3294
采纳率:0%
帮助的人:3588万
展开全部
把X定义成DOUBLE型的 做合计的时候 一般都要用大一的类型 要不很容易溢出的

还有就是当有2个变量相除的时候 一定要判断一下被除数是否为0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leess1122
2008-07-13
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
我给你改一下吧:
Option Base 1
Const num = 10
Dim a(num) As Single, b(num) As Single, c(num) As Single
Dim x As Single, m As Single
Dim sum As Single, i As Integer

Private Sub Command1_Click()
sum = 0
m=0
For i = 1 To num
c(i) = ((a(i) - 60) / 10 + 1) * b(i)
sum = sum + c(i)
m=m+b(i)
Next i

if m>0
x = sum / m
Print "Text00.Text"; x
end if
End Sub

Private Sub Form_Load()

a(1) = Val(Text1.Text) '各科成绩
a(2) = Val(Text2.Text)
a(3) = Val(Text3.Text)
a(4) = Val(Text4.Text)
a(5) = Val(Text5.Text)
a(6) = Val(Text6.Text)
a(7) = Val(Text7.Text)
a(8) = Val(Text8.Text)
a(9) = Val(Text9.Text)
a(10) = Val(Text10.Text)
b(1) = Val(Text11.Text) '各科学分
b(2) = Val(Text12.Text)
b(3) = Val(Text13.Text)
b(4) = Val(Text14.Text)
b(5) = Val(Text15.Text)
b(6) = Val(Text16.Text)
b(7) = Val(Text17.Text)
b(8) = Val(Text18.Text)
b(9) = Val(Text19.Text)
b(10) = Val(Text20.Text)
End Sub

多看msdn,可以解决很多问题
语法不规范,思维不严谨
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Worsley_Barbar
2008-07-13 · TA获得超过313个赞
知道小有建树答主
回答量:382
采纳率:0%
帮助的人:0
展开全部
你的问题是x = sum / m=0/0了,窗体加载时,Text1.Text内可能没有值为0(或前面含有空格),A、B数组为0(因为你多打了引号,是字符串Text1.Text所含数字,当然是0),
1、a(1) = Val("Text1.Text") 等语句改成
a(1) = Val(trim(Text1.Text)) '各科成绩
2、Form_Load内语句改到Command1_Click() 中。
3、建议TEXT控件用控件数组。否则太麻烦了。
给你做了个代码供参考:(画一个TEXT1控件,index属性设为1,在TEXT1下面画一个TEXT2,INDEX设为1,在TEXT2下面画TEXT3、TEXT4,INDEX属性不设(为空),下面画COMMAND1控件,说明的显示(如label1.caption="总学分")用label控件,自己看位置加吧)(按题目来说,好像可以不用输入总学分,但你做了,所以我也做了,不过是自己计算的,如果不符合要求,删掉相关代码)
Option Base 1
Const num = 10

Private Sub Command1_Click()
Dim sum As Single, i As Integer
Dim x As Single, m As Single, c As Single
Dim a(1 To num) As Single, b(1 To num) As Single
For i = 1 To num
a(i) = Val(Text1(i))
b(i) = Val(Text2(i))
Next i
For i = 1 To num
c = ((a(i) - 60) / 10 + 1) * b(i)
sum = sum + c
m = m + b(i)
Next i
Text3 = m
If m = 0 Then MsgBox "总学分为0!": Exit Sub
x = sum / m
Text4 = x
End Sub

Private Sub Form_Load()
'这里代码是控件加载和位置处理
Dim i As Long
For i = 2 To num
Load Text1(i)
Text1(i).Left = Text1(i - 1).Left + 10 + Text1(i - 1).Width
Text1(i).Top = Text1(i - 1).Top
Text1(i).Visible = True
Load Text2(i)
Text2(i).Left = Text2(i - 1).Left + 10 + Text2(i - 1).Width
Text2(i).Top = Text2(i - 1).Top
Text2(i).Visible = True
Next i
Me.Width = Text1(num).Left + Text1(num).Width + Text1(1).Left
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lxz1969
2008-07-13 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8524
采纳率:33%
帮助的人:1.2亿
展开全部
因为你的a(1)-a(10),b(1)-b(10)中赋值中多了双引号,所以最终赋值结果都是0,最终造成m=0,并且sum也=0
所以当sum=sum/m时会溢出。解决办法,把刚才说的那些双引号去掉。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大碌棍
2008-07-13 · TA获得超过622个赞
知道小有建树答主
回答量:430
采纳率:0%
帮助的人:300万
展开全部
在"Form_Load"的过程里,m取的是Text0.Text的数值,但Text0.Text本来可能还没有值,所以在"Command1_Click"里调用"x = sum / m"时,除数是0,当然溢出.
另外,程序所有的类似"Val("Text1.Text")"的地方,都不能用引号,否则你将得不到控件里的数值,而只能得到一个字符串的数值.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式