繰り返し
for文
Go言語で繰り返し処理を行うには、for文を使います。
package mainimport "fmt"func main() { for i := 0; i < 5; i++ { fmt.Println(i + "回目") }}このプログラムは、0から4までの数字を出力します。
for文は、以下の構造になっています。
for 初期化; 条件; 更新 { // 処理}for文は、初期化、条件、更新の3つの要素から構成されます。
- 初期化ステートメント: ループの最初に1度だけ実行される処理
- 上の例では、繰り返しの回数を覚えるカウンタとして
iを0を初期値として初期化しています。
- 上の例では、繰り返しの回数を覚えるカウンタとして
- 条件式: ループを続行するかどうかを判定する条件
- if文と同様に、条件が
trueの場合にループを続行します。 - 上の例では、
iが5未満の場合にループを続行します。
- if文と同様に、条件が
- 後処理ステートメント: 繰り返しごとに実行される処理
- 上の例では、それぞれの繰り返しごとに
iを1ずつ増やしています。 for文は、条件がfalseになるまで繰り返し処理を行います。
- 上の例では、それぞれの繰り返しごとに
後処理ステートメントで用いる命令について
i++は、iを1増やす命令です。
i--は、iを1減らす命令です。
i += 2は、iに2を足す命令です。
i -= 2は、iから2を引く命令です。
break, continue
for文の中で、break文を使うと、ループを抜けることができます。
package mainimport "fmt"func main() { for i := 0; i < 5; i++ { if i == 3 { break } fmt.Println(i) }}このプログラムは、0から2までの数字を出力します。
for文の中で、continue文を使うと、その繰り返しをスキップして次の繰り返しに進みます。
package mainimport "fmt"func main() { for i := 0; i < 5; i++ { if i == 3 { continue } fmt.Println(i) }}このプログラムは、0から4までの数字を出力しますが、3だけ出力されません。
無限ループ
for文の条件式を省略すると、無限ループになります。
package mainimport "fmt"func main() { for { fmt.Println("無限ループ") }}演習
- (ex01-5.go)
0から30までの数字を出力するプログラムを書いてください。
package mainimport "fmt"func main() { // ここにコードを書いてください}- (ex01-6.go) 以下の要件を満たすプログラムを作成してください。
- xが3で割り切れる時、「Fizz」を出力する。
- xが5で割り切れる時、「Buzz」を出力する。
- xが3でも5でも割り切れる時、「FizzBuzz」を出力する。
- 上記以外の数値の場合、渡された数値をそのまま出力する。
package mainimport "fmt"func main() { for x := 1; x <= 100; x++ { // ここにコードを書く }}- (ex01-7.go) ニュートン法による平方根の近似値計算 コンピュータは通常ループを使って平方根を計算します。 ループを使った簡単な練習として、平方根の計算を実装してみましょう。 数値 x が与えられたときに z² が最も x に近い数値 z を求めたいと思います。 いくつかの z を推測することから始めて、z² がどれほど x に近づいているかに応じて z を調整できます。
z -= (z*z - x) / (2*z)実際の平方根に近い答えになるまでこの調整を繰り返すことによって、推測はより良いものなります。 まず計算を 10 回繰り返してそれぞれの z を表示します。 x (1, 2, 3, …) のさまざまな値に対する答えがどれほど近似し、 推測が速くなるかを確認してください。
package mainimport ( "fmt" "math")func main() { x := 2.0 z := 1.0 for { // 条件式を書く z -= (z*z - x) / (2*z) } fmt.Println(z) fmt.Println(math.Sqrt(x))}次に値が変化しなくなった (もしくはごくわずかな変化しかしなくなった) 場合にループを停止させます。 それが 10 回よりも多いか少ないかを確認してください。 x や x/2 のように他の初期推測の値を z に与えてみてください。