先週に引き続き関数を取り上げます.
レベル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)); }
(アドレス参照の練習)
円の半径を入力すると,円の面積と円周の長さの二つの値を返す関数を作ってみよう.
ヒント:値を返してもらう場所も,関数に伝える必要がある.