プロが教えるわが家の防犯対策術!

 int dat[10];
int i,j,wk,sum;

/*データ入力*/
 printf("10個の数値を入力してください.");
for(i=0,sum=0,i<10;i++){
scanf("%d,&dat[i]);
sum += dat[i];
}
/*整列*/
for (i=0,i<9;i++){
for (j=i+1,j<10;j++){
if(dat[i]>dat[j]){
wk=dat[i];
dat[i]=dat[j];
dat[j]=wk;
}
}
}

 すいませんが、この整列の中でなぜ昇順になるのかわからないのです。
 ex)scanfで8 7 9 6と入力したとき、
 dat[i]=dat[0]=8で
 dat[j]=dat[1]=7となり
 プログラム上ではwk=8と格納され、次にdat[i]=dat[j]なので7の値がdat[i]に格納される。そしてdat[j]=wkからdat[j]に8が格納される。

 つまりdat[0]=7になり、dat[1]=8になりそのつぎにdat[2]=9は処理せずそのままでdat[2]=3となりますがdat[3]=6のときくらべるのが
if(dat[i]>dat[j])よりdat[2]>dat[3]より処理をしたら
 全体的に7 8 6 9の順番になり決して昇順にならないと思います。
 なぜこのプログラムで昇順になるのか内部的な説明が欲しいです。
 お願いします。

A 回答 (2件)

>この整列の中でなぜ昇順になるのかわからないのです。



i と j の二重のループを、コンピューターになったつもりで
今一度なぞってみてください。
i が 0 で、j が 1 の状態から始まります。
    • good
    • 0
この回答へのお礼

  わかりました。 
  i=0のときにj=1~10のすべてのものと
  大小の比較を行えばいいですね。
  dat[0]とdat[1~9]の比較なので
   すべての数と比較できますね。
   ありがとうございました。

お礼日時:2009/08/23 02:07

>for(i=0,sum=0,i<10;i++){



必ず10個の数値を入力しなければなりません。

> ex)scanfで8 7 9 6と入力したとき、

入力がプログラムの仕様を満たしていません。
    • good
    • 1

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