プログラミング入門2 第5回 関数(1) 芝浦工業大学情報工学科 青木 義満

Slides:



Advertisements
Similar presentations
第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
Advertisements

プログラミング入門2 芝浦工業大学情報工学科青木 義満 第6回関数(2). プログラミング入門2 2 今回の講義内容 関数 配列データの受け渡し ( p.130 ~) 入出力と文字 ( p.198 ~) 文字列の基本 ( p.208 ~)
プログラミング演習( 2 組) 第 9 回
プログラミング入門2 第1回 イントロダクション 芝浦工業大学情報工学科 青木 義満
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
プログラミング演習(1組) 第7回
関数(1) 第11回 [6月29日、H.16(‘04)] 今日のメニュー 1 前回の課題 2 前回の宿題 3 いろいろな関数の演習 4 課題
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
ポインタ プログラミング入門2 第10回 芝浦工業大学情報工学科 青木 義満
プログラミング入門2 第7回 文字列 数学関数 ファイルの入出力 芝浦工業大学情報工学科 青木 義満
第13回構造体.
第12回構造体.
プログラミング入門2 ポインタについて補足 構造体 第11回 芝浦工業大学情報工学科 青木 義満、篠埜 功
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
プログラミング入門2 第6回 関数(2) 芝浦工業大学情報工学科 青木 義満
プログラミング演習(2組) 第12回
情報理論2 第6回 小林 学 湘南工科大学 2011年11月15日 〒 神奈川県藤沢市辻堂西海岸1-1-25
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月6日、H.16(‘04)] 今日のメニュー 1 前回の課題の復習
プログラミング入門2 第12回 データ型 関数のプロトタイプ宣言 動的な記憶域確保 芝浦工業大学情報工学科 青木 義満
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
プログラミング入門2 第2回 複合文、繰り返し 情報工学科 篠埜 功.
関数 関数とスタック.
プログラミング入門2 第3回 繰り返し文 芝浦工業大学情報工学科 青木 義満
構造体 プログラミング入門2 芝浦工業大学情報工学科 青木 義満
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング2 関数
プログラミング入門2 ファイルの入出力 ポインタ 芝浦工業大学情報工学科 青木 義満
Computer Graphics 第3回 座標変換 芝浦工業大学情報工学科 青木 義満
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング入門2 第2回 演算と型 条件分岐 芝浦工業大学情報工学科 青木 義満
プログラミング演習I 2003年6月25日(第10回) 木村巌.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
Computer Graphics 第10回 レンダリング(4) マッピング
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング入門2 第12回 データ型 関数のプロトタイプ宣言 動的な記憶域確保 芝浦工業大学情報工学科 青木 義満
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
疑似乱数, モンテカルロ法によるシミュレーション
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
C言語 はじめに 2016年 吉田研究室.
プログラミング序論演習.
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
第5回 プログラミングⅡ 第5回
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング入門2 第5回 配列 変数宣言、初期化について
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第9回(後半第3回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
Presentation transcript:

プログラミング入門2 第5回 関数(1) 芝浦工業大学情報工学科 青木 義満 I’ll get started with Introduction and Conventional works around our study, then mention our motivation and goal. Next, I’ll explain our 3D Face Modeling Method and its medical application. Finally, I’ll conclude this presentation with some future works. 芝浦工業大学情報工学科 青木 義満

自作関数 今回の講義内容 関数 自分で好きな処理を行う命令を作れない? 画面表示の関数 キーボード読み込み printf, puts, putchar キーボード読み込み scanf  自分で好きな処理を行う命令を作れない? ()内に決められたパラメータを与え, 命令を実行(あらかじめ用意された関数) 自作関数 プログラミング入門2

例えば・・・・ 最大体重と最小体重を求めるプログラム(一部) 最大値・最小値を求める処理 その他の数値データ double weight[NUM]; double min, max; min = max = weight[0]; for( i= 1; i < NUM; i++ ){ if ( weight[i] > max ) max = weight[i]: if ( weight[i] < min ) min = weight[i]: } 最大値・最小値を求める処理 その他の数値データ  ・得点,収入,身長,座標値,etc に対しても全く同様の処理を適用可能 処理をひとまとめにして, 関数として定義 プログラミング入門2

おまじないの謎(main関数) main関数 #include <stdio.h> int main(void) { ・・・・・ return(0); } main関数 ・C言語のプログラム中には  必ず一つ必要 ・プログラムの本体 ・main自体が一つの大きな関数 プログラミング入門2

ライブラリ関数 printf( “羊が%d匹 \n”, num ); ライブラリ関数 puts( “あいうえお” ); 今まで使用してきたC言語の命令 printf( “羊が%d匹 \n”, num ); ライブラリ関数 C言語が用意する標準的な関数群 puts( “あいうえお” ); scanf( “%d” , &num ); どれも()内に決められたパラメータを受け取り, 仕事をこなす(画面表示,値読込み等) プログラミング入門2

関数は()内に決められたパラメータを受け取り, 関数を作る上での重要事項 関数は()内に決められたパラメータを受け取り, 定められた仕事をこなす 関数の名前? どんな値(型,個数)を受け取る? 何の仕事をさせる? 結果として,計算結果を返すか? 関数定義 が必要! プログラミング入門2

おまじないの謎(#include <stdio.h>) int main(void) { printf(・・・・); scanf(・・・・); return(0); } ライブラリ関数 関数を使うために必要な, ・()内に受け取るもの ・処理内容 はどこに定義?  #include <stdio.h> 標準入出力ヘッダファイル (Standard input output header) ・printf, puts, scanf などの入出力関数の宣言 インクルード(取り込む) printfなどの関数をプログラム中で使うために,その内容が記述されている ヘッダファイル(stdio.h)をインクルード(プログラムに読み込む)している プログラミング入門2

最初の関数プログラム 関数定義 関数呼び出し 関数定義は, main文の前! ソースファイル名:list0601.c (p.115) 内容:二つの整数の大きい方の値を返す関数を作る ねらい: 関数定義と関数呼び出しの理解 #include <stdio.h> int maxof(int x, int y) { if (x > y) return (x); else return (y); } int main(void) int na, nb, max; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &na); printf("整数2:"); scanf("%d", &nb); max = maxof( na, nb ); printf("大きい方の値は%dです。\n", max ); return (0); 関数定義 関数定義は, main文の前! (後ろに書く方法もあり) 関数呼び出し プログラミング入門2

関数定義部の構造 ここで作りたい関数 2つの整数のデータを渡して,そのうち大きい方のデータを返す 処理をさせる関数の名前を,maxof としよう 受け取る値(引数)は,整数値2つなので,int型が2つ必要 大きい方の値を求めて,その値(int型)を返す 返却値の型 関数名 仮引数 int型の2つの値を受け取り,(仮引数) 結果をint型の値で返す(返却値型) maxofという名前の関数を定義(関数名) int maxof( int x, int y ) { if (x > y) return (x); else return (y); } 関数本体 処理内容を記述 この場合,受け取った2つの値の 大小を判定し,大きい方を返す(return) プログラミング入門2

max = maxof( na, nb ); 関数呼び出し部の構造 定義したmaxof関数に判定したい2つの整数の値を渡し, 結果として大きい方の値を返してもらいたい <main文中の関数呼び出し> int na, nb, max; max = maxof( na, nb ); 関数名 実引数 int maxof( int x, int y ) { if (x > y) return (x); else    return (y); } maxof関数本体 式maxof(na, nb)の値が, 関数の返り値となる! プログラミング入門2

関数呼び出しと引数の引渡し過程 重要 max = maxof( na, nb ); 実引数na, nbの値が,仮引数x, yに main関数 実引数na, nbの値が,仮引数x, yに それぞれコピーされる (変数そのものでなく,中に格納されている値      が受け渡される!) 重要 int main(void) {    int na, nb, max;    na = 24;    nb = 62;    ・・・・ } 実引数 max = maxof( na, nb ); 62 62 24 int maxof( int x, int y ) { if (x > y) return (x); else return (y); } 62 仮引数 returnか,関数最後の } で 呼び出し元へ戻る プログラミング入門2

練習問題 List0601を変更し,int型整数の小さい方を返す関数   int minof(int x, int y){ ・・・・・ } を作成しなさい 。   ※動作確認のため,main文も書くこと #include <stdio.h> int minof(int x, int y) { if (x < y) return (x); else return (y); } int main(void) int na, nb, min; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &na); printf("整数2:"); scanf("%d", &nb); min = minof( na, nb ); printf(“小さい方の値は%dです。\n", min ); return (0); プログラミング入門2

3値(実数)の最大値 double型の場合, scanfは%lfで読込み! ソースファイル名:list0602.c (p.118) (若干変更) 内容:3つの実数(double型)のうち,最大値を返す関数を作る #include <stdio.h> double max3(double x, double y, double z) {   double max = x;   if (y > max) max = y;   if (z > max) max = z;   return (max); } int main(void)   double na, nb, nc;   puts(“三つの実数を入力してください。");   printf(“実数1:”); scanf("%lf", &na);   printf(“実数2:”); scanf("%lf", &nb);   printf(“実数3:”); scanf("%lf", &nc);   printf(“最も大きい値は %f です。\n", max3(na, nb, nc));   return (0); double型の場合, scanfは%lfで読込み! プログラミング入門2

解説 仮引数,関数の返り値の型を double に変更 double max3(double x, double y, double z) {   double max = x;   if (y > max) max = y;   if (z > max) max = z;   return (max); } 関数の中で使う変数を 関数の先頭で宣言 注)寿命は関数の中のみ。   関数を抜けた時点でmaxという変数は消滅  printf(“最も大きい値は %f です。\n", max3(na, nb, nc) ); 関数呼出し 返り値(最大値) プログラミング入門2

三角形の面積 ソースファイル名: menseki.c 直角三角形のa, bの長さを与え,面積を求める関数を作成 b S a #include <stdio.h> double menseki(double x, double y ) {   double s;   s = x * y / 2.0;   return (s); } int main(void)   double a, b;   puts(“2辺の長さを入力");   printf(“実数1:”); scanf("%lf", &a);   printf(“実数2:”); scanf("%lf", &b);   printf(“斜辺の長さは %f です。\n", menseki( a, b) );   return (0); return( x * y / 2.0 ); プログラミング入門2

値を返さない関数 ソースファイル名: hello.c 画面に「Hello!」と表示して改行を行う関数を作成 int main(void) #include <stdio.h> void hello(void) { puts( “Hello!!” ); } int main(void) hello( ); return (0); プログラミング入門2

void hello(void) 値を返さない関数 (解説) int main(void) 特に値を返す必要がない時,関数の返却値型を 値を返さない関数 (解説) 関数定義部 void hello(void) 返却値型  引数型 特に値を返す必要がない時,関数の返却値型を void(空) と宣言 引数を受け取る必要のない時,引数を受け取らないという意味で,void と宣言 int main(void) { return (0); } main関数 引数は受け取らない (受け取ることもできる) プログラムの最後で, intの値(0)を返す プログラミング入門2

例題 --no > 0 とすると? while( no-- > 0 ) putchar( ‘*’ ); void put_stars( int no ) { ・・・・・・ } を作成し,動作を確かめよ ソースファイル名: stars.c #include <stdio.h> void put_stars( int no ) { while( no-- > 0 ) putchar( ‘*’ ); } int main(void) int x; printf( “input no: ” ); scanf( “%d”, &x ); put_stars( x ); return (0); --no > 0 とすると? プログラミング入門2

後置・前置 増分(減分)演算子 while( no-- > 0 ) putchar( ‘*’ ); 後置・前置 増分(減分)演算子  後置の場合: 式全体を評価してから,値を減らす(増やす) while( no-- > 0 ) putchar( ‘*’ ); no > 0 を評価 no : 5→4→3→2→1  ***** no-- を実行 (noを一つ減らす)  前置の場合: 値を増減してから,式全体を評価 no-- を実行 (noを一つ減らす) while( --no > 0 ) putchar( ‘*’ ); no : 4→3→2→1  **** no > 0 を評価 プログラミング入門2

関数利用のメリット main関数の部分を簡潔に記述可能 頻繁に使う処理を関数(サブルーチン)としてまとめておくことで,他のプログラムへの移植,流用が容易になる 汎用性の高いプログラムの作成 プログラミング入門2

演習課題(第5回目) 1.自然数xの階乗を計算し、計算結果を返す関数 int kaijou( int x ){ ・・・・・・・ }  を作成せよ。main関数を作り,キーボードから自然数を入力して,関数の動作を確認すること。 kadai5-1.c 2. 2つの2次元ベクトル 3. 以下の2x3行列(A)と3x2行列(B)の積を計算して表示する プログラムを作成せよ。 の内積値を返す関数 double naiseki( double x1, double y1, double x2, double y2){ ・・・・・・・ } を作成せよ。main関数で各ベクトルの成分をキーボードから入力し,関数の動作を確認すること。 Kadai5-2.c Kadai5-3.c プログラミング入門2

ソースファイル3つ(それぞれ,kadai5-1. c 〜 kadai5-3 ソースファイル3つ(それぞれ,kadai5-1.c 〜 kadai5-3.c) をメールに添付して提出せよ。 注:授業中にできた課題は授業中にチェックしてもらうこと。 注:授業中チェック済みの人も、メールにて課題を提出すること。 提出方法:   メールの題名(subjet)を, pro2-5 学籍番号 自分の苗字 (全て半角英数文字にて)とする。 例) pro2-5 L02001 aoki 提出先: yaoki@sic.shibaura-it.ac.jp (青木アドレス) 提出期限: 11月5日(月) 13:00まで(時間厳守) プログラミング入門2

中間テスト 日時:11月19日(月)3限に実施 場所:未定 内容: 期末と並んで評価の上で重要な試験、しっかり準備してのぞむこと。 最初〜関数まで 期末と並んで評価の上で重要な試験、しっかり準備してのぞむこと。 プログラミング入門2