C言語

【C言語】第5章第7回:ユーザー定義関数の設計と実装

ユーザー定義関数は、特定のタスクを実行するコードを再利用可能にするための便利な方法です。この章では、設計のコツや実装方法を解説します。

1. ユーザー定義関数とは?

ユーザー定義関数は、開発者が独自に設計し、特定のタスクを実行するために作成する関数です。

  • 目的:コードの再利用性を高める。
  • メリット:プログラムの構造を簡潔にし、読みやすくする。

1.1 ユーザー定義関数の構造

ユーザー定義関数は以下の構造を持ちます:

return_type function_name(parameter_list) {
    // 関数の処理内容
    return value; // 必要に応じて値を返す
}
  • return_type: 関数が返す値の型。
  • function_name: 関数の名前。
  • parameter_list: 関数に渡す引数のリスト。

2. 基本的なユーザー定義関数の実装

2.1 2つの数の平均を計算する関数

例:引数を渡して平均を計算

#include <stdio.h>

// 平均を計算する関数
float calculateAverage(float a, float b) {
    return (a + b) / 2.0;
}

int main() {
    float num1 = 10.5, num2 = 20.3;
    printf("Average: %.2f\n", calculateAverage(num1, num2));
    return 0;
}

解説:

  • float calculateAverage(float a, float b): 引数abを受け取り、その平均を返します。
  • 戻り値の型はfloatで指定されており、小数点以下を含む結果を返します。

3. 応用的なユーザー定義関数の設計

3.1 配列の合計を計算する関数

例:配列とそのサイズを引数として受け取る

#include <stdio.h>

// 配列の合計を計算する関数
int calculateSum(int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum;
}

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    printf("Sum of array: %d\n", calculateSum(numbers, size));
    return 0;
}

解説:

  • int calculateSum(int arr[], int size): 配列とそのサイズを引数として受け取ります。
  • forループで各要素を合計します。

4. ユーザー定義関数を使用する際のポイント!

  • 名前の付け方:関数の役割が明確にわかる名前を付ける。
  • 引数リスト:必要な情報だけを渡すように設計する。
  • 戻り値:関数の結果が明確になるように適切な型を指定する。

5. 練習問題

以下の課題に挑戦して、ユーザー定義関数の設計と実装を練習しましょう。

  1. 整数を引数として受け取り、それが偶数か奇数かを判定する関数を作成してください。
  2. 2つの整数を引数として受け取り、その最大公約数を返す関数を作成してください。
  3. 文字列を引数として受け取り、その長さを返す関数を作成してください。

6. 練習問題の解答と解説

問1の解答

#include <stdio.h>

// 偶数か奇数を判定する関数
void checkEvenOdd(int num) {
    if (num % 2 == 0) {
        printf("%d is even.\n", num);
    } else {
        printf("%d is odd.\n", num);
    }
}

int main() {
    int number;
    printf("Enter a number: ");
    scanf("%d", &number);
    checkEvenOdd(number);
    return 0;
}

解説:checkEvenOdd関数は、渡された整数を2で割った余りを判定し、偶数または奇数を出力します。

7. まとめ

ユーザー定義関数を正しく設計することで、コードの再利用性と可読性を向上させることができます。次回は、関数をモジュール化する方法について学びます。