习题四
第1,3,5,8题答案在教材中找。
2. 赋值语句的错误
(1)10x 不能做变量名。
上机验证结果:VB将10识别为行号,x = Sin(x) + y是为变量x赋值。故无语法错误。
(2)Sqr函数的参数为负数。
上机验证结果:“无效的过程调用或参数”
(3)赋值号左边不是变量名。
上机验证结果:“缺少子程序、函数或属性”
(4)除数为0
上机验证结果:“溢出”。
4. [答案略]
说明:小数位可以使用四舍五入函数Round或输出格式函数Format。例如Round(x, 2)和Format(x, “0.00”)均可使结果只保留两位小数。但如果四舍五入后要进行数值运算,则使用Round函数,例如z=Round(x,2)+Round(y,2)。而Format函数通常只用于输出格式设置。
6.指出错误
(1)“≥”应改为“>=”,前者是中文字符,不具有运算功能。
(2)“10<x<20”应改为“10<x And x<20”,否则运行结果错误。
7.写条件语句
(1)
Dim c As String
c = InputBox("c=")
If Mid(c, 3, 1) = "C" Then
MsgBox "Yes"
Else
MsgBox "No"
End If
(2)
# 使用If语句
Dim x As Single, y As Single
x = Val(InputBox("x="))
If x > 20 Then
y = x ^ 2 + 3 * x + 2
ElseIf x >= 10 Then
y = Sqr(3 * x) - 2
ElseIf x > 0 Then
y = 1 / x + Abs(x)
End If
Print "y="; y
# 使用Select Case语句
Dim x As Single, y As Single
x = Val(InputBox("x="))
Select Case x
Case Is > 20
y = x ^ 2 + 3 * x + 2
Case Is >= 10
y = Sqr(3 * x) - 2
Case Is > 0
y = 1 / x + Abs(x)
End Select
Print "y="; y
(3)
# 使用If语句
Dim x As Single, y As Single, z As Single, Max As Single
x = Val(InputBox("x="))
y = Val(InputBox("y="))
z = Val(InputBox("z="))
Max = x
If y > Max Then Max = y
If z > Max Then Max = z
Print "Max="; Max
# 使用IIF函数
x = Val(InputBox("x="))
y = Val(InputBox("y="))
z = Val(InputBox("z="))
Max = IIf(x > y, x, y)
Max = IIf(z > Max, z, Max)
Print "Max="; Max
9. 计算循环次数
(1) 6
(2)19
(3)0
(4)死循环直至溢出
10. 40号语句执行 4次;第50 号语句执行12次;
执行第90号语句输出的结果是: 13,0,2
说明:该程序为嵌套循环,其中外循环由j值变化(1,4,7,10)控制执行4次,当j值为13时结束循环;内循环由k值变化(6,4,2)控制执行3次,当k值为0时结束循环。第40 行是外循环的循环体,故执行4次;第50 行是内循环的循环体,故执行4*3=12次。
11. 可以定一个较大的循环次数,在循环体中根据条件用Exit For退出。
但这种情况通常用Do While循环控制。
12. 编程(并非唯一正确答案)
(1)
Dim i As Integer, s As Integer
For i = 1 To 10
s = s + (i + 1) * (2 * i + 1)
Next i
Print "s="; s
(2)
Dim i As Integer, n3 As Integer, n7 As Integer
For i = 1 To 100
If i Mod 3 = 0 Then n3 = n3 + 1
If Int(i / 7) = i / 7 Then n7 = n7 + 1
Next i
Print "1-100中3的倍数有"; n3; "个"
Print "1-100中7的倍数有"; n7; "个"
(3)
Dim s1 As String, s2 As String, i As Integer
s1 = InputBox("Input String")
s2 = ""
For i = 1 To Len(s1)
s2 = Mid(s1, i, 1) + s2
Next i
Print "原序:"; s1
Print "反序:"; s2
或
For i = Len(s1) To 1 Step -1
s2 = s2 + Mid(s1, i, 1)
Next i
13. 输出字符串“10100”。该程序功能是将十进制数转化为二进制。
说明:要理解该程序需要了解数制转换的计算方法(有兴趣者参看百度百科http://baike.baidu.com/view/1426817.htm)。48是字符"0"的ASCII码。
14. 运行时输出 22 484
该程序功能是求x和y最大公约数和最小公倍数。
说明:此算法称为“辗转相减法”。可对照例4.17的辗转相除(辗转求余)法。
15.[50,100]间的20个随机数,求最大值、最小值、平均值。
Dim x As Integer, sum As Integer, aver As Single
Dim n%, i%, max%, mi n%
Randomize
max = 50: min = 100: n = 20
For i = 1 To n
x = Int(Rnd * 51 + 50)
List1.AddItem x
sum = sum + x
If x > max Then max = x
If x < min Then min = x
Next i
aver = sum / n
Print "最大值:"; max, "最小值:"; min, "平均值:"; aver