• ベストアンサー

点数の大きい順に出力する

#include <iostream> using namespace std; int main() { const int num = 5; int test[num]; cout << num << "人の点数を入力して下さい。\n"; for(int i=0; i<num; i++){ cin >> test[i]; } } } } for(int j=0; j<num; j++){ cout << j+1 << "番目の人の点数は" << test[j]<< "です。\n"; } return 0; } ---------- の for(int s=0; s<num-1; s++){ for(int t=s+1; t<num; t++){ if(test[t] > test[s]){ int tmp = test[t]; test[t] = test[s]; test[s] = tmp; の部分が理解できません。 s<num-1 は 0<4; ということでしょうか? 値が5つ入力されその値が if(test[t] > test[s]){ にどの様に挿入されるのかが 解りません。  

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

>> test[s] test[t] >>   3    6  交換→6 3 2 7 4 t++ > if(3 > 6) で交換するのでしょうか? 書き方が悪かったですね、test[s]とtest[t]の位置。 プログラムの方は > if(test[t] > test[s]) となっているので、つまり   if (6 > 3) となり、条件が成立する(「真になる」と言います)ので交換されるわけです。

yosiyosi
質問者

お礼

理解できました。ありがとうございました。

その他の回答 (2)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

最初→3 6 2 7 4 だとすると test[s] test[t]   3    6  交換→6 3 2 7 4 t++   6    2  t++   6    7  交換→7 3 2 6 4 t++   7    4  ループt END s=1,t=2 ※一番大きい値が左端になる   3    2  t++   3    6  交換→7 6 2 3 4 t++   6    4  ループt END s=2,t=3 ※2番目に大きい値が、左から2番目になる     : というような感じになります。

yosiyosi
質問者

補足

>test[s] test[t]   3    6  交換→6 3 2 7 4 t++ なぜ3と6が交換されるのか解りません。 ifというのは、もしその文がそのとうり(正しい)であれば実行されるのですよね。 if(3 > 6) で交換するのでしょうか?

  • CueCue
  • ベストアンサー率40% (86/214)
回答No.1

理解できません、とおっしゃってる部分がソース中にないようですが。 たぶん、真中辺の閉じカッコがたくさんあるあたりでしょうね。 for文の文法はお分かりでしょうか。 これはループ処理になりますが、一回目のループでは s<num-1 は 0<4 という意味になります。 従って「sの初期値を0として、num-1(つまり4)に達するまで繰り返す。ループの最後ではsに1を足す」という意味です。 二個目のfor文では、「tの初期値をs+1として、num(つまり5)に達するまで繰り返す。ループの最後ではtに1を足す」という意味です。 つまり、1~4番目までの値を順に終わりまで比べていって、その時着目しているものより大きいものがあったらそれと入れ替えています。  実際に絵を書いて、比べていくと分かりやすいと思いますよ。

yosiyosi
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう