先週に引き続き関数を取り上げます.
レベル1:三角形の底辺の長さと高さを入力する時,面積を求めて戻す関数を作成せよ
#include <stdio.h>
float sankaku(int a, int b) 
{
    float s;
    s = a * b / 2.0;
    return s;
}
void main()
{
    int a, b;
    float s;
    printf("三角形の面積を求めます\n");
    printf("底辺の長さを入力してください:");
    scanf("%d", &a);
    printf("高さを入力してください:");
    scanf("%d", &b);
    s = sankaku(a, b);        //関数を呼び出す
    printf("三角形の面積は,%fです.", s);
}
			
簡単なプログラムで確認してみましょう.
#include <stdio.h>
int test(int a) 
{
    a += 10;
    return a;
}
void main()
{
    int a, b;
    printf("aの値を入力してください:");
    scanf("%d", &a);
    b = test(a);
    printf("aの値は%d\nbの値は%d\n", a, b);
}
				aに2を入力すると,結果はどのように表示されるだろう.
これまでは,一つの値しか関数から戻すことができなかった.また,同じ変数名を使っていても,関数の方で値を変えても,mainでは変化しなかった.これは,関数には変数の中身が伝えられているためです.
では,関数に変数をしまってある場所を伝えたらどうなるだろう.

上のプログラムで確認してみましょう.
#include <stdio.h>
int test2(int *a)        //変数aのアドレスを受け取る(ポインタ変数)
{
    *a += 10;        //aの指すアドレスの中身に1を加えるから,main関数でも変化する
    return *a;
}
void main()
{
    int a, b;
    printf("aの値を入力してください:");
    scanf("%d", &a);
    b = test2(&a);        //変数aのアドレスを関数に渡す
    printf("aの値は%d\nbの値は%d\n", a, b);
}
							aに2を入力すると,結果はどのように表示されるだろう.
(関数の練習)よく使う関数を用意しておこう.
1.二つの整数を渡すと,大きい方を答える関数
								2.整数の2乗を計算する関数
								3.整数の3乗を計算する関数
								4.整数のn乗を計算する関数
								5.整数の階乗を計算する関数
main関数の部分はこんな感じ.あとは,関数の定義部分を作ってみよう.
void main()
{
    int a, b, n;
    printf("aの値を入力してください:");
    scanf("%d", &a);
    printf("bの値を入力してください:");
    scanf("%d", &b);
    printf("n乗のnの値を入力してください:");
    scanf("%d", &n);  
    printf("大きい数の値は%d\n", large(a, b));
    printf("aの2乗は%d\n", square(a));
    printf("bの3乗は%d\n", cube(b));
    printf("aの%d乗は%d\n", n, power(a, n));
    printf("bの階乗は%d\n", factorial(b));
}
									(アドレス参照の練習)
円の半径を入力すると,円の面積と円周の長さの二つの値を返す関数を作ってみよう.
ヒント:値を返してもらう場所も,関数に伝える必要がある.