関数の基礎


●プログラムを作成していると,何度も同じ処理を書かなければならないことがある。
 しかし,そのつど同じ処理の内容を書くのは手間がかかってたいへんである。そこで,
 一回,処理をまとめて書いておき,必要なときに再利用できれば便利である。この,
 再利用のためにまとめられたものを,サブルーチン(sub routine)とか,プロシージャ
 (procedure)などと言う。特にC言語では,関数(function)と呼ばれる。今回は関数の
 基礎について学習しよう。

以下に,関数の基本事項を示す。



●関数の考え方

function1-1

・▼HTMLアニメーションによる解説(Google Chromeで再生してください。右下に「クリック」と表示されたらクリックで次に進めます) (ローカル再生版)

    最初から再生




    ●main( )関数とC言語プログラムの動作の仕方(「関数が関数を呼び出す」連鎖でプログラムが動く)

    function1-2




    ●関数の利用と動作の流れ ( 例:平均値を計算して返してくれる関数 average( ) )

    ・▼HTMLアニメーションによる解説(Google Chromeで再生してください。右下に「クリック」と表示されたらクリックで次に進めます) (ローカル再生版)
    最初から再生





    ●関数の定義の仕方(基本編)

    function2-1

    問題1:2つのint型引数の内,大きい方を返す関数 myMax( ) を完成せよ。ファイル名は
    myMax.cpp とする。


    解答はWebClassのこちら(問題2とは提出先が異なります)に提出せよ(7/5 9:15締切)。

    問題2:1個のint型整数を受け取り,それが偶数なら整数値1を,奇数なら整数値0
    を返す関数 isEven( ) を定義せよ。ファイル名は isEven.cpp とする。


    解答はWebClassのこちら(問題1とは提出先が異なります)に提出せよ(7/5 9:15締切)。
    01#include <stdio.h>
    02  
    03int myMax( int x, int y ) {
    04    /* ここを完成させる */
    05}
    06  
    07int main( void ) {
    08    int a, b;
    09    printf( "a = " ); scanf_s( "%d", &a );
    10    printf( "b = " ); scanf_s( "%d", &b );
    11    printf( "max is %d\n", myMax( a, b ) );
    12    // getchar(); getchar(); // VisualStudio 2010用
    13    return 0;
    14}
    01#include <stdio.h>
    02  
    03int isEven( int n ) {
    04    /* ここを完成させる */
    05}
    06  
    07int main( void ) {
    08    int a;
    09    printf( "a = " ); scanf_s( "%d", &a );
    10    if( isEven( a ) == 1 ) printf( “%d は偶数”, a );
    11    if( isEven( a ) == 0 ) printf( “%d は奇数”, a );
    12    // getchar(); getchar(); // VisualStudio 2010用
    13    return 0;
    14}




    ●関数の定義の仕方(引数と返値の有無)




    引数・返値の有無の組み合わせで分類してみよう(下図にマウスカーソルを重ねると補助の説明フキダシが表示されます)





    ●関数の定義の仕方(配列を受け取る関数)



    上図で例に挙げた関数 displayIntArray( ) の使用例
    01#include <stdio.h>
    02  
    03// 第1引数に受け取ったint型配列の要素をすべて表示する。第2引数にはその配列の要素数を渡す。
    04void displayIntArray( int a[ ], int length ) {
    05    int i;
    06    for( i = 0; i < length; i++ ) {
    07        printf( "%d, ", a[i] ); // 受け取った配列のi番目の要素を表示する
    08    }
    09    printf( "\n" ); // 最後に改行を表示する
    10}
    11  
    12int main( void ) {
    13     
    14    int array1[] = { 3, 7, 2, 9, -1 };
    15    int array2[] = { 5, 1, 0, 3, 7, 10, 20 };
    16     
    17    displayIntArray( array1, 5 );  // 配列array1 の要素をすべて表示する
    18    displayIntArray( array2, 7 );  // 配列array2 の要素をすべて表示する
    19     
    20    // getchar(); getchar(); // VisualStudio 2010用
    21    return 0;
    22}