1 / 24

関数(1)

第11回[平成15年7月3日(木)]:PN03 - 11 . ppt. 関数(1). 今日の内容. 1 関数とは、関数の必要性 2 戻り値のある関数 3 引数と関数呼び出し 4 戻り値の無い関数 5 関数による配列の取扱い. 関数の必要性. 複数のN × Nの掛け算表を出力する. int a , b ;. b 1 2 3. a 1. printf(&quot; まず、 3 × 3 の表 <br>&quot;); for ( a =1; a &lt;= 3 ; a ++) { for ( b =1; b &lt;= 3 ; b ++)

minowa
Download Presentation

関数(1)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第11回[平成15年7月3日(木)]:PN03-11.ppt第11回[平成15年7月3日(木)]:PN03-11.ppt 関数(1) 今日の内容 1 関数とは、関数の必要性 2 戻り値のある関数 3 引数と関数呼び出し 4 戻り値の無い関数 5 関数による配列の取扱い

  2. 関数の必要性 複数のN×Nの掛け算表を出力する int a, b; b 1 2 3 a1 printf("まず、3×3の表\n"); for ( a=1; a<=3; a++) { for( b=1; b<=3;b++) printf("%3d",a*b); printf("\n"); } 1 2 3 2 4 6 3 6 9 2 3 1 2 3 4 5 6 2 4 6 8 10 12 3 6 9 12 15 18 4 8 12 16 20 24 5 10 15 20 25 30 6 12 18 24 30 36 printf("次に、6×6の表\n"); for ( a=1; a<=6; a++) { for ( b=1; b<=6; b++) { printf("%3d",a*b); printf("\n"); } /*つづく*/

  3. printf("次に、9×9の表\n"); for ( a=1; a<=9; a++) { for ( b=1; b<=9; b++) printf("%3d",a*b); printf("\n"); } 結局、3,6,9という数値Nが違うだけ for ( a=1; a<=N; a++) { for ( b=1; b<=N; b++) printf("%3d",a*b); printf("\n"); } これをNをいろいろ変えて実行できると良い ひとまとまりの仕事を関数 NN_Table(N) で与える

  4. 関数の導入 戻り値の無い関数 ひとまとまりの仕事を何回か呼び出したい例[定まった形式で何回か 印刷する] 値を返さない関数 ある計算方法で何回か結果を得たいとき例[複雑な計算を何回か 行う] 値を返す関数 戻り値のある関数

  5. 戻り値のある関数 • 自分独自の関数を定義し、標準関数[sqrt, pow, sinなど]と同じように利用する例  z = myfn(2.5); • 関数値(戻り値)を返す返す値の型を指定して関数定義する 関数頭部 doublemyfn(double x) { double f; f = x + 2.0*x - 5.5*x*x; return (f); } 関数本体

  6. 戻り値のある関数の定義 例:整数値を受け取り、その値が偶数ならば 0、 奇数ならば 1 を与える関数を作成せよ。 int evod( int k ) { int q; q = k % 2; return (q); } 関数の定義はmain()関数の外に記述する

  7. 関数の定義と実行 #include <stdio.h> int evod(int k) { int q; q = k % 2; return (q); } int main(void) { int i, n; for ( i=1; i<=10; i++) { printf("整数を入力="); scanf("%d",&n); printf("偶数か?>%d\n",evod(n)); } return (0); }

  8. 関数の定義と実行(補足) #include <stdio.h> int main(void) { int i, n; for ( i=1; i<=10; i++) { printf("整数を入力="); scanf("%d",&n); printf("偶数か?>%d\n",evod(n)); } } int evod(int k) { return ( k % 2 ); } int evod(int k); main()関数より後で定義する場合

  9. 間違い探し問題(1) int Sum(int A, int B, int C) { int k; k = A+B+C; return k; } double Sum(double X, Y) { double S; S = X+Y; return; }

  10. 間違い探し問題(2) #include <stdio.h> int Upper(char X) { if (X <= 'Z') return (1); else return (0); } int main(void) { char A,B,C; int T1, T2, T3; ・・・ T1 = Upper(A); ・・・ T2 = Upper(B,C); ・・・ T3 = Upper(T1); ・・・ }

  11. 引数と呼び出しにつて 引数:関数の中に入る式(変数、値) 仮引数 関数の定義の中での引数 実引数 関数を呼び出す時の引数 呼び出し方(値呼び出し) 式(変数や定数など)の値 実引数の値を仮引数にコピー 実引数の値は変化しない !!

  12. 間違い探し問題(3) int Sum(int A, int B, int C) { int Sum; Sum = A+B+C; return (Sum); } double S1(double A, double B) { double Sum; Sum = A+B; if ( B > 0 ) return (A/B); else return (Sum); }

  13. 戻り値のある関数の特徴と一般形 特徴 • 関数の計算結果をreturnで呼出し側に返す • 変数名は命令の定義を行うところでのみ有効 一般形 intfff(int a, int b, double d)//関数の型関数名(型 変数名, 型 変数名, ...) { int x,y;{関数の中だけで使う変数を宣言} ・・・ return(関数の結果値); ・・・ }

  14. 関数の呼出し 戻り値の無い関数の定義と実行 #include <stdio.h> voidNN_Table(int N) { ..(関数定義の本体).. } int main(void) { printf("3×3の表\n"); NN_Table(3); printf("6×6の表\n"); NN_Table(6); printf("9×9の表\n"); NN_Table(9);} 関数の定義

  15. #include <stdio.h> void NN_Table(int N) { int i, j; for (i=1; i<=N; i++) { for (j=1; j<=N; j++) printf("%3d",i*j); printf("\n"); } } int main(void) { ・・・  printf("6×6の表\n"); NN_Table(6);  ・・・    }

  16. 戻り値の無い関数の特徴と一般形 特徴 • 一連の文を一まとまりの命令として定義 • 仮引数と実引数の関係、関数内で宣言された変数の扱いは、戻り値のある関数の場合と同じ 一般形 voidZZZ(int a, int b, double d) //void関数名(型 変数名,....) { int x,y; //関数内で使う変数を宣言 命令の集まり(仕事の手順) }

  17. 戻り値の有無による関数の違い 戻り値のある関数 戻り値の無い関数 returnの型(関数の型)で宣言 void で宣言される 式を伴ったreturn は無い(returnそのものはあっても良い) return 式 で呼び出し側に値を返す 関数は呼び出し側では、文の一部となる ..; x=ff(a);.. 文そのものとなる ..; xyz(7);.. 引数に関する考え方は全く同じである

  18. 引数の無い関数の特徴と一般形 特徴 • 戻り値のある場合、無い場合がある • 呼び出し側からは引数を書かない関数名() • 関数定義で引数のところはvoidとする 一般形 intZZZ(void) //戻り値の型関数名(void) { int x,y; /*関数内の変数の宣言*/ 命令の集まり(仕事の手順) }

  19. 関数(引数、戻り値)のまとめ 戻り値有り 戻り値無し int fn(void) { double x; int k; ・・・ return (k); ・・ } 引数有り int fn(int a) { double x; int k;  ・・・ return (k); ・・ } void fn(int a){ double x, y; ・・・ return; ・・・ } 引数無し void fn(void) { double x, y; ・・・ return; ・・・ }

  20. (標準)ライブラリ関数 • よく用いられる関数などをまとめたファイル • ヘッダファイル[***.h] • #include <***.h>で取り込む 入出力関係scanf,printf stdio.h 数学関数cos, sin, tan, exp, log, log10, sqrt math.h 一般ユーティリティabs, rand, srand stdlib.h

  21. 配列の受け渡し • 仮引数の配列に[]を付け、要素数は別引数で与える int max_of(int vc[], int no) • 実引数には、配列名と要素数を与えるint eng[100];max_e = max_of(eng, 100) int max_of(intvc[], intno) { int i; int max = vc[0]; for ( i=1; i<no; i++) ・・・return (max); } 配列vc[i]を使う

  22. #include <stdio.h> #define NUMBER 5 int max_of(int vc[], int no) {int i; int max = vc[0]; for (i=1; i<no; i++) { if (vc[i]>max) max=vc[i]; return (max); } int main(void) { ・・・  int eng[NUMBER]; k = max_of(eng, NUMBER); ・・・ }

  23. 多次元配列の受け渡し • 仮引数の配列の[]の中に要素数を明記するint max( int vc[5][10]) • 実引数には、配列名だけを与えればよい。define Num1 5define Num2 10int eng[Num1][Num2];max_e = max(eng); • 仮引数の配列は実引数の配列そのもの → 書き換えが可能 ただし、第1添え字は省略可能int max( int vc[][10], int no1) max(eng , int Num1);

  24. P入門(第11回)は終了です。次回(第12回)は7月10日P入門(第11回)は終了です。次回(第12回)は7月10日 続いて、P演習に入ります。では、しばらく休憩します。

More Related