OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.199498
  • 閲覧数154
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 58% (109/185)

#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]){ にどの様に挿入されるのかが
解りません。
 
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル12

ベストアンサー率 75% (398/526)

>> 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

お礼率 58% (109/185)

理解できました。ありがとうございました。
投稿日時 - 2002-01-17 15:47:40
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル10

ベストアンサー率 40% (86/214)

理解できません、とおっしゃってる部分がソース中にないようですが。 たぶん、真中辺の閉じカッコがたくさんあるあたりでしょうね。 for文の文法はお分かりでしょうか。 これはループ処理になりますが、一回目のループでは s<num-1 は 0<4 という意味になります。 従って「sの初期値を0として、num-1(つまり4)に達するまで繰り返す。ループの最後ではsに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

お礼率 58% (109/185)

ありがとうございました。
投稿日時 - 2002-01-17 15:28:41


  • 回答No.2
レベル12

ベストアンサー率 75% (398/526)

最初→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  ...続きを読む
最初→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

お礼率 58% (109/185)

>test[s] test[t]
  3    6  交換→6 3 2 7 4 t++

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

投稿日時 - 2002-01-16 19:54:47
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ