第4章 関数 - Multi Media Club Wikiへようこそ [Multi

第4章
関数
関数を作ります!
第4章 関数
1
今回の内容
関数とは(数学)
関数とは(C言語)
関数のプロトタイプ宣言
第4章 関数
2
関数とは(数学)
𝑥
𝑓(𝑥)
𝑦
𝑥, 𝑦
𝑔(𝑥, 𝑦)
𝑧
 何か値を入れると、何か値が出るもの
 つまり、xを入れるとyが出るもの
 xとyを入れてzが出ることもある(2つ入れても、出る値は1つだけ)
 数学では、これを関数という
第4章 関数
3
以下のプログラムを実行してみよう
#include <stdio.h>
int f(int x)
{
return x + 1;
}
int main()
{
int x;
 実行したら、適当な整数を入力しよう
x > 3
4
x > 20
21
printf("x > ");
scanf("%d", &x);
printf("%d\n", f(x));
第4章
return 0;
関数
}
4
数学みたいな関数
関数を定義する
int 名前(int 入るやつ)
{
return 出るやつ;
}
関数を呼び出す
𝑓 𝑥 = 𝑥 + 1 (𝑥は整数)
𝑓(3) の答えを表示
名前(入れるやつ)
int f(int x)
{
return x + 1;
}
printf("%d\n", f(3));
 𝑓 𝑥 = 𝑥 + 1 という関数を作りました(まるで数学みたいだ!)
 1つ目のintは、出る値が整数であるという意味
 2つ目のintは、入る値が整数であるという意味
 return
第4章 関数
𝑥
𝑓(𝑥)
𝑥+1
; は、この値を返しなさいという命令文
5
関数を定義する場所
#include <stdio.h>
 includeとmainの間に、関数の定義を入れる
int f(int x)
{
return x + 1;
}
ココ
int main()
:
:
第4章 関数
6
関数の引数(ひきすう)
𝑓 𝑥, 𝑦, 𝑧 = 𝑥𝑦𝑧 (𝑥, 𝑦, 𝑧は整数)
int f(int x, int y, int z)
{
return x * y * z;
}
𝑓(1,2,3) の答えを表示
printf("%d\n", f(1, 2, 3));
 ( ) の中身を引数(ひきすう)といいます
 ちなみに、「int x, int y, int z」は仮引数(かりひきすう)、「1, 2, 3」は実引数(じつひきすう)です
 このx,y,zは変数となります
 コンマ「,」で区切って、引数を増やすことができます
 それぞれintをつけましょう
第4章 関数
7
練習問題1
 関数f(x)が 𝑓 𝑥 = 2𝑥 + 1 (𝑥は整数) となるように定義し、入力されたxについてf(x)を表示するプロ
グラムを作りなさい
x > 3
7
第4章 関数
8
練習問題1 解答例
#include <stdio.h>
int f(int x)
{
return 2 * x + 1;
}
int main()
{
int x;
printf("x > ");
scanf("%d", &x);
printf("%d\n", f(x));
return 0;
第4章 関数
}
9
関数とは(C言語)
実行!
実行!
x
int f(int x)
y
実行!
x,y
void g(int x, int y)
int main()
0
実行!
void tetsuzuki()
 何か値(0個以上)を入れると、何か実行され、何か値が出る(または出ない)もの
 C言語では、これを関数という
 実はmainも関数です(main関数といいます)
第4章 関数
10
以下のプログラムを実行してみよう
#include <stdio.h>
定義
関数が実行された! x = 0, y = 100
関数が実行された! x = 1, y = 101
関数が実行された! x = 2, y = 102
y = 102
int f(int x)
{
int y = x + 100;
printf("関数が実行された! x = %d, y = %d\n", x, y);
return y;
}
int main()
{
int y;
f(0);
呼び出し
f(1);
y = f(2);
printf("y = %d\n", y);
第4章
関数
return 0;
}
11
C言語の関数
値が出る関数を定義する
関数を呼び出す
値が出ない関数を定義する
int 名前(int 入るやつ) 名前(入れるやつ)
void 名前(int 入るやつ)
{
{
実行するやつ
実行するやつ
関数を呼び出す
実行するやつ
実行するやつ
(出る値は無視)
実行するやつ
実行するやつ
名前(入れるやつ);
return 出るやつ;
}
}
 今までmain関数でやっていたように、関数の中で何か実行させることができる
関数を呼び出す
(出る値はない)
名前(入れるやつ);
 関数を呼び出すとき、出る値がいらない場合は、関数とセミコロン「;」だけでよい
例: f(0);
 値が出ない関数を定義するには、先頭をvoidにする(値が出ないのでreturn文は不要)
第4章 関数
12
手続き
定義
実行!
void tetsuzuki()
 何も入らず何も出ない関数も作れる
void tetsuzuki()
{
printf("手続き\n");
}
int main()
{
tetsuzuki();
tetsuzuki();
tetsuzuki();
呼び出し
return 0;
}
手続き
手続き
手続き
 そのような関数は「手続き」と呼ばれている(これも関数です)
 よくやる処理を手続きにすると楽になる、というメリットがある
第4章 関数
13
練習問題2
 関数f(x)が 𝑓 𝑥 =
−𝑥 (𝑥 < 0のとき)
(𝑥は整数) となるように定義し、入力されたxについてf(x)を
𝑥 (それ以外)
表示するプログラムを作りなさい
 関数内でif文を使おう
第4章 関数
x > -4
4
14
練習問題2 解答例
定義
#include <stdio.h>
int f(int x)
{
if (x < 0)
return -x;
else
return x;
}
int main()
{
int x;
printf("x > ");
scanf("%d", &x);
printf("%d\n", f(x));
呼び出し
return 0;
第4章 関数
}
15
関数のプロトタイプ宣言
#include <stdio.h>
プロトタイプ宣言
int f(int x);
int main()
{
int x;
プロトタイプ宣言
int f(int x);
printf("x > ");
scanf("%d", &x);
 関数には「プロトタイプ宣言」「定義」「呼び出し」がある
 プロトタイプ宣言は、こんな名前の関数がありますよ、と宣言する
printf("%d\n", f(x));
 関数を呼び出す前に、定義かプロトタイプ宣言があればよい
 つまり、プロトタイプ宣言をすれば、定義を後回しにできる
定義
第4章 関数
return 0;
呼び出し
}
int f(int x)
{
return x + 1;
}
16
練習問題3
 練習問題2のプログラムでプロトタイプ宣言を使って、f(x)をmain関数の後に定義しなさい
第4章 関数
17
#include <stdio.h>
練習問題3 解答例 プロトタイプ宣言
int f(int x);
int main()
{
int x;
printf("x > ");
scanf("%d", &x);
printf("%d\n", f(x));
return 0;
呼び出し
}
定義
第4章 関数
int f(int x)
{
if (x < 0)
return -x;
else
return x;
}
18
終わり
お疲れ様でした
第4章 関数
19