
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で、平均値を求める方法...
-
Excel 1セル当りの文字数が2...
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
-
バイト列とバイナリ列の違いが...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルVBA:日付データの変換...
-
SQLで1バイト、2バイト混在...
-
メールの件名をデコードしたい
-
C言語でwin32apiを使ってnotepa...
-
stable diffusionのエラー
-
'dataType' 引数を Null にする...
-
Excel VBA メール作成について ...
-
postで送られてきたパラメータ...
-
エクセルシート名の制限を変更...
-
データの取り出し?
-
GETメソッドとPOSTメソ...
-
RegQueryValueExでの2バイト文字
-
10個の実数に対する降順ソート...
-
連続アクセスで表示を変える。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perlでのテキスト処理
-
多次元配列(リファレンス)
-
該当項目表示について
-
MATLAB(マトラボ)とcsvファ...
-
VBScript
-
複数のCSVを一度にダウンロード
-
matlabで、平均値を求める方法...
-
VBA エクセルで1列で表示したい。
-
C言語のプログラム問題
-
perlで重複をさせない処理
-
画像アップロード時のエラーハ...
-
dat
-
VBAでの日数のカウント
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
DataGridViewの特定列に入力さ...
-
Excel 1セル当りの文字数が2...
-
バイト列とバイナリ列の違いが...
おすすめ情報