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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
自然言語処理研究室
November 07, 2013
7.9k
0
Share
基礎情報処理演習 (8)関数
自然言語処理研究室
November 07, 2013
More Decks by 自然言語処理研究室
See All by 自然言語処理研究室
データサイエンス14_システム.pdf
jnlp
0
410
データサイエンス13_解析.pdf
jnlp
0
530
データサイエンス12_分類.pdf
jnlp
0
370
データサイエンス11_前処理.pdf
jnlp
0
490
Recurrent neural network based language model
jnlp
0
160
自然言語処理研究室 研究概要(2012年)
jnlp
0
160
自然言語処理研究室 研究概要(2013年)
jnlp
0
120
自然言語処理研究室 研究概要(2014年)
jnlp
0
150
自然言語処理研究室 研究概要(2015年)
jnlp
0
230
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Test your architecture with Archunit
thirion
1
2.2k
Fireside Chat
paigeccino
42
3.9k
SEO for Brand Visibility & Recognition
aleyda
0
4.5k
Chasing Engaging Ingredients in Design
codingconduct
0
190
Embracing the Ebb and Flow
colly
88
5k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
A Tale of Four Properties
chriscoyier
163
24k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Six Lessons from altMBA
skipperchong
29
4.2k
Unsuck your backbone
ammeep
672
58k
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