C言語 入門 小学生でもわかるC言語2

三日目 関数(まとめ)

「わかりやすく!」がテーマです!

HOME/小学生でもわかるC言語2 目次/三日目 関数(まとめ)/

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2016/5/10 22:16時点)

もっと!C、C++言語本

目次へ戻る

?と思ったら

わからなそうな用語集

渡して受け取る

今回は関数のまとめとして他の関数に値を渡して、その関数から値を受け取るという一連の流れをやっていきましょう。

四角形の面積を計算するプログラムを作ります。

1・縦と横の長さを関数「menseki」に渡す

2・関数「menseki」で計算された答えを受け取る

という流れでいきたいと思います。

/*プログラム13*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int menseki(int ,int);

int main(){
	
	int tate,yoko,ans;

	printf("四角形の面積を計算します!\n");
	printf("縦の長さを入力してください>");
	scanf("%d",&tate);

	printf("横の長さを入力してください>");
	scanf("%d",&yoko);

	ans = menseki(tate,yoko);

	printf("\n四角形の面積は%dです!\n",ans);

	return 0;
}

int menseki(int tate,int yoko){
	int ans;
	ans = tate * yoko;
	return ans;
}

■実行結果■

実行結果(e-3-1)
#define _CRT_SECURE_NO_WARNINGS

謎の言葉が出てきました。これは古いタイプの関数「scanf」を使えるようにするためのおまじないなので、気にせずに行きましょう。

まずはプロトタイプ宣言です

int menseki(int ,int);

関数「menseki」に渡すのは縦の長さと横の長さの2つの数字なので(int ,int)となります。

そして答えとして返ってくるのが面積にあたる数字です。頭に「int」が付きますね。

では関数「menseki」の中を見てみましょう。

int menseki(int tate,int yoko){
	int ans;
	ans = tate * yoko;
	return ans;
}

「int main()」から渡された縦と横の長さを変数「tate」と「yoko」として、「tate × yoko」を計算し答えの面積にあたる変数「ans」に計算してから代入します。

そして「int main()」に答えの「ans」を返します。

return ans;

他の関数に値を渡して、その関数から値を受け取るという一連の流れができました!

良い関数・悪い関数

関数を作る時は

1・目的をはっきりさせる

2・他のプログラムでも使えるようにする

この2点が大事だそうです。

次のプログラムを見てください。

「5人分の点数の平均、一番、ビリを表示する」

プログラムです。

1・平均を求める関数

2・1番の点数を求める関数

3・ビリの点数を求める関数

4・結果を画面に表示する関数

という4つの関数を用意して「int main()」で組み合わせていきます。

/*プログラム14*/
#include <stdio.h>

int heikin(int[]);
int itiban(int[]);
int biri(int[]);

void disp(char,int);

int main(){
		
	int no[5] = {80,70,40,30,90};
	int ans;
	char type;

	type = 'a';
	ans = heikin(no);
	disp(type,ans);

	type = 'b';
	ans = itiban(no);
	disp(type,ans);

	type = 'c';
	ans = biri(no);
	disp(type,ans);

	return 0;
}

int heikin(int no[5]){
	int ans;
	ans = ((no[0] + no[1] + no[2] + no[3] + no[4]) / 5);
	return ans;
}

int itiban(int no[5]){
	int ans;
	ans = no[0];

	if(ans < no[1])ans = no[1];
	if(ans < no[2])ans = no[2];
	if(ans < no[3])ans = no[3];
	if(ans < no[4])ans = no[4];

	return ans;
}

int biri(int no[5]){
	int ans;
	ans = no[0];

	if(ans > no[1])ans = no[1];
	if(ans > no[2])ans = no[2];
	if(ans > no[3])ans = no[3];
	if(ans > no[4])ans = no[4];

	return ans;
}

void disp(char type,int ans){
	switch(type){
	case 'a' :
		  printf("平均 = %d\n",ans);
		  break;
	case 'b' :
		  printf("1番 = %d\n",ans);
		  break;
	case 'c' :
		  printf("ビリ = %d\n",ans);
	default :
		  break;
	}
}

■実行結果■

実行結果(e-3-2)

あらためて、

「5人分の点数の平均、一番、ビリを表示する」

プログラムです。

まずは内容を見てみましょう。

平均「heikin」

1番「itiban」

ビリ「biri」

表示「disp」

という4つの関数を使ってますね。

平均などの計算は大丈夫でしょうか?

「みんなの点数を全部足して、その合計を人数で割る」が平均ですね。

ans = ((no[0] + no[1] + no[2] + no[3] + no[4]) / 5);

次に関数「itiban」と「biri」では数字を比べる時に便利な方法を使ってます

ans = no[0];

if(ans < no[1])ans = no[1];
if(ans < no[2])ans = no[2];
if(ans < no[3])ans = no[3];
if(ans < no[4])ans = no[4];

まず仮の答えとしてみんなの点数を入れた配列の先頭を変数「ans」に代入します。

そして他の点数と比べていくわけです。

上の場合は「ans」の方が小さかったら入れ替えをしてるので結果一番大きい数が残る事になりますね。

そして上のプログラムは同じカタチにキレイにそろっているのがわかります。

つまりは

ans = no[0];

for(i=1;i<5;i++){
	if(ans < no[i])ans = no[i];
}

こんな感じで書き換えられます。

これなら100人分でも200人分でも大丈夫ですね!

良い関数・悪い関数

話を戻します。

例えばさきほどのプログラムの中の関数「itiban」を少し変えてみましょう

int itiban(int no[],int count){
	int ans,i;
	ans = no[0];

	for(i=1;i<count;i++){
		if(ans < no[i])ans = no[i];
	}

	return ans;
}

もとのカタチでは5人分しか計算できないので人数の情報を変数「count」として加えてみました。

こうすれば

「いくつかの数の中から一番大きい数を探す」

という関数になりますね。

なんとか大事な2点は押さえてそうですね。

最初の部分の

int itiban(int no[],int count)

「int no[]」という受け取る中の配列の数が省略されているのは次回のポインタを学ぶ時に説明しますので今はこういう書き方もできると覚えておいてください。

では次に関数「disp」の方を見てみましょう。

void disp(char type,int ans){
	switch(type){
	case 'a' :
		  printf("平均 = %d\n",ans);
		  break;
	case 'b' :
		  printf("1番 = %d\n",ans);
		  break;
	case 'c' :
		  printf("ビリ = %d\n",ans);
	default :
		  break;
	}
}

こちらは結果を表示するという目的ははっきりしてますが、他のプログラムには使えそうにありません。

でも表示の仕方を変えたい時はこの関数の内容を書き換えれば良いのでわかりやすいですね。

こんな感じで最初に言った

1・目的をはっきりさせる

2・他のプログラムでも使えるようにする

この2点を心がける事によって「変更や修正がしやすい」良いプログラムを書く第一歩になりますので常に頭に入れてプログラミングしましょう。

ではこのへんで関数の学習は終わりにして、次回は「これぞC言語!」と言われる「ポインタ」について見ていきたいと思います。

次回

四日目 ポインタ

□ページの先頭へ□

□目次へ戻る□

広告

↓2014年06月20日発売↓

14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013編

新品価格
¥2,500から
(2016/5/10 22:17時点)

↓2014年10月25日発売↓

超本格! サンプルで覚えるC言語 3Dゲームプログラミング教室

新品価格
¥3,110から
(2016/5/10 22:18時点)

↓2013年07月25日発売↓

小学生からはじめるわくわくプログラミング

新品価格
¥2,052から
(2016/5/10 22:21時点)

↓2016年05月13日発売↓

小学生からはじめるわくわくプログラミング2

新品価格
¥2,052から
(2016/5/10 22:22時点)

もっと!C、C++言語本