プロが教えるわが家の防犯対策術!

2以上の数値を入力し、素因数分解した結果を表示しなさい。
1) int n, x;

2) scanf("%d", &n );
3) for( x = 2 ; n > 1 ; x++ ){ /*for解説コメントをお願いします。*/
4) while( ( n % x ) == 0 ){
5) printf( "%d ", x );
6) n /= x;
}
}

 全て解説を頼むと考えなくなるため、3) の解説をお願いします。

A 回答 (4件)

2行目でデーターを入力しています。


その入力された内容nが1以上だったらfoを繰り返す、ただしnの内容は下のプログラムで変化します。
    • good
    • 0

ご自身のC言語、アルゴリズムに関するご理解がどの程度なのかわかりませんが、勉強中のようなので最低限だけ。



この場合、

n > 1ならば{ }内を計算し、x の値に+1する。これをx=2から始めて、n <= 1になるまで繰り返す。

といったところです。
    • good
    • 0

> for( x = 2 ; n > 1 ; x++ )



ここで、xとnの2つの変数が出てくるので混乱しているのではないでしょうか。

forによるループは言語によって何種類かあります。

1)配列状のものを順番に処理するもの
2)数値を開始値から順番に変化させて終了値まで処理するもの
3)その他

Cは3)その他の形です。
for(式1;式2;式3)で
・ループを開始する前に式1を実行
・式2の値を評価して「真」ならループを実行
・1回ループするたびに式3を実行
という処理をします。

最初に習ったのは
for(i=0;i<10;i++)
みたいなものではないでしょうか。これは2)のタイプのfor文をC流に表現したものです。

実は、それぞれの式に関連性(同じ変数を使っている、とか)が無くても、動作します。この場合は
・ループを開始する前に「x=2」を実行
・「n>1」を評価して「真(nが1より大きい)」ならループを実行
・1回ループするたびに「++x」を実行
となります。

1)2)型のforに比べて、とても柔軟なループが作れるのが利点です。
反面、扱いを間違えると無限ループや実行されないループを作ってしまう危険があります。

この回答への補足

ご丁寧なご解説ありがとうございます。
ご解説の中にどうしてもわからないのがあります。
「Cは3)その他の形です。」のCて何を指しているのでしょうか?
 宜しくお願いします。

補足日時:2011/07/02 07:13
    • good
    • 0

No2ですが、No3の方への補足だけ。



「C」というのは「C言語」のこと。

for文の使い方には言語によって1)2)3)の種類があって、C言語では3)である、ということをNo3の方は言ってます。

この回答への補足

 ご回答ありがとうございます。
A;「C」というのは「C言語」のこと。
 CはC言語了解しました^^
現在解読中です。
 再度何か質問するかもしれませんが解決まで、しばらくお待ちください。
3) for( x = 2 ; n > 1 ; x++ ){
4) while( ( n % x ) == 0 ){
3)と4)の「コラボレーション」悩まされています。

補足日時:2011/07/04 05:11
    • good
    • 0

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