
【6日でできるC言語入門】関数の演習プログラム②
C言語の関数は、プログラムを効率よく組み立てるための最重要要素です。
ここでは、基本から応用まで、関数作成の演習プログラムを通して実践力を養います。
入出力・条件分岐・ループ・乱数・ファイル分割などもあわせて学び、
自分だけの関数を自在に設計できるようにしましょう。

1.3つの整数値の合計を求める関数の作成
1.1. 機能と概要
| 関数名 | 引数 | 戻り値 | 概要 |
|---|---|---|---|
| add3 | int x, int y, int z | 3つの合計 | 3つの整数値の合計を返す |
1.2. サンプルプログラム
プロジェクト/ファイル名: Lesson48_1/main.c
#include <stdio.h>
// 3つの整数の合計を返す関数
int add3(int x, int y, int z) {
return x + y + z;
}
int main(void) {
int a, b, c, total;
printf("aの値を入力してください:");
scanf("%d", &a);
printf("bの値を入力してください:");
scanf("%d", &b);
printf("cの値を入力してください:");
scanf("%d", &c);
total = add3(a, b, c);
printf("a + b + c = %d\n", total);
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
aの値を入力してください:7
bの値を入力してください:2
cの値を入力してください:9
a + b + c = 182.自作の絶対値関数を使ったプログラム
2.1. 機能と概要
| 関数名 | 引数 | 戻り値 | 概要 |
|---|---|---|---|
| my_abs | int val | valの絶対値 | 整数の絶対値を返す |
2.2. サンプルプログラム
プロジェクト/ファイル名: Lesson48_2/main.c
#include <stdio.h>
// 整数の絶対値を返す関数
int my_abs(int val) {
if (val < 0) return -val;
else return val;
}
int main(void) {
int num;
printf("整数値を入力してください:");
scanf("%d", &num);
printf("%dの絶対値は%dです。\n", num, my_abs(num));
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
3.乱数を使った計算クイズゲーム
3.1. 機能と概要
| 関数名 | 引数 | 戻り値 | 概要 |
|---|---|---|---|
| judge_sum | int a, int b, int c | a+b==cなら1 | a+bがcと等しければ1, 違えば0を返す |
3.2. サンプルプログラム
プロジェクト/ファイル名: Lesson48_3/main.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 合計値を判定する関数
int judge_sum(int a, int b, int c) {
return (a + b == c) ? 1 : 0;
}
int main(void) {
int num1, num2, answer, result;
srand((unsigned)time(NULL)); // 乱数の初期化
num1 = rand() % 10 + 1; // 1〜10
num2 = rand() % 10 + 1; // 1〜10
printf("計算問題:%d + %d\n", num1, num2);
do {
printf("合計を入力してください:");
scanf("%d", &answer);
result = judge_sum(num1, num2, answer);
if (result)
printf("正解です!\n");
else
printf("間違いです\n");
} while (!result);
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
計算問題:6 + 8
合計を入力してください:9
間違いです
合計を入力してください:15
間違いです
合計を入力してください:14
正解です!4.関数のファイル分割の実践
4.1. 概要
関数の定義をヘッダファイル・ソースファイルに分け、main.cでは関数を呼び出すだけにします。
triangle.h
プロジェクト/ファイル名: Lesson48_4/triangle.h
#ifndef TRIANGLE_H
#define TRIANGLE_H
void printStars(int n);
void printTriangle(int n);
#endiftriangle.c
プロジェクト/ファイル名: Lesson48_4/triangle.c
#include <stdio.h>
#include "triangle.h"
// n個の★を横並びで表示
void printStars(int n) {
int i;
for (i = 0; i < n; i++) {
printf("★");
}
printf("\n");
}
// n段の三角形を表示
void printTriangle(int n) {
int i;
for (i = 1; i <= n; i++) {
printStars(i);
}
}main.c
プロジェクト/ファイル名: Lesson48_4/main.c
#include <stdio.h>
#include "triangle.h"
int main(void) {
int num;
printf("段数を入力してください:");
scanf("%d", &num);
if (num > 0) {
printTriangle(num);
} else {
printf("1以上の数を入力してください。\n");
}
return 0;
}4.2. 実行方法
1.「SDLチェック」を「いいえ」にします。

2.「ビルド」 メニューから「ソリューションのビルド」を選択します。

3.ビルドが成功すると、「main.c」「mathops.c」「screen.c」の両方がコンパイルされ、正しくリンクされます。
4.「デバッグ」 メニューから「デバッグなしで開始」を選択します。

5.結果ウィンドウに、次のような出力が表示されます。
実行結果
段数を入力してください:5
★
★★
★★★
★★★★
★★★★★まとめ
- 複数の関数を組み合わせることで、柔軟なプログラム作成が可能になります。
- 関数のファイル分割や自作関数の活用により、保守性・再利用性も高まります。
- 乱数や条件分岐も関数と一緒に活用してみましょう。
