Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
基礎情報処理演習 (8)関数
Search
自然言語処理研究室
November 07, 2013
0
7.9k
基礎情報処理演習 (8)関数
自然言語処理研究室
November 07, 2013
Tweet
Share
More Decks by 自然言語処理研究室
See All by 自然言語処理研究室
データサイエンス14_システム.pdf
jnlp
0
360
データサイエンス13_解析.pdf
jnlp
0
440
データサイエンス12_分類.pdf
jnlp
0
320
データサイエンス11_前処理.pdf
jnlp
0
440
Recurrent neural network based language model
jnlp
0
120
自然言語処理研究室 研究概要(2012年)
jnlp
0
120
自然言語処理研究室 研究概要(2013年)
jnlp
0
82
自然言語処理研究室 研究概要(2014年)
jnlp
0
99
自然言語処理研究室 研究概要(2015年)
jnlp
0
160
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
335
57k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Gamification - CAS2011
davidbonilla
80
5.1k
A better future with KSS
kneath
238
17k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Typedesign – Prime Four
hannesfritz
40
2.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
240
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
Into the Great Unknown - MozCon
thekraken
35
1.6k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Transcript
基礎情報処理演習 (8) 関数 山本和英 長岡技術科学大学 1
関数 • 関数とは「ひとまとまりの仕事」のこと。何をひ とまとまりとするかは勝手に決めていい。 • プログラミング言語によっては「サブルーチン」と 呼ぶこともあるが、C言語ではサブルーチンと呼 ばず関数と呼ぶ。 • 数学で言う関数とは違って、値を返す関数と値
を返さない関数がある。 • main や printf などもすべて関数である。 2
関数はいつ使うのか? • プログラム中の別の場所で何度も繰り返し て使いたい時 ⇒あちこちで何度も書くのは面倒で 見にくくて大変じゃない? • (一度しか使わなくても)とても大きなプロ グラムをまとまりごとに分割して考えたい時 ⇒長過ぎると訳が分からなくなるでしょ?
3
関数の作り方 (例:2整数を入力して加算する関数) int addnum(int a, int b){ int x; x
= a + b; return x; } 4
関数の作り方 (例:2整数を入力して加算する関数) int addnum(int a, int b){ int x; x
= a + b; return x; } 2つの整数を入力してaとbに 代入する(aとbはここで 作った変数なので 他の関数からは見えない) 5
実数を1つ入力する場合 int myfunc(double p){ … } int myfunc(int x, int
y, int z){ … } int myfunc(void){ … } 無入力の場合 整数を3つ入力する場合 6
関数の作り方 (例:2整数を入力して加算する関数) int addnum(int a, int b){ int x; x
= a + b; return x; } この関数は intを 返しますよ という宣言 7
関数の作り方 (例:2整数を入力して加算する関数) int addnum(int a, int b){ int x; x
= a + b; return x; } 値の返し方 (値を返すとこの 関数は終了) 8
実数を1つ返す場合 double myfunc(...){ … } void myfunc(...){ … } では、値を2つ以上返したい時は?
そんなの無理。あきらめよう。 XXXXXXXXXXXXXXXXXXXXXXXXX グローバル変数(p.14)かポインタを使おう。 値を何も返さない場合 9
関数の使い方 int main(void){ … a = addnum(p, q); … }
addnum関数は整数を二つ要求 しているので、整数を二つ渡す (pとqの値は変化しない) 10
変数を3つ渡して値が戻る場合 p = myfunc(x, y, z); w = myfunc(); myfunc();
何も渡さず、何も戻ってこない場合 何も渡さず値が戻る場合 値が何も戻ってこないので、 代入も必要ない。 11
以上をまとめるとこんなイメージ main addnum n p q x a b 引数
戻り値 12 引数
変数は関数の中でしか使えない (ローカル変数) main addnum p,q,n, … addnum関数でどんな変数名が 使われているのかは、 main関数には全く分からない 13
でも関数の外で定義すれば使える (グローバル変数) main addnum p,q,n, … 関数の外で定義すると、 どこの関数でも使える x,y int
x,y; int main(void){ int p,q,n; … } 14
変数のスコープ:まとめと注意 • 変数を定義した場所によって使える範囲が異な る。これを変数のスコープと呼ぶ。 • グローバル変数とローカル変数で同じ変数名を 使うと、ローカル変数が優先される。 • つまりその関数内では同変数名のグローバル変 数は見えないということ
• 関数ごとにどんな変数を使っているのか考えず にすむようにローカル変数がある。だから、どうし ても必要な場合以外グローバル変数は使わない ようにしよう。 15
関数はどこに書くか? int addnum(...){ ... } int main (...){ ... k
= addnum(...); } addnum を 先に定義 addnum がすでに定義されているので 問題なく使える。 16
main関数を先に書くとエラーが出る int main(...){ k = addnum(...); ... } int addnum
(...){ ... } addnum なんていう 関数は知らないぞ! と怒られる。 (プログラムは上から読んで いくので、下に書いてあっても コンパイラは気付かない) 17
そこでコンパイラに存在を教えてあげる (プロトタイプ宣言) int addnum (int, int); int main(...){ k =
addnum(...); ... } int addnum (...){ ... } addnum 関数は intとintを入力して、 intを返す関数ですよ。 詳しくは下のほうの定義を 見てね。という意味 18