Teachers open the door but You must enter by yourself.

Open Media Lab.
オープンメディアラボ

関数とは
Function

関数は、複数の引数(入力値)を受けて、何らかの処理をし、一つの戻り値(出力値)を返します。処理には数値演算だけでなく、画面への文字出力や線の描画などがあります。関数は

戻り値の型 関数名( 引数1、引数2、、、)

の形をしています。引数がない(引数の数が0個の)関数もあります。

最小プログラム

C/C++言語のプログラムにはプログラムの開始点(エントリーポイント)となる main という名前の関数が存在する必要があります。すなわち以下が最小のプログラムとなります。


void main(){

}

void は戻り値がない場合に戻り値の型の代わりに書きます。この main 関数は引数なしです。実際には、このmain関数の中に、演算式や関数を組み合わせて処理を書いていきます。

関数の役割1

関数の役割には以下のの大きく2つがあります。


ここでは、printf という名前の関数を使ってコンソール画面に文字を出力してみます。


#include <stdio.h>
void main(){
	printf("Hello\n");
}

自分で作成した以外の関数を利用するためには、対応するヘッダファイルをインクルードする必要があります。「\n」は改行させるためのコードです。


void main(){
	printf("Hello");
	printf("Hello");
}

とすると「\n」の働きを確認することができます。

変数の宣言と演算子

C/C++言語のプログラムでは、以下のように変数を宣言したり、それら同士を演算したりもし、それらを関数と組み合わせて、目的の処理を実現します。


void main(){
	int a, b, c;
	a = 10;
	b = 20;
	c = a + b;
	printf("%d\n",c);
}

整数型変数を3つ宣言して、2つ変数の和を残りの変数に代入しています。

プログラム言語での記号「 = 」は「右辺のものを左辺に代入する」という意味で、数学の等式の「左辺と右辺が等しい」とは意味が違うことに注意してください。

printf の引数 "%d " は整数値を出力して、その後改行コードを出力するという意味で整数の変数を1つ出力する場合は、このようになります。


void main(){
	int a = 10;
	int b = 20;
	printf("%d\n",a+b);
}

これも同じ処理ですが、変数の宣言と同時に値を代入しています。また、変数 c を使わずに和を直接 printf の引数に与えています。見易さに応じてこのように記述の仕方を使い分けるのもプログラミングでは重要です。

関数の役割2

次に cos という名前の関数を使って「戻り値を返す」場合の関数の使い方を見てみます。


void main(){
	double a;
	a = cos(3.14159);
	printf("%f\n",a);
}

関数 cos のように、引数を処理して戻り値を返すタイプの関数は、数学における関数とほぼ同じと思ってよいでしょう。

cos の引数の単位はラジアンなので、3.14159を与えるとcos 180°の値が戻り値として返されます。

cos の戻り値は実数型変数です。printf で実数型変数を出力する場合は、%d の代わりに %f を使います。


void main(){
	double a;
	a = cos(30.0/180.0*3.14159);
	printf("%f\n",a);
}

cos 30°の場合には、30.0 を 180.0 で割って円周率をかけることにより角度の単位をラジアン変換します。

課題

他にどんな算術演算子や算術関数があるかオンラインヘルプで調べてみましょう。

forループ

C/C++言語には、分岐や繰り返しのための文法も用意されています。forループを使って整数1から10までの和を求めてみましょう。


void main(){
	int a = 1+2+3+4+5+6+7+8+9+10;
	printf("%d\n",a);
}

void main(){
	int a = 0;
	a += 1;
	a += 2;
	a += 3;
	a += 4;
	a += 5;
	a += 6;
	a += 7;
	a += 8;
	a += 9;
	a += 10;
	printf("%d\n",a);
}

void main(){
	int a = 0;

	for(int i=1; i<=10; i++) a += i;

	printf("%d\n",a);
}

課題

  1. whileループを使って同じ処理を実現せよ。
  2. forループを使って1から100までの偶数の和を求めよ。
  3. ある自然数 n が与えられたとき、n を割り切る2以上の自然数のうち最小の自然数 i を求めるプログラムを作成せよ。
  4. x を自然数とする。x^3 が初めて 10000 より大きくなるときの x と x^3 の値を求めるプログラムを作成せよ。

This site is powered by Powered by MathJax