アプリ版:「スタンプのみでお礼する」機能のリリースについて

#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]){ にどの様に挿入されるのかが
解りません。
 

A 回答 (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)
となり、条件が成立する(「真になる」と言います)ので交換されるわけです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/17 15:47

最初→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番目になる
    :

というような感じになります。

この回答への補足

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

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

補足日時:2002/01/16 19:54
    • good
    • 0

理解できません、とおっしゃってる部分がソース中にないようですが。


たぶん、真中辺の閉じカッコがたくさんあるあたりでしょうね。

for文の文法はお分かりでしょうか。
これはループ処理になりますが、一回目のループでは
s<num-1 は 0<4 という意味になります。
従って「sの初期値を0として、num-1(つまり4)に達するまで繰り返す。ループの最後ではsに1を足す」という意味です。

二個目のfor文では、「tの初期値をs+1として、num(つまり5)に達するまで繰り返す。ループの最後ではtに1を足す」という意味です。

つまり、1~4番目までの値を順に終わりまで比べていって、その時着目しているものより大きいものがあったらそれと入れ替えています。

 実際に絵を書いて、比べていくと分かりやすいと思いますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/17 15:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!