Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

1 プログラミング入門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. 芝浦工業大学情報工学科 青木 義満

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

3 例えば・・・・ 最大体重と最小体重を求めるプログラム(一部) 最大値・最小値を求める処理 その他の数値データ
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

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

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

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

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

8 最初の関数プログラム 関数定義 関数呼び出し 関数定義は, 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

9 関数定義部の構造 ここで作りたい関数 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

10 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

11 関数呼び出しと引数の引渡し過程 重要 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

12 練習問題 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

13 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

14 解説 仮引数,関数の返り値の型を 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

15 三角形の面積 ソースファイル名: 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

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

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

18 例題 --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

19 後置・前置 増分(減分)演算子 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

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

21 演習課題(第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

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

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


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

Similar presentations


Ads by Google