
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の順番になり決して昇順にならないと思います。
なぜこのプログラムで昇順になるのか内部的な説明が欲しいです。
お願いします。
No.1ベストアンサー
- 回答日時:
>この整列の中でなぜ昇順になるのかわからないのです。
i と j の二重のループを、コンピューターになったつもりで
今一度なぞってみてください。
i が 0 で、j が 1 の状態から始まります。
わかりました。
i=0のときにj=1~10のすべてのものと
大小の比較を行えばいいですね。
dat[0]とdat[1~9]の比較なので
すべての数と比較できますね。
ありがとうございました。
No.2
- 回答日時:
>for(i=0,sum=0,i<10;i++){
必ず10個の数値を入力しなければなりません。
> ex)scanfで8 7 9 6と入力したとき、
入力がプログラムの仕様を満たしていません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
matlabで、平均値を求める方法...
-
VBA エクセルで1列で表示したい。
-
UTF-8で5~6バイトになる文字コ...
-
ピクセル,dpiから容量(バイト...
-
機種依存文字をチェックしたい。
-
10Mバイトて文字数に すると何...
-
ビットスワップとバイトスワッ...
-
ビットデータのチェック方法
-
最大長を用意せずにバイナリデ...
-
エクセルVBA:日付データの変換...
-
バイト列とバイナリ列の違いが...
-
クリップボードへのコピー
-
100MB
-
文字列の最後の一字を削除
-
PHPのCookieが有るか無いかで、...
-
64bit対応
-
cookieにカンマ区切りでつめこ...
-
UCS-2の一覧表が欲しい
-
printfの%eで指数部分の桁数を...
-
エクセルで「改行コード」を「...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0でMSChartをタイマーを使...
-
matlabで、平均値を求める方法...
-
MSDOSからワイルドカード指定で...
-
VBA エクセルで1列で表示したい。
-
perlでカンマ区切り(CSV)デー...
-
複数のCSVを一度にダウンロード
-
perlで重複をさせない処理
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
stable diffusionのエラー
-
Excel 1セル当りの文字数が2...
-
「1TB」のHDDに日本語は何字入...
-
DataGridViewの特定列に入力さ...
-
ピクセル,dpiから容量(バイト...
-
Excel VBA メール作成について ...
-
バイト列とバイナリ列の違いが...
-
エクセルシート名の制限を変更...
-
ListView重複データ削除
おすすめ情報