今週で,関数をマスターしてしまおう.
角度を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
....
第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 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));
}
フィボナッチ数列を求めるプログラムを作る
フィボナッチの数列とは,(n番目の値)=(n-1番目の値)+(n-2番目の値)
1 1 2 3 5 8 13 21 34...