|
|
今まで main 関数の中に全てのプログラムを書いてきたが,これでは複雑なプログラムを書くことができない.複雑なプログラムは,プログラムの処理を複数の関数に分割して記述する.
関数は,何らかのまとまった処理を行う単位である.関数を定義すれば,その関数を呼び出すことによって,簡単に処理を行わせることができる.関数を呼び出すことを関数呼び出しと言う.
C言語では,関数を以下のように書く.
返り値の型
関数名(引数の並び)
{
関数の本体
}
|
例えば,整数の絶対値を求める関数は以下のようになる.引数として int 型の整数を受取り,その絶対値を返り値として返している.
/*
* 絶対値を求める関数 absolute
*/
int
absolute(int a)
{
if (a < 0) {
return -a;
} else {
return a;
}
}
|
#include <stdio.h>
int
add(int a, int b)
{
return a + b;
}
main()
{
int a;
a = add(10, 20);
printf("10 + 20 = %d\n", a);
}
|
#include <stdio.h>
/* 整数 a から b までの和を int 型で返す関数 sum の定義 */
/* 2つの int 型の引数をとる */
int
sum(int a, int b) /* a と b に,この関数を呼び出した時の引数が入ってくる */
/* 普通の変数と同じように使える */
{
int i; /* main 関数と同じように,ここでも変数を宣言できる */
int s; /* ここで宣言した変数は,この関数の中だけで使える */
/* 他の関数に同名の変数があっても,影響を与えない */
s = 0;
/* a や b は,通常の変数と同じように使える */
for (i = a ; i <= b ; i++) {
s = s + i;
}
return s; /* return文で計算した値を返す */
}
/*
* 書いた順番に関わらず,Cのプログラムは main 関数から実行される
*/
main()
{
int a;
int i;
/* 定義した関数を利用する例 */
a = sum(1, 10);
printf("1 から 10 の和は %d です\n", a);
for (i = 1 ; i < 10 ; i++) {
printf("%d から10の和は %d です\n", i, sum(i, 10));
}
}
|
引数で指定された数だけ画面に * を表示し,最後に改行する関数 print_bar を書け.print_barの返り値は不要(void).
main 関数は,キーボードから数値を読み込み,それを引数としてprint_bar を繰り返し呼び出す.この処理を利用者が0を入力するまで続ける.
実行例
Number: 5
*****
Number: 20
********************
Number: 0
|
プログラムの構造
/* n 個 * を表示し,最後に改行する関数 */
void
print_bar(int n)
{
/* ここを埋める */
}
main()
{
int num;
for (;;) {
printf("Number: ");
scanf("%d", &num);
if (num == 0) {
break;
}
print_bar(num);
}
}
|
ヒント
次のような図形を書く関数 triangle を書け.* の表示には上で書いた print_bar を使うこと.triangle は引数として行数をとる.返り値は不要(void).
triangle(5)の実行例
テストするために main 関数も作成し,利用者が数を入力すると,その数を引数として triangle を呼び出せ.この処理を0が入力されるまで続けよ
Number: 3
*
**
***
Number: 5
*
**
***
****
*****
Number: 0
|
プログラムの構造
/* n 個 * を表示し,最後に改行する関数 */
void
print_bar(int n)
{
/* 上の問題と同じ */
}
/* n 個 * を表示し,最後に改行する関数 */
void
triangle(int n)
{
....
}
main()
{
....
}
|
キーボードから,0〜99までの数をいくつか入力する.(最大10個まで).10個目を入力したか,0 を入力した後,値と棒グラフを入力した順番に書くプログラムを書け.
実行例
number? 10
number? 1
number? 4
number? 8
number? 0
10: **********
1: *
4: ****
8: ********
|
まず,数値を2桁で右寄せして表示し,その右に棒グラフを表示する関数 print_bar_num を作成せよ.print_bar_num関数は print_bar を呼んで棒グラフを表示する.
print_bar_num(10);の実行例
ヒント
- 2桁右寄せで表示するには printf で "%2d"
- main関数では配列を使って入力した値を覚える.いくつ入力したかも数える必要がある
|