今週で,関数をマスターしてしまおう.
角度を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...