原因→結果としてかくと
テレビであれば
ボタン押す→TVがつく
printfなら
printf("hoge");を呼び出す → hogeが表示される
という喩え話で伝わりますでしょうか?
プログラムの一部を関数にするの目的の1つとして中身にこだわらないようにするというものがあると考えています
例えばテレビなら子供でもスイッチオンでテレビが見れますが
子供(そしてほとんどの大人も)はテレビがなぜ映るのかの仕組みについては知りません
しかし、スイッチの操作とその結果さえ知っていればテレビは見れます
原因と結果の対応関係(スイッチを押せば見れる)だけに注目し
その間の仕組み(電波を受け取り信号を解釈して画面に出すetc)を意識しなくていいようになっています
だから多くの人が使うことができるのです
同じ事がプログラミングでもあります
例えば、2人のテストの点数を渡して平均を出す場合、
コード:
int heikin(int hitorimenotennsuu ,int futarimenotennsuu){
int heikinntennsuu;
heikinntennsuu =( hitorimenotennsuu+futarimenotennsuu)/2;
return heikinntennsuu;
//平均点なので本当は小数で返すべきですが。
}
という関数を作っておけば、平均点の求め方を知らない人でさえも
この関数heikinnさえ使えれば平均点を求めることができます。
平均点の求め方なんて多くの人は知っていますが、
データを暗号化したり、メッセージボックスを表示したり、他のコンピュータへ接続する方法は
知らないかも知れません。データの暗号化には数学の知識が必須ですし、メッセージボックスを
自前で出そうとすれば大変です、他のコンピュータへ接続なんて想像もつきません!
でもそれらを実現する関数さえ知っていれば簡単に色々なことができるのです。
文法書は文法のことを中心に書いているので、
習っていることを実際に使う状況がわからないかも知れません
ただ、関数に限って言えば、例えばWindows上でなにかソフトを作りたいと思った時には
Windowsがプログラミングしやすいように様々な機能を関数として提供しています
(Windows APIというものです)
そしてその機能を利用して作っていくほうが0から作るよりはるかに早いため
関数を使うのです。
/*追記*/
だからといって関数の中身を知らなくていいだというわけでもありません
関数だって人の作ったものなのでバグが入っているかもしれませんし
同じことをしてくれる関数でも実現する方法がよりよいやり方のとあまりそうでないやり方があったりします
すでにある関数を自分で作ってみることも勉強になったりします