・この内容がfor文により5回繰り返される。
・rは最初1で+1されていき5回目には5になる。
・tensu[i]はif文の式により大きい値の順に出てくる。
・よって次のように出力されると予想出来る。
ranking[1]=90
ranking[2]=85
ranking[3]=80
ranking[4]=76
ranking[5]=60
・次のSystem.out.printlnは("平均点="+ gokei/n +"")という内容である。
・これは平均点=まではそのまま出力し"+ gokei/n +"の部分は式を計算した値を出力する。
・gokeiには全ての点数の総和nには5が代入されているので、計算すると78.2になる。
・よって次のように出力される。
平均点=78.2
・最後はSystem.out.println("最高点="+max+"");である。
・これは最高点=まではそのまま出力し、"+max+"はmaxの値を出力する。
・よって次のように出力される。
最高点=90
・この結果をまとめると出力結果はこのようになる。
ranking[1]=90
ranking[2]=85
ranking[3]=80
ranking[4]=76
ranking[5]=60
平均点=78.2
最高点=90
|
問3
・この空欄にはmax以外で最高得点の代入されている式を入れれば良い。
・max以外で最高得点が代入されているのは、tensu[0]である。
・そもそもtensu[0]には最高得点がくるのはあたりまえなので、わざわざmaxとか作る必要もなかった…
・よって tensu[0] が空欄に入る。
■考察
・for文二つとif文が絡み合ってて分かりにくい所を説明します。
for(i=0,r=1; i < n; i++,r++){
for(k = i+1;k < n ;k++){
if(tensu[i] < tensu[k]){
int x = tensu[i];
tensu[i] = tensu[k];
tensu[k] = x;
}
}
System.out.println("ranking["+r+"]="+tensu[i]+"");
gokei += tensu[i];
・まずは下の部分ですが、ここではtensu[i]の値とそれ以降の値を比べていき、
・tensu[i]より大きい値なら入れ替えるという作業を繰り返しています。
for(k = i+1;k < n ;k++){
if(tensu[i] < tensu[k]){
int x = tensu[i];
tensu[i] = tensu[k];
tensu[k] = x;
}
}
・この作業をfor(i=0,r=1; i < n; i++,r++)を使いtensu[0]からtensu[4]まで繰り返しています。
・次に下の部分で最終的に残ったtensu[i]を出力して、gokeiに足します。
System.out.println("ranking["+r+"]="+tensu[i]+"");
gokei += tensu[i];
・具体的な流れを説明します。
i=0,r=1
76,80,60,90,85
|
|76と80を入れ替え
|
80,76,60,90,85
|
|60は80より小さいので無視して、80と90を入れ替え
|
90,76,60,80,85
ranking[1]=90を出力
gokeiに90足す。gokei==90
i++,r++
___________________________
i=1,r=2
90,76,60,80,85
|
|60は76より小さいので無視して、76と80を入れ替え
|
90,80.60,76,85
|
|80と85を入れ替え
|
90,85,60,76,80
ranking[2]=85を出力
gokeiに85足す。gokei==175
i++,r++
___________________________
i=2,r=3
90,85,60,76,80
|
|60と76を入れ替え
|
90,85,76,60,80
|
|76と80を入れ替え
|
90,85,80,60,76
ranking[3]=80を出力
gokeiに80足す。gokei==255
i++,r++
___________________________
i=3,r=4
90,85,80,60,76
|
|60と76を入れ替え
|
90,85,80,76,60
ranking[4]=76を出力
gokeiに76足す。gokei==331
i++,r++
___________________________
i=4,r=5
ranking[5]=60を出力
gokeiに60足す。gokei==391
gokei/n==391/5で平均出力
平均点=78.2
最高点=90を出力
・てな感じです。疲れた〜orz
■C言語のソースコード
#include
void main(void){
int n=5;
int tensu[ ] = { 75, 80, 60, 90, 85};
int i,k,r,x;
float gokei = 0;
for(i=0,r=1; i < n; i++,r++){
for(k = i+1; k < n; k++){
if(tensu[i] < tensu[k]){
x = tensu[i];
tensu[i] = tensu[k];
tensu[k] = x;
}
}
printf("ranking[%d]=%d\n", r, tensu[i]);
gokei += tensu[i];
if( max < tensu[i]){
max = tensu[i];
}
}
printf("平均点=%7.2f\n", gokei/n);
printf("最高点=%d\n", max);
}
■反省・感想
・なんとか難しい問題を作ろうと思いましたが、超簡単問題が出来てしまいました。
・一応頑張ったんでお許しください。
・久しぶりのc言語に戸惑った2週間でした。次も頑張ります。
・参考文献・URL
:独習Java 第3版