- ベストアンサー
プログラムの解説をお願いします。
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) の解説をお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No2ですが、No3の方への補足だけ。 「C」というのは「C言語」のこと。 for文の使い方には言語によって1)2)3)の種類があって、C言語では3)である、ということをNo3の方は言ってます。
その他の回答 (3)
- kmee
- ベストアンサー率55% (1857/3366)
> 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て何を指しているのでしょうか? 宜しくお願いします。
- buenaarbol
- ベストアンサー率47% (11/23)
ご自身のC言語、アルゴリズムに関するご理解がどの程度なのかわかりませんが、勉強中のようなので最低限だけ。 この場合、 n > 1ならば{ }内を計算し、x の値に+1する。これをx=2から始めて、n <= 1になるまで繰り返す。 といったところです。
- TinyPine
- ベストアンサー率30% (719/2386)
2行目でデーターを入力しています。 その入力された内容nが1以上だったらfoを繰り返す、ただしnの内容は下のプログラムで変化します。
補足
ご回答ありがとうございます。 A;「C」というのは「C言語」のこと。 CはC言語了解しました^^ 現在解読中です。 再度何か質問するかもしれませんが解決まで、しばらくお待ちください。 3) for( x = 2 ; n > 1 ; x++ ){ 4) while( ( n % x ) == 0 ){ 3)と4)の「コラボレーション」悩まされています。