はじめに
この実験では、C プログラミングにおける関数の作成と使用方法を学びます。この実験では、関数の宣言と定義の基本概念、関数の引数の理解、関数からの戻り値の処理、void 関数の扱い、および関数の使用方法の練習を扱います。これらのトピックを手を動かした例と演習を通じて探求し、モジュール化された再利用可能な C コードを書くスキルを身につけます。
この実験では、まず関数宣言と定義の基本を紹介し、簡単な関数を作成して呼び出す方法を示します。次に、関数の引数の理解に深く突き入り、関数に入力としてさまざまなデータ型を渡す方法を紹介します。この実験ではまた、戻り値の概念も扱い、関数からデータを返す方法を学びます。さらに、この実験では戻り値のない void 関数の使用方法を探求します。最後に、学んだ概念をさまざまな演習を通じて練習して適用する機会があります。
関数を宣言および定義する
このステップでは、C プログラミングにおいて関数を宣言して定義する方法を学びます。関数は、コードを整理してモジュール化するための基本的な構成要素です。
まず、~/project ディレクトリに新しいファイル functions_demo.c を作成しましょう。
cd ~/project
touch functions_demo.c
次に、簡単な関数宣言と定義を書きましょう。
#include <stdio.h>
// 関数宣言 (プロトタイプ)
void greet(char* name);
// メイン関数
int main() {
// 関数を呼び出す
greet("LabEx User");
return 0;
}
// 関数定義
void greet(char* name) {
printf("Hello, %s! Welcome to C programming.\n", name);
}
重要なコンポーネントを分解してみましょう。
void greet(char* name)は関数宣言 (プロトタイプ) です。- この関数は、文字ポインタ (文字列) を引数として受け取ります。
voidは、関数が値を返さないことを示します。main()の中で、引数付きで関数を呼び出します。- 関数定義は、メイン関数の後に続き、実際のロジックを実装します。
プログラムをコンパイルして実行しましょう。
gcc functions_demo.c -o functions_demo
./functions_demo
実行結果の例:
Hello, LabEx User! Welcome to C programming.
関数は、次のようなメリットがあります。
- コードを再利用可能なブロックに整理します。
- コードの読みやすさを向上させます。
- 重複を減らします。
- プログラムをモジュール化します。
関数の引数を理解する
このステップでは、C プログラミングにおける関数の引数の使い方を学びます。関数の引数を使うことで、データを関数に渡すことができ、関数をより柔軟で再利用可能なものにすることができます。
~/project ディレクトリに新しいファイル function_arguments.c を作成しましょう。
cd ~/project
touch function_arguments.c
次に、さまざまな種類の関数の引数を示すプログラムを書きましょう。
#include <stdio.h>
// 複数の引数を持つ関数
int calculate_rectangle_area(int length, int width) {
return length * width;
}
// 浮動小数点数の引数を持つ関数
float convert_celsius_to_fahrenheit(float celsius) {
return (celsius * 9/5) + 32;
}
int main() {
// 整数型の引数を使う
int length = 5;
int width = 3;
int area = calculate_rectangle_area(length, width);
printf("Rectangle Area: %d square units\n", area);
// 浮動小数点数型の引数を使う
float celsius = 25.0;
float fahrenheit = convert_celsius_to_fahrenheit(celsius);
printf("%.1f°C is %.1f°F\n", celsius, fahrenheit);
return 0;
}
重要な概念を分解してみましょう。
- 関数は、さまざまな型の複数の引数を取ることができます。
calculate_rectangle_area()は 2 つの整数型の引数を取ります。convert_celsius_to_fahrenheit()は浮動小数点数型の引数を取ります。- C 言語では、引数は値渡しで渡されます (コピーが作成されます)。
- 関数は、これらの引数を計算に使うことができます。
プログラムをコンパイルして実行しましょう。
gcc function_arguments.c -o function_arguments
./function_arguments
実行結果の例:
Rectangle Area: 15 square units
25.0°C is 77.0°F
関数の引数に関する重要なポイント:
- 引数は関数に入力を提供します。
- 変数や直接の値を渡すことができます。
- 引数の数と型は、関数宣言と一致しなければなりません。
- 引数は、関数をより多用途で再利用可能なものにするのに役立ちます。
関数からの戻り値
このステップでは、C プログラミングにおいて関数からの戻り値の使い方を学びます。戻り値を使うことで、関数は計算を行い、呼び出し元のコードに結果を返すことができます。
~/project ディレクトリに新しいファイル function_returns.c を作成しましょう。
cd ~/project
touch function_returns.c
次に、さまざまな種類の戻り値を示すプログラムを書きましょう。
#include <stdio.h>
// 整数を返す関数
int square(int number) {
return number * number;
}
// 浮動小数点数を返す関数
float calculate_average(int a, int b, int c) {
return (float)(a + b + c) / 3;
}
// 文字を返す関数
char get_grade(int score) {
if (score >= 90) return 'A';
else if (score >= 80) return 'B';
else if (score >= 70) return 'C';
else if (score >= 60) return 'D';
else return 'F';
}
int main() {
// 整数型の戻り値を使う
int num = 7;
int squared = square(num);
printf("Square of %d is %d\n", num, squared);
// 浮動小数点数型の戻り値を使う
int math = 85, science = 92, english = 78;
float average = calculate_average(math, science, english);
printf("Average score: %.2f\n", average);
// 文字型の戻り値を使う
int student_score = 85;
char grade = get_grade(student_score);
printf("Student score %d gets grade %c\n", student_score, grade);
return 0;
}
重要な概念を分解してみましょう。
- 関数は、さまざまなデータ型を返すことができます。
square()は整数型の結果を返します。calculate_average()は浮動小数点数型を返します。get_grade()は文字型を返します。returnキーワードは、値を呼び出し元の関数に返します。- 戻り値の型は、関数宣言と一致しなければなりません。
プログラムをコンパイルして実行しましょう。
gcc function_returns.c -o function_returns
./function_returns
実行結果の例:
Square of 7 is 49
Average score: 85.00
Student score 85 gets grade B
戻り値に関する重要なポイント:
- 戻り値を使うことで、関数は計算を行い、結果を返すことができます。
- 関数の目的に応じて適切な戻り値の型を使います。
- 戻り値を直接使うか、変数に格納することができます。
- 戻り値は、関数をより強力で柔軟なものにします。
void 関数を処理する
このステップでは、C プログラミングにおける void 関数について学びます。void 関数は、値を返さずに処理を行い、結果を返す必要のないタスクに便利です。
~/project ディレクトリに新しいファイル void_functions.c を作成しましょう。
cd ~/project
touch void_functions.c
次に、void 関数を示すプログラムを書きましょう。
#include <stdio.h>
// 歓迎メッセージを表示する void 関数
void print_welcome() {
printf("Welcome to the C Programming Lab!\n");
}
// 学生情報を表示するパラメータ付き void 関数
void display_student_info(char* name, int age) {
printf("Student Name: %s\n", name);
printf("Student Age: %d\n", age);
}
// 単純なパターンを描画する void 関数
void draw_pattern(int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("* ");
}
printf("\n");
}
}
int main() {
// void 関数を呼び出す
print_welcome();
// パラメータ付き void 関数
char* student_name = "LabEx User";
int student_age = 25;
display_student_info(student_name, student_age);
// パターン付き void 関数
int pattern_size = 3;
printf("\nDrawing a %dx%d pattern:\n", pattern_size, pattern_size);
draw_pattern(pattern_size);
return 0;
}
重要な概念を分解してみましょう。
- void 関数は、戻り値の型として
voidを持ちます。 - 値を返さずに処理を行います。
print_welcome()は単にメッセージを表示します。display_student_info()はパラメータを取り、情報を表示します。draw_pattern()はネストされたループを使って可視的なパターンを作成します。- void 関数は通常の関数と同じように呼び出されます。
- void 関数では、値を伴う
returnを使用できません。
プログラムをコンパイルして実行しましょう。
gcc void_functions.c -o void_functions
./void_functions
実行結果の例:
Welcome to the C Programming Lab!
Student Name: LabEx User
Student Age: 25
Drawing a 3x3 pattern:
* * *
* * *
* * *
void 関数に関する重要なポイント:
- 値を返す必要のない処理に使用されます。
- パラメータを取ることができます。
- 表示、ログ記録、または特定のタスクの実行に便利です。
- コードの整理とモジュール化に役立ちます。
returnを使って値を返すことはできません。
関数の使用を練習する
この最後のステップでは、C 言語における関数に関する学んだことすべてを、複数の関数の型と使用方法を示す包括的なプログラムを作成することで適用します。
~/project ディレクトリに calculator.c という名前のファイルを作成しましょう。
cd ~/project
touch calculator.c
次に、さまざまな関数を持つ単純な電卓を実装するプログラムを書きましょう。
#include <stdio.h>
// 2 つの数を加算する関数
int add(int a, int b) {
return a + b;
}
// 2 つの数を減算する関数
int subtract(int a, int b) {
return a - b;
}
// 2 つの数を乗算する関数
int multiply(int a, int b) {
return a * b;
}
// エラー処理付きで 2 つの数を除算する関数
float divide(int a, int b) {
if (b == 0) {
printf("Error: Division by zero!\n");
return 0;
}
return (float)a / b;
}
// 電卓のメニューを表示する void 関数
void display_menu() {
printf("\n--- Simple Calculator ---\n");
printf("1. Addition\n");
printf("2. Subtraction\n");
printf("3. Multiplication\n");
printf("4. Division\n");
printf("5. Exit\n");
printf("Enter your choice: ");
}
int main() {
int choice, num1, num2;
float result;
while (1) {
display_menu();
scanf("%d", &choice);
// 終了条件
if (choice == 5) {
printf("Goodbye!\n");
break;
}
// 選択肢の妥当性を検証
if (choice < 1 || choice > 4) {
printf("Invalid choice. Try again.\n");
continue;
}
// ユーザー入力を取得
printf("Enter two numbers: ");
scanf("%d %d", &num1, &num2);
// ユーザーの選択に基づいて計算を実行
switch (choice) {
case 1:
result = add(num1, num2);
printf("Result: %d + %d = %d\n", num1, num2, (int)result);
break;
case 2:
result = subtract(num1, num2);
printf("Result: %d - %d = %d\n", num1, num2, (int)result);
break;
case 3:
result = multiply(num1, num2);
printf("Result: %d * %d = %d\n", num1, num2, (int)result);
break;
case 4:
result = divide(num1, num2);
printf("Result: %d / %d = %.2f\n", num1, num2, result);
break;
}
}
return 0;
}
重要な概念を分解してみましょう。
- 複数の関数の型が使用されています (戻り値、void 関数)。
- 関数は特定の数学的演算を行います。
display_menu()はメニューを表示する void 関数です。- 算術関数は計算結果を返します。
main()関数はメニュー駆動の電卓を実装しています。- ゼロ除算に対するエラー処理が含まれています。
- 演算を選択するために
switch文が使用されています。
プログラムをコンパイルして実行しましょう。
gcc calculator.c -o calculator
./calculator
実行例:
--- Simple Calculator ---
1. Addition
2. Subtraction
3. Multiplication
4. Division
5. Exit
Enter your choice: 1
Enter two numbers: 10 5
Result: 10 + 5 = 15
--- Simple Calculator ---
...
Enter your choice: 5
Goodbye!
関数の使用に関する重要なポイント:
- さまざまな関数の型を組み合わせる。
- 関数を使って複雑な問題を分解する。
- エラー処理を実装する。
- モジュラーで再利用可能なコードを作成する。
まとめ
この実験では、C プログラミングにおいて関数を宣言および定義する方法、関数の引数を理解すること、関数からの戻り値、void 関数を扱うこと、および関数の使用を練習する方法を学びました。最初に、ユーザーに挨拶するための単純な関数を作成し、その後、複数の引数と戻り値を持つより複雑な関数を探りました。また、void 関数の使い方と、プログラムで関数の使用を練習する方法も学びました。これらの基本概念は、C 言語でモジュラーで再利用可能なコードを構築するために欠かせないものです。



