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