
【6日でできるC言語入門】関数の演習プログラム①
C言語で関数の基礎を学んだら、実践的な演習プログラムに挑戦することが理解を深める近道です。ここでは、関数を活用した2つの練習問題を用意し、「値の平均を求める関数」や「素数判定を関数で実装」することで、関数の使い方や応用力を身につけます。
また、実際にプログラムを作る中で、プロトタイプ宣言や戻り値、関数内での値の扱い方も合わせて学んでいきましょう。

1.平均値を求める関数の演習
1.1. 問題とプログラム例
例題1
「3つの実数を入力し、その平均値を計算して表示するプログラムを作成してください。平均値の計算はavg3という関数で行い、3つの実数を引数として受け取り、その平均値を戻り値として返すようにしましょう。」
サンプルプログラム1
プロジェクト/ファイル名: Lesson42_1/main.c
#include <stdio.h>
// 3つの実数の平均値を返す関数のプロトタイプ宣言
double avg3(double, double, double);
int main(void) {
double nums[3];
int i;
double result;
for (i = 0; i < 3; i++) {
printf("%d番目の数値を入力してください:", i + 1);
scanf("%lf", &nums[i]);
}
result = avg3(nums[0], nums[1], nums[2]);
printf("入力された数値の平均値:%lf\n", result);
return 0;
}
// 3つの実数の平均値を計算する関数
double avg3(double a, double b, double c) {
return (a + b + c) / 3.0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
1番目の数値を入力してください:2.5
2番目の数値を入力してください:4.0
3番目の数値を入力してください:5.5
入力された数値の平均値:4.0000001.2. 解説
| 項目 | 説明 |
|---|---|
| avg3関数 | 3つの実数値を引数で受け取り、その平均値を返す。 |
| プロトタイプ宣言 | mainより前にavg3関数の宣言を記述 |
| 配列の利用 | 入力値を配列に格納し、まとめて処理しやすくしている。 |
2.素数判定と表示の関数演習
2.1. 問題とプログラム例
例題2
「入力した自然数n以下のすべての素数を表示するプログラムを作成してください。素数判定はnum_divisors関数(約数の個数を返す)で行い、素数の一覧表示はdisp_primes関数で実装します。」
サンプルプログラム2
プロジェクト/ファイル名: Lesson42_2/main.c
#include <stdio.h>
// 約数の個数を求める関数プロトタイプ宣言
int num_divisors(int);
// 素数を表示する関数プロトタイプ宣言
void disp_primes(int);
int main(void) {
int limit;
printf("調べたい上限の自然数を入力してください:");
scanf("%d", &limit);
disp_primes(limit);
return 0;
}
// nの約数の個数を返す関数
int num_divisors(int n) {
int i, count = 0;
for (i = 1; i <= n; i++) {
if (n % i == 0) {
count++;
}
}
return count;
}
// 2からnまでの素数を表示する関数
void disp_primes(int n) {
int i, printed = 0;
if (n <= 1) {
printf("2以上の自然数を入力してください。\n");
return;
}
printf("2から%dまでの素数:\n", n);
for (i = 2; i <= n; i++) {
if (num_divisors(i) == 2) {
printf("%d ", i);
printed++;
if (printed % 10 == 0) printf("\n"); // 10個ごとに改行
}
}
if (printed % 10 != 0) printf("\n");
}実行例1
「SDLチェック」を「いいえ」にして、プログラムを実行します。
調べたい上限の自然数を入力してください:20
2から20までの素数:
2 3 5 7 11 13 17 19実行例2
「SDLチェック」を「いいえ」にして、プログラムを実行します。
調べたい上限の自然数を入力してください:1
2以上の自然数を入力してください。2.2. 解説
| 関数名 | 引数・戻り値 | 機能とポイント |
|---|---|---|
| num_divisors | int型引数、int型戻り値 | 指定した値の約数がいくつあるかを返す |
| disp_primes | int型引数、戻り値なし | 2〜nまでの素数を判定して表示。10個ごとに改行 |
まとめ
- 演習を通じて、関数の定義とプロトタイプ宣言の重要性、および関数の呼び出し方を身につけることができました。
- 配列やforループと組み合わせることで、より柔軟なプログラム作成が可能になります。
- 複数の関数を組み合わせて使うことで、見やすく再利用性の高いコードが書けるようになります。
