/* [条件文 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;
}