広告
↓発売日:2018年09月22日↓
新品価格 |
いよいよ最終日です!今回は関数(かんすう)について見ていきます!
「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!"); }
「hello world!」とだけ表示する関数「func」を作ってみました。
新しく関数を作る時は2ヶ所その関数の事を書きます。
void func(void);
「func」っていうのは関数の英語「function」を短くしたものです。ここが関数の名前になるので変数と同じルールで自分で好きに名前をつけて大丈夫です。「void kansu(void);」でも「void hello_world(void)」でも大丈夫です。
そして「void」という謎の言葉を頭とお尻につけます。「scanf」関数の先頭にもありましたね!
これは戻り値というものに関係があるのですが、少し難しいので今回の入門編で解説は省きたいと思います。
気になる方は小学生でもわかるC言語2の前半で関数の事を詳しく解説しておりますのでそちらをご覧ください。
この部分を「プロトタイプ宣言」といいます。
必ず「int main()」の前に書いてください。
次にその関数の内容ですね。
これは「int main()」の後に書きます。
void func(){ printf("hello world!"); }
さきほどと同じく「void func()」で始めますが今度はお尻の「void」は書かなくて大丈夫です。ここは「void」が省略されているだけです。
そして{}カッコの中に内容を書いていきます。
今回は「printf」命令だけですが、もちろんこの中にもっとたくさんの命令を入れて大丈夫です。
これで関数「func」は完成です。
使うときは
func();
これだけでオッケーです!簡単ですね!
さきほどのプログラムの流れです。
(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("縦の長さを入れてください!>"); (void)scanf("%d",&tate); printf("横の長さを入れてください!>"); (void)scanf("%d",&yoko); printf("\n"); menseki(); return 0; } void menseki(){ printf("縦%d、横%dの四角形の面積は\n",tate,yoko); printf("%dです!\n",tate * yoko); }
縦の長さと横の長さを入力してもらい「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); }
エラーになったかと思います。「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); }
変数「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); }
関数「func」を2回呼び出してます。変数「suji」は2回とも「11」を表示しました。
「int main()」以外の関数で宣言されたローカル変数は
「呼び出すたびに初期化」
されます!
これは言い換えると今回の場合では関数「func」が終わった時点で変数「suji」はなくなってしまうという事です。
関数を実行したあと「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); }
この場合もそれぞれの変数は別のものになり、使う時はローカル変数が優先されます。
もうめんどくさいので全てグローバル変数にすればいいじゃん!と思った方、いると思います。
少しマトモ?なプログラムを組み始めればわかるかと思いますが、変数を甘くみてはいけません。
あまりの変数の多さに絶望します。
早いウチからローカル変数とグローバル変数にきちんと分けるクセをつけておく事をオススメします。
/*最終日 プログラム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) > "); (void)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"); }
このように関数同志を組み合わせてより複雑な関数を作る事もできます!
今まで習った事だけでも簡単なゲームなど作れると思いますのでいろいろ試してみてください!
これにて「小学生でもわかるC言語」を終了したいと思います!
最後までお付き合いいただいた方は感謝です!
このサイトを通して少しでもプログラミングの楽しさを感じていただけたら幸いです!
広告
↓発売日:2016年02月29日↓
12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 |
↓発売日:2018年06月22日↓
新品価格 |
↓発売日:2018年03月09日↓
新品価格 |
↓発売日:2017年06月14日↓
新品価格 |
↓発売日:2018年05月21日↓
新品価格 |
↓発売日:2017年12月07日↓
新品価格 |
↓発売日:2017年02月08日↓
新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 |
↓発売日:2017年09月26日↓
新品価格 |