第8回:関数(5)

今週で,関数をマスターしてしまおう.


演習 1

角度を0度から360度まで変えたときの,角度,sin, cosの各値をコンマ","で区切って画面に表示するプログラムを作ろう.

sin, cosの関数は,すでにシステムに用意されています.数学関数を使うには,

#include <math.h>

として,プログラムの最初で関数の定義を読み込む必要があります.それぞれ,

double sin(double x);

double cos(double x);

と定義されています.ここで,注意しなくてはいけないのは,三角関数の角度の単位はラジアンであるということです.

結果の例: 

0, 0.000000, 1.000000
1, 0.017452, 0.999848
2, 0.034898, 0.999391
....


演習 2

第5回の演習で作成した,変数のaとbを入れ替える関数,文字数を数える関数の考えを利用して,入力されたアルファベットの小文字の文字列をabc順に並べ替えるプログラムを関数を用いて作成せよ.

手順:

   文字数を数える関数を用いて,文字数を数える

   二つの文字を入れ替えるswapという関数を作る

   swap関数をもちいて,配列の並べ替えをするsortという関数を作る

(ヒント)関数の中から,すでに定義してある別の関数を呼び出して使うことができる.

#include <stdio.h>

void swap_char(char *a, char *b)
{
....
}

int moji_nagasa(char *str)
{
....
} 
 
void sort(char *s)
{
....
}


void main()
{
    char s[256], t;
    int n, i, j;

    //文字列の入力
    printf("単語を入力してください:");
    scanf("%s", s);
    printf("入力された文字列は%sです.\n", s);

    // 並び替え
    sort(s);

    printf("結果 : %s\n", s);
}


再帰呼び出し

C言語の関数は,ある関数の中で,自分自身を呼び出すことができます.これを,再帰呼び出し(recursive call)と呼びます.

値nの階乗を求めるプログラムを,再帰呼び出しで作ってみましょう.

演習で作成したループを使って,n!を求めるプログラムを参考に,再帰を用いて,n!を求めるプログラムを作成する.

考え方:n! = n X (n-1)!

#include <stdio.h>

int factorial(int a)
{
    int b;
    if(a==1){
        return 1;
    }else{
        b = a * factorial(a-1);
        return b;
    }
}

void main()
{
    int b;

    printf("bの値を入力してください:");
    scanf("%d", &b);

    printf("bの階乗は%d\n", factorial(b));
}

演習 3

フィボナッチ数列を求めるプログラムを作る

フィボナッチの数列とは,(n番目の値)=(n-1番目の値)+(n-2番目の値)

1 1 2 3 5 8 13 21 34...