Go練習問題2-☆1:レベル2の文法を総復習しよう

記事内に商品プロモーションを含む場合があります

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)

ここでは、abという2つの整数変数を定義し、abより小さいかどうかを比較しています。<は「小さい」という意味の論理演算子です。

この結果をisGreaterに代入し、fmt.Printlnで結果を出力します。

条件分岐

if a < b {
    fmt.Println("aはbより小さい")
} else {
    fmt.Println("aはb以上です")
}

if文を使って、abより小さいかどうかを判断します。

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マップから「太郎」の得点を検索しています。

existstrueの場合、scoreに得点が格納されますが、falseの場合は「太郎のデータはありません」と表示します。

ラベルとgoto文

i := 0
Label: // ラベルの定義
if i < 3 {
    fmt.Println("iの値:", i)
    i++
    goto Label // gotoでラベルにジャンプ
}

goto文を使って、ラベルLabelにジャンプします。条件が満たされるまで、gotoで繰り返し処理を行います。iが3未満の間、ループが続きます。

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Go練習問題集へ戻る
    トップページへ戻る