画像(logo)

HOME/[C言語 入門]小学生でもわかるC言語 目次/最終日 関数(かんすう)!

広告

[C言語 入門 小学生でもわかるC言語]
最終日 関数(かんすう)!

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

目次へ戻る

関数(かんすう)

いよいよ最終日です!今回は関数(かんすう)について見ていきます!

関数?

「printf」命令や「scanf」命令みたいな「命令」の事を正しくは関数といいます!というのを覚えてますでしょうか?

「命令」の方が覚えやすいと思い今まで呼んできましたが正しくは「関数(かんすう)」といいます。

なので今回から正しく関数と呼びたいと思います。

話を戻します。

そしてこのC言語入門で学んでいるような最初から使える関数の事を標準関数(ひょうじゅんかんすう)といいます。

そしてこの標準関数を組み合わせて「自分だけのオリジナル関数」を作れるというワケです。

そうすれば同じ作業の繰り返しなんかを「自分だけのオリジナル関数」にまとめて好きな時に使えて便利ですよね!

そんなワケで今回は関数を自分で作ってみましょう!

なにやら難しそうですが、やる事はさきほども言いましたが関数(命令)を組み合わせて、一つにまとめるだけです!

さっそく見てみましょう!

/*最終日 プログラム1*/
#include <stdio.h>

void func(void);

int main(){
	printf("関数「func」はhello world!と表示します!");

	printf("\n\n");

	func();

	printf("\n\n");

	printf("完了しました!\n");

	return 0;
}

void func(){
	printf("hello world!");
}

■実行結果■

画像(cb_14_1)

■説明■

「hello world!」とだけ表示する関数「func」を作ってみました。

新しく関数を作る時は2ヶ所その関数の事を書きます。

先頭の部分(プロトタイプ宣言)

void func(void);

「func」っていうのは関数の英語「function」を短くしたものです。ここが関数の名前になるので変数と同じルールで自分で好きに名前をつけて大丈夫です。「void kansu(void);」でも「void hello_world(void)」でも大丈夫です。

そして「void」という謎の言葉を頭とお尻につけます。「void」の意味が気になる所ですがカタチで覚えましょう!

この部分を「プロトタイプ宣言」といいます。

必ず「int main()」の前に書いてください。

関数の内容

次にその関数の内容ですね。

これは「int main()」の後に書きます。

void func(){
	printf("hello world!");
}

さきほどと同じく「void func()」で始めますが今度はお尻の「void」は書かなくて大丈夫です。ここは「void」が省略されているだけです。

そして{}カッコの中に内容を書いていきます。

今回は「printf」命令だけですが、もちろんこの中にもっとたくさんの命令を入れて大丈夫です。

これで関数「func」は完成です。

使うとき

使うときは

func();

これだけでオッケーです!簡単ですね!

「int main()」はみんなのまとめ役

さきほどのプログラムの流れです。

(1)「int main()」から始まります!

(2)途中で関数「func」が呼び出されます!

(3)関数「func」を実行したら、「int main()」の続きに戻ります!

プログラムは必ず「int main()」から始まって「int main()」で終わります。

なのでどんなにすごい関数を作っても「int main()」を書かないとプログラムは始まらないのでご注意ください。

書き方のおさらい

(1)「int main()」の前

void func(void);

でプロトタイプ宣言

(2)「int main()」の後

void func(){   }

{}の中に内容を書く

(3)使うときは

func();

この決められたカタチを覚えましょう!

関わる数(関数)

こんなのでいいの?と思われた方、いると思います。

今回はプログラムのキホンに重点を置いておりますので、関数も「命令をひとまとめにするもの」という説明をさせて頂きますが、もちろんまだ他にもいろいろな使い方があります。

もう少し詳しく関数の事を知りたい方はぜひ当サイトの「小学生でもわかるC言語2」こちらをご覧ください。

広告

グローバル変数とローカル変数

変数の宣言している場所にご注目ください!「int main()」の前で宣言してみます!

/*最終日 プログラム2*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void menseki(void);

int tate = 0;
int yoko = 0;

int main(){
	printf("四角形の面積を計算します!\n");
	printf("縦の長さを入れてください!>");
	scanf("%d",&tate);
	printf("横の長さを入れてください!>");
	scanf("%d",&yoko);
	
	printf("\n");

	menseki();
	
	return 0;
}

void menseki(){
	printf("縦%d、横%dの四角形の面積は\n",tate,yoko);
	printf("%dです!\n",tate * yoko);
}

■実行結果■

画像(cb_14_2)

■説明■

縦の長さと横の長さを入力してもらい「menseki()」という関数で計算して表示しております。

変数もどの場所で宣言するかによって使い方が少し変わってきます。

あらためて変数の宣言した場所にご注目ください!

int tate = 0;
int yoko = 0;

「int main()」の前に宣言していますね!このように宣言した変数の事をグローバル変数といいます。

それに対して今まで使っていた変数をローカル変数といいます!

グローバル変数にする事で「int main()」の中でも他に作った関数の中でも全ての場所でこの変数が使えるようになります!

という事は「int main()」の中で宣言した変数は他の関数では使えないという事ですね!

プログラムで確認してみましょう!

/*最終日 プログラム3*/
#include <stdio.h>

void func(void);

int main(){
	int suji = 10;
	printf("%d",suji);

	printf("\n\n");

	func();

	return 0;
}

void func(){
	printf("%d\n",suji);
}

■実行結果■

画像(cb_14_3)

■説明■

エラーになったかと思います。「int main()」の中で宣言された変数「suji」を関数「func」の中で使おうとしたのでエラーになりました。

これは他の関数同志でも同じ事が言えます。

例えば上のプログラムで言いますと関数「void func()」の中で宣言した変数は関数「void func()」の中でしか使えません!

全体で使いたい変数は必ず「int main()」の前で宣言するグローバル変数にしましょう!

では別々の場所で同じ名前の変数を宣言した時はどうでしょう?

こちらも確認してみましょう!

/*最終日 プログラム4*/
#include <stdio.h>

void func(void);

int main(){
	int suji = 100;

	printf("[main]suji = %d",suji);

	printf("\n");

	func();

	printf("\n");

	printf("[main]suji = %d\n",suji);

	return 0;
}

void func(){
	int suji = 50;
	printf("[func]suji = %d",suji);
}

■実行結果■

画像(cb_14_4)

■説明■

変数「suji」を「int main()」と関数「func」2ヶ所で宣言してます。

変数「suji」の値に注目です。最初「100」から始まり、途中で「50」になって、また「100」に戻りました。

これは「int main()」と関数「func」の中のそれぞれの変数「suji」は

「別のもの」

という事です!

くり返しますが

「グローバル変数」・・・全ての場所で使えます。

「ローカル変数」・・・宣言した関数の中でだけ使えます。

ローカル変数の注意

関数「func」の中で宣言した変数「suji」にご注目ください!

/*最終日 プログラム5*/
#include <stdio.h>

void func(void);

int main(){
	printf("変数「suji」に注目!\n\n");

	printf("func「一回目」");
	func();
	
	printf("\n");

	printf("func「二回目」");
	func();

	return 0;
}

void func(){
	int suji = 10;

	suji++;

	printf("suji = %d\n",suji);
}	

■実行結果■

画像(cb_14_5)

■説明■

関数「func」を2回呼び出してます。変数「suji」は2回とも「11」を表示しました。

「int main()」以外の関数で宣言されたローカル変数は

「呼び出すたびに初期化」

されます!

これは言い換えると今回の場合では関数「func」が終わった時点で変数「suji」はなくなってしまうという事です。

「int main()」内のローカル変数

関数を実行したあと「int main()」に戻る時のプログラムの流れは、その関数を実行した続きからになります。

なので「int main()」内のローカル変数が初期化されるワケではないので注意しましょう!

グローバル変数とローカル変数の名前が同じ

/*最終日 プログラム6*/
#include <stdio.h>

void func(void);

int suji = 100;

int main(){
	func();

	printf("グローバル変数の「suji」 = %d\n",suji);

	func();

	return 0;
}

void func(){
	int suji = 10;

	printf("func内の「suji」 = %d\n",suji);
}	

■実行結果■

画像(cb_14_6)

■説明■

この場合もそれぞれの変数は別のものになり、使う時はローカル変数が優先されます。

グローバル変数でいいじゃん!

もうめんどくさいので全てグローバル変数にすればいいじゃん!と思った方、いると思います。

少しマトモ?なプログラムを組み始めればわかるかと思いますが、変数を甘くみてはいけません。

あまりの変数の多さに絶望します。

早いウチからローカル変数とグローバル変数にきちんと分けるクセをつけておく事をオススメします。

関数を組み合わせる

/*最終日 プログラム7*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void aisatu(void);
void ohayou(void);
void konnitiha(void);
void konbanwa(void);

int suji;

int main(){
	printf("あいさつプログラムです!\n");
	printf("(1)朝(2)昼(3)晩のどれかを\n");
	printf("選んでください(1〜3) > ");

	scanf("%d",&suji);

	aisatu();

	return 0;
}

void aisatu(){
	switch(suji){
	case 1:
		ohayou();
		break;
	case 2:
		konnitiha();
		break;
	case 3:
		konbanwa();
		break;
	default:
		break;
	}
}

void ohayou(){
	printf("おはよう!\n");
}

void konnitiha(){
	printf("こんにちは!\n");
}

void konbanwa(){
	printf("こんばんは!\n");
}

■実行結果■

画像(cb_14_7)

■説明■

このように関数同志を組み合わせてより複雑な関数を作る事もできます!

今まで習った事だけでも簡単なゲームなど作れると思いますのでいろいろ試してみてください!

お疲れ様です!

これにて「小学生でもわかるC言語」を終了したいと思います!

最後までお付き合いいただいた方は感謝です!

このサイトを通して少しでもプログラミングの楽しさを感じていただけたら幸いです!

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓2017年06月16日発売↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2017/5/1 13:05時点)

↓2014年08月09日発売↓

新・明解C言語 入門編 (明解シリーズ)

新品価格
¥2,484から
(2017/5/1 13:08時点)

↓2016年02月20日発売↓

新・解きながら学ぶC言語

新品価格
¥2,160から
(2017/5/1 13:10時点)

↓2017年02月11日発売↓

C言語プログラミング基本例題88 88

新品価格
¥3,024から
(2017/5/1 13:12時点)

↓2016年12月15日発売↓

Cの絵本 第2版 C言語が好きになる新しい9つの扉

新品価格
¥1,490から
(2017/5/1 13:13時点)

↓2017年02月08日発売↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2017/5/1 13:15時点)