Go言語の初心者向け問題2-4:ループ処理(for文)を理解しよう
この問題を解くために必要な知識:
レベル1の知識、論理演算子と代入演算子、条件分岐(if-else文)、条件分岐(switch文)、ループ処理(for文)、ラベルとgoto文、無限ループ、配列、スライスとキャパシティ、整列と検索、マップ、ループ処理(range文)、サードパーティパッケージ
<<前の問題 | 問題集Top |
次の問題>> |
Go言語の文法「ループ処理(for文)」とは
ここではループ処理(for文)の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。
ループ処理(for文)とは?
Go言語では、ループ処理にfor
文が用いられます。for
文は、指定された条件が満たされるまで、繰り返し処理を実行するための構文です。
Go言語のfor
文には、以下の3つの主要な形式があります。
- 基本的な形式:初期化、条件、後処理を含む形式
- 条件式のみ:単純に条件式が真の間、繰り返す形式
- 無限ループ:条件式がない形式
Go言語での基本的なfor文の形式
最も一般的な形式のfor
文は以下のようになります。
for 初期化; 条件; 後処理 { // 繰り返したい処理 }
- 初期化:ループが始まる前に一度だけ実行されます。
- 条件:この条件が
true
の間、ループが続きます。false
になるとループが終了します。 - 後処理:各ループが終わるたびに実行される処理です。
実際のコード例
以下は、1から10までの数値を出力するプログラムの例です。
package main import "fmt" func main() { for i := 1; i <= 10; i++ { fmt.Println(i) } }
このコードでは、i
が1から始まり、10になるまで繰り返し処理が実行されます。各繰り返しのたびにi
の値が1ずつ増加し、fmt.Println(i)
で現在のi
の値が表示されます。
他の形式のfor文
条件式のみ
条件式のみのfor
文は、以下のように記述します。
package main import "fmt" func main() { i := 1 for i <= 10 { fmt.Println(i) i++ } }
この形式は、条件がtrue
である限りループを続けます。
無限ループ
無限ループは、終了条件が設定されていないため、ループが永遠に続きます。
package main import "fmt" func main() { for { fmt.Println("無限ループ中...") } }
無限ループから抜けるには、プログラム内でbreak
やreturn
を使って明示的に終了させる必要があります。
まとめ
Go言語のfor
文は、他の言語に比べてもシンプルで柔軟性が高いです。
繰り返し処理をうまく使うことで、複雑なプログラムも効率的に作成できるようになります。
Go練習問題2-4:10回の数値入力で偶数と奇数を判定するプログラムを作成しよう
ユーザーから10回にわたって数値を入力してもらい、それぞれの数値が偶数か奇数かを判定して結果を表示するプルグラムを作成しましょう。
最後に、入力された全ての数値の合計を表示します。
この問題の要件
以下の要件に従ってコードを完成させてください。
- ユーザーに数値を10回入力させること。
- 各数値が偶数か奇数かを判定し、その結果を表示すること。
- 入力された全ての数値の合計を計算し、最後に表示すること。
- 標準入力と出力に
fmt
パッケージを使用すること。 - ループ処理には
for
文を使用すること。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
1番目の整数を入力してください: 4 4は偶数です。 2番目の整数を入力してください: 7 7は奇数です。 3番目の整数を入力してください: 2 2は偶数です。 ... 10番目の整数を入力してください: 9 9は奇数です。 入力された数値の合計は56です。
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
正解のコードは上から順に以下のような構成となっています。
1.package宣言
2.標準ライブラリのインポート
2-1.fmtパッケージのインポート
3.main関数
3-1.合計値を格納するための変数sumを宣言
3-2.ループ処理を行うfor文
3-2-1.整数iの範囲を1から10まで設定し、各ループごとに入力を受け付ける
3-2-2.入力を格納するための変数numberを宣言
3-2-3.ユーザーに整数入力を求め、入力値を取得
3-2-4.if文を使って、入力された整数が偶数か奇数かを判定
3-2-5.判定結果をfmt.Printfで出力
3-2-6.入力された数値を合計値sumに加算
3-3.ループ処理後に合計値sumを出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
package main import ( "fmt" ) func main() { var sum int // 合計値を格納する変数 /* 【穴埋め問題1】 ここにfor文を使って、1から10までの整数をループするコードを書いてください。 */ { var number int fmt.Printf("%d番目の整数を入力してください: ", i) /* 【穴埋め問題2】 ここにfmt.Scanを使用して、入力された整数をnumber変数に格納するコードを書いてください。 */ // 条件分岐:偶数か奇数かを判定する /* 【穴埋め問題3】 ここにif文を使って、numberが偶数か奇数かを判定して、それを表示するコードを書いてください。 */ sum += number // 合計値に加算 } // 最後に、合計値を表示する fmt.Printf("入力された数値の合計は%dです。\n", sum) }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
package main import ( "fmt" // 標準入力と出力を行うためのパッケージをインポート ) func main() { var sum int // 変数sumを定義し、合計値を格納する // ループ処理:10回繰り返す for i := 1; i <= 10; i++ { var number int fmt.Printf("%d番目の整数を入力してください: ", i) // ユーザーに入力を促すメッセージ fmt.Scan(&number) // 入力された値を変数numberに格納 // 条件分岐:偶数か奇数かを判定する if number%2 == 0 { fmt.Printf("%dは偶数です。\n", number) } else { fmt.Printf("%dは奇数です。\n", number) } sum += number // 合計値に現在のnumberを加算 } // 最後に、入力された数値の合計を表示する fmt.Printf("入力された数値の合計は%dです。\n", sum) }
正解コードの解説
このGo言語のプログラムは、for文を使って10回ループを行い、各回でユーザーから入力された数値が偶数か奇数かを判定し、その結果と数値の合計を出力するシンプルなものです。
インポート文
import "fmt"
このプログラムでは、標準パッケージfmt
をインポートしています。fmt
は、文字列のフォーマットや出力を行うための機能を提供します。
main関数
func main() {
main
関数はGoプログラムのエントリーポイントです。プログラムはこの関数から実行を開始します。
変数の宣言
var sum int
ここでは、合計値を保持するための変数sum
を宣言しています。int
型で初期値は0です。
for文(ループ処理)
for i := 1; i <= 10; i++ {
このfor文は、i
が1から10までの間繰り返し処理を行います。i++
はループごとにi
の値を1増やす操作を行います。for
文は、特定の処理を複数回繰り返したい場合に使います。
ユーザー入力の取得
fmt.Printf("%d番目の整数を入力してください: ", i) fmt.Scan(&number)
ユーザーに整数を入力させ、その値をnumber
変数に格納します。fmt.Scan
は標準入力からデータを受け取るために使用します。
条件分岐(偶数・奇数の判定)
if number%2 == 0 { fmt.Printf("%dは偶数です。\n", number) } else { fmt.Printf("%dは奇数です。\n", number) }
if
文を使って、入力されたnumber
が偶数か奇数かを判定しています。%
演算子は剰余を求めるもので、2で割り切れる場合は偶数、そうでない場合は奇数と判定します。
合計の計算と出力
sum += number
各ループで入力された数値をsum
に加算し、最後にその合計を出力します。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。