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
350
データサイエンス13_解析.pdf
jnlp
0
410
データサイエンス12_分類.pdf
jnlp
0
310
データサイエンス11_前処理.pdf
jnlp
0
430
Recurrent neural network based language model
jnlp
0
110
自然言語処理研究室 研究概要(2012年)
jnlp
0
110
自然言語処理研究室 研究概要(2013年)
jnlp
0
76
自然言語処理研究室 研究概要(2014年)
jnlp
0
89
自然言語処理研究室 研究概要(2015年)
jnlp
0
140
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
65
4.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Visualization
eitanlees
145
15k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
Making Projects Easy
brettharned
115
5.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Fireside Chat
paigeccino
34
3k
Six Lessons from altMBA
skipperchong
27
3.5k
Statistics for Hackers
jakevdp
796
220k
RailsConf 2023
tenderlove
29
900
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