演習 - Go で制御フローを使用する
コーディングの演習をいくつか行って、このモジュールで学習したことを練習します。 これらの演習は複雑なものではなく、次のユニットで解答を確認できます。
まずは自力で演習を解決してみてください。 その後、結果を解答と比較してください。 重要な詳細を忘れた場合は、いつでもモジュールで確認してかまいません。
FizzBuzz プログラムを作成する
まず、1 から 100 までの数を出力するプログラムを作成し、次のように変更します。
- 数が 3 で割り切れる場合は
Fizz
を出力します。 - 数が 5 で割り切れる場合は
Buzz
を出力します。 - 数が 3 と 5 の両方で割り切れる場合は
FizzBuzz
を出力します。 - 前のどのケースとも一致しない場合は、数を出力します。
switch
ステートメントを使用してみてください。
素数を見つける
20 未満のすべての素数を検索するプログラムを記述します。 素数とは、1 より大きく、それ自体と 1 だけで割り切れる任意の数値です。 "割り切れる" とは、除算操作の後に剰余がないという意味です。 ほとんどのプログラミング言語と同様に、Go には除算操作によって剰余が生成されるかどうかを確認する方法が用意されています。 剰余 %
(パーセント記号) 演算子を使用できます。
この演習では、数値が素数かどうかをチェックするように、findprimes
という名前の関数を更新します。 この関数は 1 つの整数引数を持ち、ブール値を返します。 この関数は、剰余を調べることによって、入力値が素数かどうかをテストします。 値が素数である場合、関数は true を返します。
次のコード スニペットを参考にして、??
のすべてのインスタンスを正しい構文に置き換えてください。
package main
import "fmt"
func findprimes(number int) bool {
for i := 2; i ?? number; i ?? {
if number ?? i == ?? {
return false
}
}
if number ?? {
return true
} else {
return false
}
}
func main() {
fmt.Println("Prime numbers less than 20:")
for number := ??; number ?? 20; number++ {
if ?? {
fmt.Printf("%v ", number)
}
}
}
このプログラムは、1 から 20 までの数値をチェックして、素数の場合はその値を出力します。 説明に従って例を変更します。
main
関数で、チェックするすべての数値をループ処理します。 最後の数値を調べた後、ループを終了します。findprimes
関数を呼び出して、数値をチェックします。 関数から true が返された場合は、素数を出力します。findprimes
ループ内で、2 から始めて、カウンターがnumber
値以上になるまで繰り返します。number
が現在のカウンター値で割り切れるかどうかを調べます。 その場合は、ループを終了します。number
が素数の場合は true を返し、それ以外の場合は false を返します。- ヒント: 入力値が 1 の場合を正しく処理します。
数を尋ねて、負の場合はパニックにする
ユーザーに数を尋ねるプログラムを作成します。 次のコード スニペットを出発点として使用します。
package main
import "fmt"
func main() {
val := 0
fmt.Print("Enter number: ")
fmt.Scanf("%d", &val)
fmt.Println("You entered:", val)
}
このプログラムは、数を尋ねてそれを出力します。 例のコードを次のように変更します。
- 繰り返し整数の入力を求めます。 ループの終了条件は、ユーザーが負の数を入力した場合です。
- ユーザーが負の数を入力したら、プログラムをクラッシュさせます。 その後、スタック トレース エラーを出力します。
- 数が 0 の場合は、
0 is neither negative nor positive
と出力します。 数の要求を続けます。 - 数が正の値の場合は、
You entered: X
と出力します (X
は入力された数)。 数の要求を続けます。
ここでは、ユーザーが整数以外の何かを入力する可能性は無視します。