Go言語の初心者向け問題2-☆1:レベル2の文法を総復習しよう
この問題を解くために必要な知識:
レベル1の知識、論理演算子と代入演算子、条件分岐(if-else文)、条件分岐(switch文)、ループ処理(for文)、ラベルとgoto文、無限ループ、配列、スライスとキャパシティ、整列と検索、マップ、ループ処理(range文)
<<前の問題 | 問題集Top |
次の問題>> |
Go練習問題2-☆1:レベル2の文法を総復習しよう
レベル2で学習した全ての文法について、身についているか確認しましょう。
この問題の要件
以下のコードをコピーし、コメントに従って完成させましょう。
package main import ( "fmt" ) func main() { // 論理演算子と代入演算子 /* 【穴埋め問題1】論理演算子と代入演算子 ここに変数aに10、変数bに20を代入し、aがbより小さいかを論理演算子を使って比較するコードを書いてください。 */ // 条件分岐 /* 【穴埋め問題2】条件分岐 ここにaがbより小さい場合に「aはbより小さい」と表示し、そうでない場合は「aはb以上です」と表示するコードを書いてください。 */ // ループ処理 /* 【穴埋め問題3】ループ処理 1から5までの値を順に出力するループ処理を書いてください。 */ // 配列 /* 【穴埋め問題4】配列 ここに整数型の配列を作成し、5つの値(5, 3, 8, 6, 2)を持つ配列を宣言し、その内容を表示するコードを書いてください。 */ // スライスとキャパシティ /* 【穴埋め問題5】スライスとキャパシティ ここに配列から部分スライスを作成し、そのスライスの内容とキャパシティを表示するコードを書いてください。 */ // 整列 /* 【穴埋め問題6】整列 ここにスライスを昇順に並べ替えるコードを書いてください。 */ // 無限ループ /* 【穴埋め問題7】無限ループ ここに無限ループを書き、条件を満たしたらbreakでループを終了するコードを書いてください。 */ // マップ /* 【穴埋め問題8】マップ ここに学生の名前と得点を持つマップを作成し、その内容を表示するコードを書いてください。 */ // マップから検索 /* 【穴埋め問題9】マップから検索 ここにマップから「太郎」の得点を検索して表示するコードを書いてください。存在しない場合は「太郎のデータはありません」と表示するコードも追加してください。 */ // ラベルとgoto文 /* 【穴埋め問題10】ラベルとgoto文 ここにラベルを使って値を繰り返し表示し、条件が満たされたらループを終了するgoto文を含むコードを書いてください。 */ }
*****↓↓正解コードの実行結果の例↓↓*****
a < b は true aはbより小さい ループの値: 1 ループの値: 2 ループの値: 3 ループの値: 4 ループの値: 5 配列の内容: [5 3 8 6 2] スライスの内容:キャパシティ: 4 整列されたスライス: 無限ループの中: 0 無限ループの中: 1 無限ループの中: 2 マップの内容: map[太郎:90 花子:85 次郎:78] 太郎の得点は 90 goto文の例 iの値: 0 iの値: 1 iの値: 2
解答例と解説
この問題の一つの正解例とそのコードの解説を以下に示します。
正解コードの例
例えば以下のようなプログラムが考えられます。
package main import ( "fmt" "sort" ) func main() { // 論理演算子と代入演算子 var a int = 10 var b int = 20 isGreater := a < b // 論理演算子を使って比較 fmt.Println("a < b は", isGreater) // 条件分岐: aとbの比較結果に応じて異なるメッセージを出力 if a < b { fmt.Println("aはbより小さい") } else { fmt.Println("aはb以上です") } // ループ処理: 1から5までの値を出力 for i := 1; i <= 5; i++ { fmt.Println("ループの値:", i) } // 配列の使用例 var array = [5]int{5, 3, 8, 6, 2} fmt.Println("配列の内容:", array) // スライスとキャパシティ: 配列からスライスを作成し、その容量を確認 slice := array[1:4] // 配列から部分的なスライスを作成 fmt.Println("スライスの内容:", slice, "キャパシティ:", cap(slice)) // 整列: スライスを昇順に並べ替え sort.Ints(slice) fmt.Println("整列されたスライス:", slice) // 無限ループ: 数値を表示し続けるが、条件付きで停止 count := 0 for { fmt.Println("無限ループの中:", count) count++ if count > 2 { // 条件でループを抜ける break } } // マップ: 学生の名前と得点のマップを作成し、表示 scores := map[string]int{ "太郎": 90, "花子": 85, "次郎": 78, } fmt.Println("マップの内容:", scores) // マップから検索: 太郎の得点を取得 score, exists := scores["太郎"] if exists { fmt.Println("太郎の得点は", score) } else { fmt.Println("太郎のデータはありません") } // ラベルとgoto文の使用例 fmt.Println("goto文の例") i := 0 Label: // ラベルの定義 if i < 3 { fmt.Println("iの値:", i) i++ goto Label // gotoでラベルにジャンプ } }
正解コードの解説
このGoプログラムでは、基本的な演算、ループ、条件分岐、配列やマップの使い方などを学ぶことができます。コードの各部分を説明していきます。
論理演算子と代入演算子
var a int = 10 var b int = 20 isGreater := a < b // 論理演算子を使って比較 fmt.Println("a < b は", isGreater)
ここでは、a
とb
という2つの整数変数を定義し、a
がb
より小さいかどうかを比較しています。<
は「小さい」という意味の論理演算子です。
この結果をisGreater
に代入し、fmt.Println
で結果を出力します。
条件分岐
if a < b { fmt.Println("aはbより小さい") } else { fmt.Println("aはb以上です") }
if
文を使って、a
がb
より小さいかどうかを判断します。
if
の条件が真(true)の場合は「aはbより小さい」と表示され、そうでない場合はelse
の部分が実行され、「aはb以上です」と表示されます。
ループ処理
for i := 1; i <= 5; i++ { fmt.Println("ループの値:", i) }
ここでは、for
文を使って1から5までの数を順番に表示します。i++
はi
の値を1ずつ増加させる意味です。
<=
は「小さいか等しい」という意味で、i
が5以下の間ループが続きます。
配列の使用例
var array = [5]int{5, 3, 8, 6, 2} fmt.Println("配列の内容:", array)
この部分では、5つの整数を持つ配列array
を作成し、その内容をfmt.Println
で表示しています。配列は固定サイズのデータの集まりです。
スライスとキャパシティ
slice := array[1:4] fmt.Println("スライスの内容:", slice, "キャパシティ:", cap(slice))
ここでは、配列array
から部分的なスライスを作成しています。
スライスは可変長のデータ構造で、array[1:4]
はarray
の1番目から3番目までの要素を取り出します。スライスの容量(キャパシティ)も表示しています。
整列
sort.Ints(slice) fmt.Println("整列されたスライス:", slice)
sort.Ints
関数を使ってスライス内の要素を昇順に並べ替えています。並べ替えた結果をfmt.Println
で表示します。
無限ループ
count := 0 for { fmt.Println("無限ループの中:", count) count++ if count > 2 { break } }
for
文の条件を省略することで無限ループを作成します。この例では、count
が2を超えるとbreak
文によってループを終了します。
マップ
scores := map[string]int{ "太郎": 90, "花子": 85, "次郎": 78, } fmt.Println("マップの内容:", scores)
マップはキーと値のペアを持つデータ構造です。この例では、学生の名前をキーとして、得点を値として持つマップを作成しています。
fmt.Println
でマップの内容を表示しています。
マップからの検索
score, exists := scores["太郎"] if exists { fmt.Println("太郎の得点は", score) } else { fmt.Println("太郎のデータはありません") }
scores
マップから「太郎」の得点を検索しています。
exists
がtrue
の場合、score
に得点が格納されますが、false
の場合は「太郎のデータはありません」と表示します。
ラベルとgoto文
i := 0 Label: // ラベルの定義 if i < 3 { fmt.Println("iの値:", i) i++ goto Label // gotoでラベルにジャンプ }
goto
文を使って、ラベルLabel
にジャンプします。条件が満たされるまで、goto
で繰り返し処理を行います。i
が3未満の間、ループが続きます。
<<前の問題 |
問題集Top |
次の問題>> |
この問題への質問・コメント
この問題を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。