C言語の並び替えについての質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Don

C言語の並び替えについての質問です。

#1

投稿記事 by Don » 15年前

「14歳から始めるC言語ゲームプログラミング」という本で勉強をしているものです。
九つの要素を定義して隣接する値の大小関係を比較して並び替えるというところですが
交換の関数の考え方があまりよく分かりません。詳しく説明していただける方がいらっしゃいましたら
ご教示お願い申し上げます。

int main(void)`
int hako[9]={8,4,2,3,1,9,5,7,6};
int irekaeta;

do{
irekaeta=0
for(int i=0;i<8;i=i+1){
if(hako>hako[i+1]){
int a=hako;
[color=Red" size="2]hako=hako[i+1];
hako[i+1]=a;
irekaeta=1;
[/color]
}
}
for(int i=0;i<9;i=i+1){
printf("%d",hako);
}
printf("\n");
}while(irekaeta==1)
}
赤い部分が分かりません。aをhakoであると定義して、さらにhakoがhako[i+1]であると定義して
hako[i+1]がaであると定義すると入れ替わるのは何故でしょうか。

説明お願いします。

ひよこ

Re:C言語の並び替えについての質問です。

#2

投稿記事 by ひよこ » 15年前

こういう感じですね。
int a=hako; まず、iの配列の中身をaにいれる。
hako=hako[i+1]; iの配列の中身は次の配列の中身とする
hako[i+1]=a; aの中身をi+1の配列に入れる。
aはiの配列の中身を預かってi+1の配列に代入しているということです。
iの配列の中身はもとのi+1の中身です。

Eeel

Re:C言語の並び替えについての質問です。

#3

投稿記事 by Eeel » 15年前

定義ではなく代入です。例えば、

 int a,b; //aとbを宣言 (aの中身は「不定」、bの中身は「不定」)

 a = 5;  //aに5を代入 (aの中身は「5」になり、bの中身は「不定」のまま)
 b = a;  //bにaを代入 (aの中身は「5」のまま、bの中身は「5」になります) ← 『b は a だ』ではありません。
 a = 10;  //aに10を代入 (aの中身は「10」になり、bの中身は「5」のまま)

このような感じです。

Donさんが例に挙げたソースでは、最初は i は 0 なので、i を 0 としてその一回だけ流れを追ってみます。
hako[0] は 8 で hako[1] は 4 です。

 int a = hako[0];
 hako[0] = hako[0+1];
 hako[0+1] = a;

これは↓のような事をしています。

 int a = 8;
 hako[0] = 4;
 hako[0+1] = 8;

hako[0] が 4 に、 hako[1] が 8 になりました。

閉鎖

“C言語何でも質問掲示板” へ戻る