コース一覧
    C言語基礎 関数・配列編
    引数と戻り値

    C言語基礎 関数・配列編

    C言語の関数と配列を学び、処理を分割してデータを扱うコースです。

    1
    関数
    01. 関数を定義する15分
    02. 引数と戻り値15分
    03. プロトタイプ宣言15分
    04. void関数15分
    05. 変数のスコープ15分
    06. つくる 関数に分割15分
    07. 第5章クイズ10分
    2
    配列と文字列
    01. 配列15分
    02. 配列とfor15分
    03. 集計15分
    04. 最高点と最低点15分
    05. 文字列(char配列)15分
    06. 文字列関数15分
    07. 文字列の入力15分
    08. つくる 配列で成績管理15分
    09. 第6章クイズ10分

    引数と戻り値

    値を渡せる関数

    前回の show_line は、いつ呼んでも同じ線を出すだけの関数でした。ここからは、呼ぶたびに違う値を渡して、違う答えを返してもらいます。渡す値を 引数、返ってくる値を 戻り値 と呼びます。

    3つの点数から合計を出す関数を書いてみます。

    c

    int total_of(int a, int b, int c) {
        return a + b + c;
    }

    カッコの中に int a, int b, int c と並べたのが引数リストです。型と名前をセットで、変数の宣言と同じ形で書きます。int a, b, c のようにまとめて書くことはできません。引数はそれぞれに型が必要です。

    呼び出すときは、同じ並び順で値を渡します。

    c

    int sum = total_of(80, 90, 70);

    この瞬間、関数の中の a に 80、b に 90、c に 70 が入ります。並び順で対応するので、渡す順番を間違えると意味の違う計算になります。

    return は値を持って戻る

    return a + b + c; は「この式を計算して、その値を持って呼び出し元へ帰る」という命令です。関数の戻り値の型を int と書いてあるので、返す値も int でなければなりません。

    大事なのは、return に来た時点で関数がそこで終わるという点です。return より下に書いた行は実行されません。分岐の中で return を書けば、条件によって途中で切り上げる関数も作れます。

    平均を返す関数

    平均は割り算なので、戻り値の型は double にします。

    c

    double average_of(int a, int b, int c) {
        return (a + b + c) / 3.0;
    }

    第2章でやったとおり、(a + b + c) / 3 と書くと int どうしの割り算になって小数が切り捨てられます。割る数を 3.0 にすることで、小数のまま計算されます。戻り値の型を double にしただけでは中の計算は直りません。切り捨ては割り算の時点で起きているからです。

    受け取る側も double で受けます。

    c

    double avg = average_of(80, 90, 70);
    printf("平均は%.1f点です\n", avg);

    変数に入れずに printf("%.1f\n", average_of(80, 90, 70)); と直接書くこともできます。関数の呼び出しは、それ自体がひとつの値として扱えるからです。

    引数は関数の中だけのコピー

    呼び出し側の変数を関数に渡すと、その 値がコピーされて 引数に入ります。関数の中で a を書き換えても、呼んだ側の変数は変わりません。この性質は、あとの回で「関数の中から呼び出し元の変数を変えたい」となったときに効いてきます。今は、関数は値をもらって値を返すだけの箱だ、と思っておいてください。

    では、合計と平均を返す2つの関数を書いてみましょう。

    要件

    1. total_of という関数で3つの点数の合計を返す
    2. average_of という関数で3つの点数の平均を返す。戻り値の型は double
    3. scanf で3つの整数を読み込む
    4. 1行目に 合計は255点です の形で表示する
    5. 2行目に 平均は85.0点です の形で小数第1位まで表示する

    ヒント

    平均で切り捨てが起きないよう、割る数は 3 ではなく 3.0 にします

    小数第1位まで出す書式指定子は %.1f です

    関数の定義は main より上に置いてください

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • プロトタイプ宣言

      main より下に関数を書けるようになります。

    • void関数

      値を返さない関数を書けるようになります。

    • 変数のスコープ

      ローカル変数がどこまで見えるか説明できるようになります。

    • つくる 関数に分割

      計算と判定と表示をそれぞれ別の関数に分けられるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 関数処理に名前を付けて再利用できる単位
    • 引数位置引数=順番で渡す。
    • 戻り値呼び出し元への返答を表す点線矢印
    • リスト順序付きで複数の値を扱うデータ構造
    • セット重複を持たない順序なし集合
    • 変数データに名前をつけて参照する仕組み
    main.c
    エディタを読み込んでいます

    メモ

    引数と戻り値

    ⌘S で保存