Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
基礎情報処理演習 (8)関数
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
自然言語処理研究室
November 07, 2013
8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
基礎情報処理演習 (8)関数
自然言語処理研究室
November 07, 2013
More Decks by 自然言語処理研究室
See All by 自然言語処理研究室
データサイエンス14_システム.pdf
jnlp
0
420
データサイエンス13_解析.pdf
jnlp
0
550
データサイエンス12_分類.pdf
jnlp
0
380
データサイエンス11_前処理.pdf
jnlp
0
510
Recurrent neural network based language model
jnlp
0
190
自然言語処理研究室 研究概要(2012年)
jnlp
0
170
自然言語処理研究室 研究概要(2013年)
jnlp
0
130
自然言語処理研究室 研究概要(2014年)
jnlp
0
160
自然言語処理研究室 研究概要(2015年)
jnlp
0
240
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
500
Product Roadmaps are Hard
iamctodd
55
13k
How to build a perfect <img>
jonoalderson
1
6k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
Test your architecture with Archunit
thirion
2
2.4k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
730
We Are The Robots
honzajavorek
0
380
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
4 Signs Your Business is Dying
shpigford
187
23k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
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