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

Slides:



Advertisements
Similar presentations
プログラミング演習Ⅱ 第1回 ガイダンス 情報・知能工学系 山本一公 本演習の概要(1) C 言語の「基礎知識」の習得 – プログラミング演習Ⅰの続き – 配列、関数、ポインタ等 – プログラミング演習Ⅰの内容だけでは、 とてもじゃないが「 C 言語を勉強した」とは 言えない.
Advertisements

プログラミング演習Ⅱ 第 11 回 ポインタ(2) 情報・知能工学系 山本一公
プログラミング演習Ⅱ 第 8 回 マクロ・列挙体等 情報・知能工学系 山本一公
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング演習(2組) 第12回
第13回 プログラミングⅡ 第13回
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
第8回 プログラミングⅡ 第8回
構造体.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月6日、H.16(‘04)] 今日のメニュー 1 前回の課題の復習
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
関数 関数とスタック.
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
第10回 プログラミングⅡ 第10回
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
プログラミング入門2 第5回 関数(1) 芝浦工業大学情報工学科 青木 義満
プログラミング2 関数
プログラミング 2 ファイル処理.
プログラミング論 ファイル入出力
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング演習I 2003年6月25日(第10回) 木村巌.
第10章 これはかなり大変な事項!! ~ポインタ~
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
プログラミング論 ファイル入出力
第11回 プログラミングⅡ 第11回
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
プログラミング基礎B 文字列の扱い.
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
プログラミング 3 2 次元配列.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
第10回 関数と再帰.
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
Presentation transcript:

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

前回の課題の解説・ポイント 課題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]; }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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