「C言語練習」 1-6.c   ・前へ   ・次へ
/* [条件文 if]と最大・最小値、平均   1-6.c */
#include <stdio.h>

main()
{
/* 入力dataの平均値を求めるには、総和を計算してdata数で割れば良いが、最大値・最小値を
求めるには 2つの値を比較して、どちらが大きいか小さいかを判断しなくてはならない。新しく
入力された値を今迄の最大値と比較して、もし入力値の方が大きければ、それを最大値に代入し
次の入力値と比較する等の操作が要る。この「もし・・・」という仮定条件が成り立つ時に、それ
以降の一文を実行する命令が if 文である。
 */
	int i;
	int a;
	int sum,max,min;

		printf(" 5個のdataを入力して平均値と最大・最小値を求める。\n");
		sum=0; max=-10000; min=10000;	// 初期化。

/* 最大値には入力予定値よりはるかに小さな値(ここでは、-10000にした)を、
最小値には逆に非常に大きな数を入れておく。理由は(?)分かりますね。
 */
	for (i=0;i<5;i++) {	// data数が分かっている時は for loopが使える。
		printf("No.%d:",i+1);	// i=0から始まるのでNo.はi+1になる
		scanf("%d",&a);	// int宣言した変数 aがdata入力の受け皿。&を忘れぬ事。
		sum+=a;
		if (a>=max) max=a;
		if (a<=min) min=a;
	}
		printf("総和=%d  平均値=%.2f  最大値=%d  最小値=%d\n\n",sum,sum/5.0,max,min);

/* if文は if () と書き、( )の中に条件を記述する。条件が成り立つ場合、( )以下の一文を
実行する。上段の if文では、入力値 aがmax以上かどうか判定し、aがmax以上の時に aをmaxに
代入している。この繰り返しで、最大値が求まる。*/

/* printf();の平均値の所はdata数 5でなく、5.0で割っている。これは平均値を浮動実数値として
表示するため。sumは整数だが、これをdata数で割ると当然端数がでる。しかし、整数宣言された
数値同士の計算結果は整数になってしまうので(小数点以下切り捨て)、それを避ける為に 5.0
で割っている。こうすると、その部分の計算結果が浮動実数になるので、小数点以下がちゃんと
表示される。
*/

/* if文を使えば、data数を初めに指定しなくても loopを使ってdataを繰り返し入力する事が
出来る。終わる時は、特別な値を入力する。それを if文で判断してloopを抜ける。loopを抜ける
には色々な方法があるが、中でもbreak;(壊す、破る)という命令はよく使われる。
 */
		printf("入力dataの平均値と最大・最小値を求める。[終了=999]\n");
		sum=0;max=-10000;min=10000;	// 初期化。
	for (i=0;i<1000;i++) {	// data数が幾つか分からないので、回る数を多めに取っておく。
		printf("No.%d:",i+1);
		scanf("%d",&a);
		if (a==999) break;	// aが999だったら、loopを抜ける。
		sum+=a;
		if (a>=max) max=a;
		if (a<=min) min=a;
	}
		printf("(n=%d)  総和=%d  平均値=%.2f  最大値=%d  最小値=%d\n\n",i,sum,
			sum/i,max,min);	// 一行が長くなれば、この様に分けて書いても良い。

/* break;は、自分がいる一番身近なloopだけを抜ける。従って、仮にloopが入籠になっていても
大丈夫である。また、if (a==999)で a が 999と等しい時という判定をしているが、比較に用いた
記号が = ではなく == である事に注目。 = は代入記号であり、通常の意味の等号として使う時に
は必ず == としなくてはならない。要注意。
 この == の様に、a と b 二者間の関係を見るのに使う記号を関係演算子という。大小関係を
表す < , > , <= , >= なども関係演算子である。*/

	printf("上の表示では、平均値の小数点以下が常に .00 となるので訂正。\n");

/* 前述の様に、整数同士の演算結果は整数になるので幾ら%f表示しても正しい値は出てこない。
data数の所を i.0と書くわけにも行かない。こういう時は、前に(float)と付ける。こうすれば
float演算をしてくれる。
*/
	printf("(float)を付けると正しく表示\n(n=%d)  平均値=%.2f\n",i,(float)sum/i);

printf("\nEnd\n");
return 0;
}


(前に戻る)   ・次へ