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

************************************
main(){
int i,j,a[5]={1,-4,3,2,-5};
for(i=1,k=4;i==1;k--) {
for(i=j=0;j<4;j++) {
if(a[j]>a[j+1])continue;
a[j]=a[j]-a[j+1];
a[j+1]=a[j]+a[j+1];
a[j]=a[j+1]-a[j];
i=1;
}
printf("a[%d]=%d\n",k,a[k]);
}
}
************************************

上のプログラム中で、
(1)a[j]=a[j]-a[j+1];
a[j+1]=a[j]+a[j+1];
a[j]=a[j+1]-a[j];
 を行ったときの変数a[j],a[j+1]のそれぞれの値
(2)上記3命令の終了までの実行回数
についてお願いします。
あと、出力結果を教えて下されば幸いです。
 (家のパソコンがウイルスでやられたもので・・・(泣))
初心者な質問で申し訳ありませんが宜しくお願いします。

A 回答 (1件)

(1)a[j]の値がc,a[j+1]の値がdであるとして、 この処理を実行してみます。


実行前:a[j]=c,a[j+1]=d
1行目実行後:a[j]=c-d,a[j+1]=d
2行目実行後:a[j]=c-d,a[j+1]=c
3行目実行後:a[j]=d,a[j+1]=c
すなわち、処理実行前と実行後とでは値が入れ替わっていることがわかります。

(2)4回です。出力結果は
a[4]=-5
a[3]=-4
a[2]=1
a[1]=2
a[0]=3
となります。

あと、アドバイスとして。
値の交換は、メモリに余裕が無い場合を除き、交換専用の変数を用意し、それを使って行ったほうがいいですよ。
たとえば、
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
という具合に。
それから、このくらいのプログラムならば紙にa[]の内容を書いて処理を追っていくというのもいい経験だ…とは言えんな、(1)の処理があるから(^_^;。
    • good
    • 0
この回答へのお礼

丁寧な回答とアドバイス、本当にありがとうございました。
まだ始めて一ヶ月なもので、、、
これから日々精進します(^^;

お礼日時:2002/02/26 11:58

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