Presentation is loading. Please wait.

Presentation is loading. Please wait.

情報・知能工学系 山本一公 kyama@tut.jp プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公 kyama@tut.jp.

Similar presentations


Presentation on theme: "情報・知能工学系 山本一公 kyama@tut.jp プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公 kyama@tut.jp."— Presentation transcript:

1 情報・知能工学系 山本一公 kyama@tut.jp
プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公

2 前回の課題の解説・ポイント 課題3-1・3-2 3重のforループ
初期化はできるだけ実際の処理の近くでやった方が、後でプログラムを読むときに分かりやすい for (i = 0; i < xcol; i++) { for (j = 0; j < xrow; j++) { c[i][j] = 0.0; for (k = 0; k < yrow; k++) { c[i][j] += a[i][k] * b[k][j]; }

3 課題2の採点結果から 課題2-1 課題2-2 コメント以外の部分に全角スペースを入れないこと 意図通りのプログラムになってない人がいた
「配列を逆順にコピー」なので、表示だけ逆順にしてもダメ 課題2-2 累和を取る際に初期化を行っていない 自分で初期化しないと(もともとメモリ上にあった)変な値が入っていることがある 変な値の上に値を足すことになるので結果も変な値になる 処理系によって初期化の仕様は異なる 自動的な初期化に期待しないで、自分で初期化すること コメント以外の部分に全角スペースを入れないこと

4 今日の内容 教科書 pp.114~129 関数 関数への値の渡し方・受け取り方 値を返さない関数 仮引数を受け取らない関数 プロトタイプ宣言
関数定義・関数呼び出し ライブラリ関数 main関数 関数への値の渡し方・受け取り方 値を返さない関数 仮引数を受け取らない関数 プロトタイプ宣言

5 関数とは?(1) 数学の「関数」(function) プログラミング言語の「関数」
「ある変数に依存して決まる値あるいはその対応を表す式のこと」(Wikipediaより) プログラミング言語の「関数」 「プログラム中で意味や内容がまとまっている作業をひとつの手続きとしたもの」(Wikipediaより) 数学の関数のように、値を与えると値を返す 値を与えなくても良いし、返さなくても良い 値を返すものをfunction(関数)、返さないものをprocedure(手続き)として区別する言語もある(Pascal等) C言語はどちらもfunction

6 関数とは?(2) 関数の定義の仕方 仮引数(かりひきすう):関数に渡す値を定義しておくもの
返却値:関数が呼び出し元に返す値。「戻り値」とも言う。 仮引数と返却値はなくてもよい 返却値の型 関数名(仮引数1の型 仮引数1の変数名,           仮引数2の型 仮引数2の変数名,           ……,           仮引数Nの型 仮引数Nの変数名)  変数宣言  処理  return 返却値の式;

7 関数とは?(3) 関数の呼び出し方 関数呼び出し式 返却値を直接演算しても良い 返却値のない関数、引数のない関数もある
返却値を入れる変数名=関数名(実引数1の変数名,実引数2の変数名, ……,実引数Nの変数名); y = f(x) * g(x); z = f(g(x)); perror(“main”); /* システムのエラーを表示する関数 */ ch = getchar(); /* 標準入力から1文字読み込む関数 */

8 関数とは?(4) ライブラリ関数 これまでに既にたくさん使用している システムが用意してくれている関数
printf関数、scanf関数 puts関数、putchar関数 fopen関数、fclose関数 fprintf関数、fscanf関数 fread関数、fwrite関数 システムが用意してくれている関数 返却値の型や引数の数は、stdio.hに書いてある!

9 関数とは?(5) mainも関数 関数の定義から考えれば当然のこと 呼び出し元は、コマンドシェル(コマンドラインで実行した場合)
C言語は関数言語である 呼び出し元は、コマンドシェル(コマンドラインで実行した場合) 返却値はコマンドシェルが受け取る returnで定義 通常 0 が正常終了を、それ以外の値は異常終了を示す 実行は必ずmain関数から! プログラム内に複数の関数があってもmainから! mainがプログラムの一番最後に書かれていてもmainから!

10 値の渡され方 関数が呼び出される際 この仕組みを「値渡し」と言う 実引数の値が仮引数にコピーされる
教科書 p.116, Fig.6-4 関数で変数をどう弄っても、 呼び出し元の変数には影響しない 教科書 p.121, List 6-5 実引数と仮引数はプログラム上で別物 実引数と仮引数の変数名が同じである必要もない! この仕組みを「値渡し」と言う ⇔「参照渡し」(変数の入れ物を渡すやり方)

11 関数の処理の流れと終了 関数が呼び出されると処理が関数に移る 関数の処理が実行される 関数は、 呼び出されたところに処理を戻す
関数の終わりに到達する return文が実行される のどちらかにより終了 呼び出されたところに処理を戻す returnの後ろに返却値の式を書かないと、返却値は不定となる 返却値が不要ならreturnを書かなくても良い

12 値を返さない・受け取らない関数 返却値を持たない関数 仮引数を持たない関数 返却値の型を void にする
return文ではreturnのみを書くか、return文そのものを書かない 教科書 p.122, List 6-7 仮引数を持たない関数 仮引数の宣言部分に void と書く 実引数の部分には何も書かない 教科書 p.124, List 6-9

13 関数プロトタイプ宣言 プログラムの中で、関数が呼び出し元よりも後に書かれている場合
呼び出し元では返却値の型と引数の型・数が分からない コンパイラがチェックできなくて困る! プログラムの先頭で、使う関数の返却値の型、引数の型・数“だけ”を宣言しておく これを「プロトタイプ宣言」と言う 呼び出し式を関数定義の後ろに書けば、プロトタイプ宣言は要らない

14 ヘッダとインクルード ライブラリ関数のプロトタイプ宣言は、stdio.hに書かれている!
これをプログラム内の関数呼び出し式の前に入れる必要がある “#include <stdio.h>”が先頭にあるのはこのため! 自作の関数用に自前でヘッダファイルを用意することもできる プログラムと同じ場所にヘッダファイル(myheader.h)がある場合は、 #include “myheader.h” のように”<””>”でなくダブルクォーテーションで囲む

15 今週の課題 教科書 p.118, 演習6-2のプログラムを作成せよ。演習6-1の問題文にあるように、main関数なども作成して完成したプログラムを作ること。 教科書 pp.105, List 5-15にある一番簡単な素数判定アルゴリズムを利用して、int型整数の素数判定を行う関数 int prime(int x) { /* … */ } を作成せよ。返却値はxが素数の場合は1、それ以外の場合は0とせよ。main関数なども作成して完成したプログラムを作ること。

16 レポートについて 電子メールで提出 提出先は prog2@slp.cs.tut.ac.jp
Subjectを「プログラミング演習2 課題4提出 学籍番号・氏名 」とすること C言語ソースファイルを添付する メールの本文には何も書かなくて良いです ソースファイルの頭にコメントで以下の情報を入れる 学籍番号・氏名 プログラムの説明(どのように動くのか、工夫した点等) 実行結果(長い場合は一部)を貼る 提出締切は、11月7日(水) 12:00 (1週間後)

17 授業用Webサイト URL: http://www.slp.cs.tut.ac.jp/~kyama/programming2/
課題のpdfファイルが置いてあります。 授業で使ったpptファイルを置いていきます。 質問メールは、以下のどちらかのアドレスまで C-515へ直接質問しに来ても構いません


Download ppt "情報・知能工学系 山本一公 kyama@tut.jp プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公 kyama@tut.jp."

Similar presentations


Ads by Google