プログラミング指導 第六章 関数 - マルチメディア研究同好会

11
第六章 関数 本当は「関数」じゃなくて「函数」よ。

Upload: multimedia-research-club-tmcit

Post on 12-Jul-2015

53 views

Category:

Software


7 download

TRANSCRIPT

Page 1: プログラミング指導 第六章 関数 - マルチメディア研究同好会

第六章 関数本当は「関数」じゃなくて「函数」よ。

Page 2: プログラミング指導 第六章 関数 - マルチメディア研究同好会

関数とは?• またお前か。なんか以前の章でやったよね?え、またやるの?

• 以前やったのは「標準入出力関数」のみでした。だからここでは関数全体のお話をします。関数とはprintfなどのようなあるデータを渡した時にそれを処理してくれるもののこと。printfの場合でいうと与られた文字を出力することが処理の内容です。

• 標準入出力関数はprintf、scanf以外にもいくつか(puts、getcharなど)あります。(ちな(σ・∀・)σ gets!! ってのもあったけど会長が1年の頃に廃止

になりました。ダンディェ・・・)というか関数自体が入出力関数以外にもいくつも存在します。

• ちなみに、forやifなど第五章で習ったものはすべて関数ではありません!

• さらにちなみに第五章は汎用性の高い項目で、かなり重要。考え方は勿論のこと構文の書き方も内容や言語問わずほぼ共通。モーターなどハードウェアの制御でもよく使います。

Page 3: プログラミング指導 第六章 関数 - マルチメディア研究同好会

そもそもなんで標準入出力と読んでいるのか?

Page 4: プログラミング指導 第六章 関数 - マルチメディア研究同好会

その前に話さないとイけない事がある。いままで必ず

#include <stdio.h> を最初に書いていたであろぅ。

これはナニかというとまず<stdio.h>の方から説明すると、このstdio.hはヘッダーファイルと呼ばれるもので実際にこういう名前

のファイルがパソコン上のどこかに存在する。どこかは俺も知らない。

ヘッダーファイルとは簡単にいうと関数のリストである。ここに関数の定義(どういう動作をするか)が書かれている。(最後のドットエッチはHeaderの意)(あとこういう.hみたいなの拡張子っていうんだよ)

さて、#includeはナニをするものかというとこのヘッダーファイルを使うよ!というコードである。(includeは和訳すると含む)

つまり、#include <stdio.h>はstdio.hという関数リストを読み込ませる、というコードなのです。

ビルド(コンパイル)するときにリストを読み込まないと関数は使えません。だから毎回必ず、使う関数の入ったヘッダーファイルを書いていたのです。

因みにstdioはstandard input/output の略でこの中には標準的な入出力関数が揃っています。よって標準入出力関数と呼ぶわけです。

Page 5: プログラミング指導 第六章 関数 - マルチメディア研究同好会

stdio.h以外にもstdlib.h,math.hなどのヘッダが存在します。これらのヘッダは最初っから用意されています。

よって、これらのことを標準ライブラリ関数、もとい

標準関数と呼びます。

これら以外にも後々使うDXライブラリなど標準でないヘッダファイルもいくつも存在します。

さて、関数はヘッダーファイルによって用意されているものということですが自分の使いたい関数が無い場合はどうしたらいいんでしょうか?

Page 6: プログラミング指導 第六章 関数 - マルチメディア研究同好会

なんと関数は自分で作成することもできるのです!

Page 7: プログラミング指導 第六章 関数 - マルチメディア研究同好会

実際に作ってみよう。

左の赤い部分が自分で作った関数です。自作する関数は必ずmain関数より前に作成します。

まず関数の戻り値(又は返り値)の型を設定します。ここではint型です。戻り値とは何かというと通常関数は()内に

値を入れて、処理した値を変数に代入するという使い方をします。

その変数に代入するときにどの型にするかを決めるわけです。多くの関数には戻り値があります。ちなみにprintfにも戻り値があります。

()の中には関数に渡す(処理してもらう)

値の型と関数内で処理するときに使う変数名を書きます。()内の値のことを引数(ひきすう)と言います。

Page 8: プログラミング指導 第六章 関数 - マルチメディア研究同好会

作ってみた。{ }の中には処理の内容を記述します。ここでcのみが宣言されていますが、aとbは()内で宣言したのでここでは宣言しなくてよいです。

main関数内でaを使ってますが、変数は宣言した関数内でしか使えないのでmainでbやcを使っても問題ないんです。

最後にどの変数をmain関数内の変数に代入するかを決めます。aやbと打てばmainで入れた値がそのまま代入されるでしょうが、この場合どうあがいてもcですね。どうやって指定するかといえば・・・

な、なんといままでわけも分からずとりあえず打っていた何故かいつも最後にあるあのレツーンを使うんです。

ちなみにmainはretrun 0;無くても動作するんだよね…

Page 9: プログラミング指導 第六章 関数 - マルチメディア研究同好会

注意

• 関数の名前は基本的には何でもいいですが、最初の1文字目はアルファベットである必要があります。(例、a2,TMCIT)また、for,if,newなどの予約語と呼ばれる文字列は使用できません。

以上のことは変数やこれからやる配列等でも同じです。

あぁ、あと他の言語でも予約語がある場合が多く、

予約語の内容自体が共通していることもあるから覚えといたほうがええで。

長い、3行で頼むわ

Page 10: プログラミング指導 第六章 関数 - マルチメディア研究同好会

まあここじゃ予約語は教えねぇけどな!!

とっとと第六章の課題に進みやがれ!!

予約語については結構多いから自分でググれ!!

Page 11: プログラミング指導 第六章 関数 - マルチメディア研究同好会

ついでに

• 関数がだんだん増えて来るとコードが長くなりすぎていつまでたってもmainにたどり着けないっていうアホなことが起こるので、関数の部分を

1. 複数の.cや.cppに分ける。

2. .hにしてしまう。

と言った対処をします。

参考:http://www33.ocn.ne.jp/~loreley/FSB/c04.html