習(xí)題四
第1,3,5,8題答案在教材中找。
2. 賦值語句的錯(cuò)誤
(1)10x 不能做變量名。
上機(jī)驗(yàn)證結(jié)果:VB將10識別為行號,x = Sin(x) + y是為變量x賦值。故無語法錯(cuò)誤。
(2)Sqr函數(shù)的參數(shù)為負(fù)數(shù)。
上機(jī)驗(yàn)證結(jié)果:“無效的過程調(diào)用或參數(shù)”
(3)賦值號左邊不是變量名。
上機(jī)驗(yàn)證結(jié)果:“缺少子程序、函數(shù)或?qū)傩浴?br/> (4)除數(shù)為0
上機(jī)驗(yàn)證結(jié)果:“溢出”。
4. [答案略]
說明:小數(shù)位可以使用四舍五入函數(shù)Round或輸出格式函數(shù)Format。例如Round(x, 2)和Format(x, “0.00”)均可使結(jié)果只保留兩位小數(shù)。但如果四舍五入后要進(jìn)行數(shù)值運(yùn)算,則使用Round函數(shù),例如z=Round(x,2)+Round(y,2)。而Format函數(shù)通常只用于輸出格式設(shè)置。
6.指出錯(cuò)誤
(1)“≥”應(yīng)改為“>=”,前者是中文字符,不具有運(yùn)算功能。
(2)“10<x<20”應(yīng)改為“10<x And x<20”,否則運(yùn)行結(jié)果錯(cuò)誤。
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函數(shù)
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. 計(jì)算循環(huán)次數(shù)
(1) 6
(2)19
(3)0
(4)死循環(huán)直至溢出
10. 40號語句執(zhí)行 4次;第50 號語句執(zhí)行12次;
執(zhí)行第90號語句輸出的結(jié)果是: 13,0,2
說明:該程序?yàn)榍短籽h(huán),其中外循環(huán)由j值變化(1,4,7,10)控制執(zhí)行4次,當(dāng)j值為13時(shí)結(jié)束循環(huán);內(nèi)循環(huán)由k值變化(6,4,2)控制執(zhí)行3次,當(dāng)k值為0時(shí)結(jié)束循環(huán)。第40 行是外循環(huán)的循環(huán)體,故執(zhí)行4次;第50 行是內(nèi)循環(huán)的循環(huán)體,故執(zhí)行4*3=12次。
11. 可以定一個(gè)較大的循環(huán)次數(shù),在循環(huán)體中根據(jù)條件用Exit For退出。
但這種情況通常用Do While循環(huán)控制。
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的倍數(shù)有"; n3; "個(gè)"
Print "1-100中7的倍數(shù)有"; n7; "個(gè)"
(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”。該程序功能是將十進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制。
說明:要理解該程序需要了解數(shù)制轉(zhuǎn)換的計(jì)算方法(有興趣者參看百度百科http://baike.baidu.com/view/1426817.htm)。48是字符"0"的ASCII碼。
14. 運(yùn)行時(shí)輸出 22 484
該程序功能是求x和y最大公約數(shù)和最小公倍數(shù)。
說明:此算法稱為“輾轉(zhuǎn)相減法”??蓪φ绽?.17的輾轉(zhuǎn)相除(輾轉(zhuǎn)求余)法。
15.[50,100]間的20個(gè)隨機(jī)數(shù),求最大值、最小值、平均值。
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