第7章實作題答案

Q1.寫一程式找出 A、B 兩數中的絕對值較大者。
Ans:

A = Val(InputBox("請輸入A"))
B = Val(InputBox("請輸入B"))

If A < 0 Then AbsA = -A Else AbsA = A
If B < 0 Then AbsB = -B Else AbsB = B
If AbsA = AbsB Then
  MsgBox "絕對值的A=絕對值的B"
ElseIf AbsA > AbsB Then
  MsgBox "A的絕對值比較大"
Else
  MsgBox "B的絕對值比較大"
End If

Q2.寫一程式輸入 A、B、C 三個數值,然後找出最大的數。
Ans:

A = Val(InputBox("請輸入A"))
B = Val(InputBox("請輸入B"))
C = Val(InputBox("請輸入C"))

If A > B And A > C Then MsgBox "A最大"
If B > A And B > C Then MsgBox "B最大"
If C > A And C > B Then MsgBox "C最大"

3.計算 20! = 1×2×3×…×20。
Ans:

Sum = 1
For I = 1 To 20
  Sum = Sum * I
Next
MsgBox Sum

Q4.輸入 N 個數值,然後印出最小的數值。
Ans:

N = InputBox("請輸入N的值")
Small = 999999999
For I = 1 To N
  A = Val(InputBox("請輸入任意數值"))
  If A < Small Then Small = A
Next
MsgBox "最小的為" & Small

Q5.利用 InputBox 連續輸入數值資料,直到輸入值等於 -1 時,方才結束輸入,最後把所有輸入值之中最大的數值列印出來。
Ans:

Big = -999999999
Do
A = Val(InputBox("請輸入任意數值,-1代表停止"))
  If A > Big Then Big = A
Loop Until A = -1
MsgBox "最大的為" & Big

Q6.某班學生人數不詳,欲輸入每一個學生的 VB 成績,當輸入 -1 時表示結束輸入,然後計算全班人數、及格人數、不及格人數、及全班平均分數。
Ans:

I = 0
J = 0
Sum = 0
Do
  A = Val(InputBox("輸入VB分數,-1代表停止"))
  I = I + 1 ' 代表全班人數
  If A >= 60 Then J = J + 1 ' 代表及格人數
  Sum = Sum + A ' 代表總分
Loop Until A = -1
MsgBox "人數" & I - 1 & "及格人數" & J & "不及格人數" & I - 1 - J & "平均" & (Sum + 1) / (I - 1)

Q7. 寫一程式列出 1∼100 之間所有能被 7 整除的整數。(v 註:請使用迴圈執行次數較少的作法。)
Ans:

For i = 7 To 100 Step 7
  S = S & i & ","
Next i
MsgBox S


Q8. 輸出九九乘法表。
Ans:

For j = 1 To 9
  For i = 1 To 9
    S = S & j & "*" & i & "=" & j * i & Chr(13)
  Next i
Next j
MsgBox S

Q9. 一元二次方程式 ax2 + bx + c = 0 的兩個根為:輸入 a、b、c 的值,然後求出兩個根。(註:若b2-4ac < 0,則輸出 "實數根不存在",若b2-4ac = 0,則只輸出一個根)
Ans:

a = Val(InputBox("a = ?"))
b = Val(InputBox("b = ?"))
c = Val(InputBox("c = ?"))
d = b ^ 2 - 4 * a * c
If d < 0 Then
  MsgBox "實數根不存在"
ElseIf d = 0 Then
  MsgBox "x=" & -b / (2 * a)
Else
  MsgBox "x有2個根, 為" & (-b + d) / (2 * a) & ", " & (-b - d) / (2 * a)
End If

Q10. 寫一程式計算:
(1) Sum = 4 + 9 + 13 + … + 99
Ans:

Sum = 0
For i = 4 To 94 Step 9
  Sum = Sum + i
Next i
For i = 9 To 99 Step 9
  Sum = Sum + i
Next i
MsgBox "ANSWER = " & Sum

(2) Sum = 1 * 2 * 3 * … * 20
Ans:
同第3題

(3) Sum = (1-1/2)(1-1/3)(1-1/4)…(1-1/N) (先利用 InputBox 輸入 N)
Ans:

n = Val(InputBox("Input n="))
Sum = 1
For i = 2 To n
  Sum = Sum * (1 - 1 / i)
Next i
MsgBox Sum

Q11. 有 VB 書一本定價 420元,購買時折扣方式如下:
1∼4本 照定價出售
5∼ 9本 照定價打 9 折
10∼49本 照定價打 8 折
50 本以上 照定價打 7 折
利用 InputBox 輸入購買本數,然後計算總價。
Ans:

n = Val(InputBox("Input n="))
Select Case n
Case 1 To 4
  Sum = 420 * n
Case 5 To 9
  Sum = 420 * n * 0.9
Case 10 To 49
  Sum = 420 * n * 0.8
Case Is >= 50
  Sum = 420 * n * 0.7
End Select
MsgBox "總共" & Sum & "元"

Q12.假設個人綜合所得稅係採用累進課稅方式,如下:
所得 30 萬以內 課 6%
所得 30∼80 萬 課 13%
所得 80∼150 萬 課 21%
所得 150∼300 萬 課 30%
所得 300 萬以上 課 40%
寫一程式輸入某人的所得,然後計算應繳之稅款。
Ans:

n = Val(InputBox("Input 所得"))
Select Case n
Case Is <= 300000
  Sum = n * 0.06
Case 300001 To 800000
  Sum = 300000 * 0.06 + (n - 300000) * 0.13
Case 800001 To 1500000
  Sum = 300000 * 0.06 + 500000 * 0.13 + (n - 800000) * 0.21
Case 1500001 To 3000000
  Sum = 300000 * 0.06 + 500000 * 0.13 + 700000 * 0.21 + (n -1500000) * 0.3
Case Is > 3000000
  Sum = 300000 * 0.06 + 500000 * 0.13 + 700000 * 0.21 + 1500000 *0.3 + (n - 3000000) * 0.4
End Select
MsgBox "稅金共" & Sum & "元"


13. 利用兩層 For-Next 迴圈印出:
(1)
*
**
***
****
*****
Ans:

For j = 1 To 5
  For i = 1 To j
    s = s & "*"
  Next i
  s = s & Chr(13)
Next j

(2)
*****
****
***
**
*