====== 🧩 補足資料:C言語の関数の基本 ====== ---- ===== 🧠 関数とは? ===== C言語の関数は、処理をひとまとめにして何度も呼び出せる仕組みです。 プログラムの再利用性・可読性を高めるために使います。 ---- ===== 🔹 宣言と定義の違い ===== ^ 名称 ^ 役割 ^ 書く場所 ^ 例 ^ | 関数宣言(プロトタイプ宣言) | 関数があることをコンパイラに知らせる | mainより上 | int add(int a, int b); | | 関数定義 | 実際の処理内容を書く | mainより下でもOK | int add(int a, int b) { return a + b; } | * 宣言と定義を分けることで、関数を別ファイルに分割できる。 * 宣言だけをヘッダファイル(.h)に書くのが一般的。 ---- ===== 🔸 引数と仮引数の違い ===== ^ 種類 ^ 意味 ^ 例 ^ | 仮引数(parameter) | 関数の受け取り側の変数 | int add(int a, int b) の a,b | | 実引数(argument) | 関数を呼び出すときに渡す値 | add(3, 5) の 3,5 | ---- ===== 🧷 ポインタ渡し ===== 関数に変数の**アドレス(場所)**を渡すことで、呼び出し元の値を直接変更できます。 * int* x は「int型のポインタ」 * *x は「ポインタの指す実際の値」 * 呼び出し元の変数を直接書き換えることができる ---- ===== ⚙️ 戻り値・void・手続きと関数 ===== C言語の関数には、値を返す関数と**値を返さない手続き(void関数)**の2種類があります。 * return文:関数の実行を終了し、呼び出し元に値を返す。 * void関数では return を省略可能。 ---- ===== 🧾 C言語の関数まとめ ===== ^ 分類 ^ 説明 ^ 例 ^ | 宣言(プロトタイプ) | 関数の存在を知らせる | int add(int a, int b); | | 定義 | 実際の処理を書く | { return a + b; } | | 実引数/仮引数 | 呼び出す値と受け取る変数 | add(3, 5) / int add(int a, int b) | | 値渡し | 値のコピーを渡す。元の変数は変わらない | | | ポインタ渡し | アドレスを渡す。元の変数が変わる | | | 戻り値 | 処理結果を返す(returnを使う) | | | void関数 | 戻り値なしの手続き(画面出力など) | | ---- ===== 🧠 まとめ ===== * 宣言=関数の存在を伝える * 定義=関数の中身を書く * 引数はコピーか参照かで挙動が変わる * ポインタ渡しはC言語の“参照渡し”のようなもの * 戻り値の有無で「手続き」と「関数」を区別できる ---- ===== 🧮 練習問題 ===== ==== 第1問:平均点と評価を返す関数 ==== 3科目の点数を入力し、平均点を返す関数と、その平均に応じて評価(A〜D)を返す関数を作れ。 * getAverage() … 平均値を計算して返す * getRank() … 80点以上→A、60点以上→B、40点以上→C、それ以下→D **例** 入力: 80 70 90 出力: (平均値と評価) ---- ==== 第2問:配列の最大値と最小値を求める関数 ==== 配列とその要素数を受け取り、最大値と最小値をポインタ経由で返す関数を作れ。 * ループで配列を走査し、*min, *max に代入 * mainで表示する **例** 入力: {3, 9, 2, 5} 出力: 最大値=9, 最小値=2 ---- ==== 第3問:配列の平均値より大きい値を表示 ==== 整数配列と要素数を引数に受け取り、平均値を求めて、その平均より大きい要素だけを出力する関数を作れ。 * 関数内で平均値を計算 * 平均より大きい要素をすべて表示 **例** 入力: {60, 80, 70, 90} 出力: 平均より大きい値 → 80, 90 ---- ==== 第4問:文字列中の特定文字を数える関数 ==== 文字列と文字を受け取り、その文字がいくつ含まれているか数える関数を作れ。 * for文で str[i] != '\\0' まで走査 * 一致したらカウントを増やす **例** 入力: "banana", 文字 'a' 出力: 文字 'a' は 3 個含まれています ---- ==== 第5問:関数を組み合わせて統計出力 ==== 以下の関数を組み合わせて、5人の点数から平均・最高・最低を出力するプログラムを作れ。 * mainで配列を作り、関数を順に呼び出す * 結果を整形して表示 **例** 入力: {70, 85, 60, 90, 75} 出力: 平均=76, 最高=90, 最低=60