OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

初心者な質問その1

  • すぐに回答を!
  • 質問No.224148
  • 閲覧数23
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 27% (3/11)

************************************
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命令の終了までの実行回数
についてお願いします。
あと、出力結果を教えて下されば幸いです。
 (家のパソコンがウイルスでやられたもので・・・(泣))
初心者な質問で申し訳ありませんが宜しくお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル12

ベストアンサー率 48% (325/664)

(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)の処理があるから(^_^;。
お礼コメント
rokkaku

お礼率 27% (3/11)

丁寧な回答とアドバイス、本当にありがとうございました。
まだ始めて一ヶ月なもので、、、
これから日々精進します(^^;
投稿日時 - 2002-02-26 11:58:50
-PR-
-PR-
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ