練習問題 5-15
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;
}
}
以上のプログラムですが、100と入力すると→2 2 5 5と表示されます。
5と入力すると→5と表示されます。どこのプログラムで5は5しか割り切れないと
判断しているのでしょうか?
宜しくお願いします。
No.5ベストアンサー
- 回答日時:
> 3) for( x = 2 ;・・・とあり、
> 5)printf( "%d ", x );のxは2なので
> → printfは2しか表示しないのでは、と思うのですが、
> 実際は 違います!どうしてでしょうか?
ANo.2において次のように回答済み↓
最初のforループでは,x=2,
4) 5%2≠0 なので 5) 6) は実行しない。
皆様御回答ありがとうございました^^特にjjon-com様、私のような素人の疑問に御丁寧に詳く御回答いただき誠にありがとうございます。
私も質問することで、一つ理解すと、又新たな疑問が湧いてきます。
簡単なプログラムだと文字では感じ取れるのですが、裏方では複雑
な取り決めがあるのですね。
また、プログラムは連鎖的だと最近思うようになりました。
完ぺきではないのですが!ここで一度閉めて、再度質問したいと思います。
皆様今後とも 宜しくお願い致します。
No.4
- 回答日時:
「n /= x」は「n = n / x」と同じ意味です。
下記ページの解説を参照。http://9cguide.appspot.com/05-01.html#S6
for文や代入演算子など C言語の基本的な文法の理解が不十分なようでしたら,次のまとまった解説を最初から通し読みした方が,十分ボリュームがあるようでも理解は早いように思います。急がば回れ,ということですね。
http://9cguide.appspot.com/
この回答への補足
ご回答誠にありがとうございました。
A;「n /= x」は「n = n / x」と同じ意味
了解しました。
ご紹介のURL全て読みました。すごくわかり安解説です。
私ごとですが、応用面が弱いので弱いところは頑張るしかないです・・
jjon-com様の御解説を再度解析中ですが、
新たな疑問が生まれました。
何だそんな質問するな!と思われる方ともいると思いますが!
3) for( x = 2 ;・・・とあり、5)printf( "%d ", x );のxは2なので→ printfは2しか表示しないのでは、と思うのですが、実際は
違います!どうしてでしょうか?宜しければ御解説をお願い致します。
No.2
- 回答日時:
> 3) for( x = 2 ; n > 1 ; x++ ){ /*for解説コメントをお願いします。
*/初期値…変数xの値を2から開始して
増分…ループを終えるたびにxの値を1つずつ加算して,
継続条件…変数nの値が1より大きい場合にループし続ける
(言い換えれば,nが1以下になったらループを終える)
> 4) while( ( n % x ) == 0 ){
nをxで割った余り=0 が成り立つ間,5) 6) をループし続ける。
言い換えれば,nをxで割った余り≠0 ならループを終える。
>どこのプログラムで5は5しか割り切れないと判断しているのでしょうか?
最初のforループでは,x=2,
4) 5%2≠0 なので 5) 6) は実行しない。
次のforループでは,x=3,
4) 5%3≠0 なので 5) 6) は実行しない。
次のforループでは,x=4,
4) 5%4≠0 なので 5) 6) は実行しない。
次のforループでは,x=5,
4) 5%5≠0 なので
5) で「5」を表示して,
6) で「n←5÷5の商」すなわち「n←1」
次のforループの開始時点で n>1 が成り立たなくなるので,
forループを終了して,プログラム終了。
この回答への補足
ご回答ありがとございました。
> 3) for( x = 2 ; n > 1 ; x++ ){ /*for解説コメントをお願いします。*/
は以前質問した履歴が残っていまして、失礼しました。
現在ご回答を現在解析中ですが、
「 6) n /= x; 」はどんな意味でしょうか
私が持っている教本には似たような式がございます。
教本には「a = b / c 」はとあり、「bをcで割った値をaに代入」とわありますが
違うみたいです。
すみません又、宜しくお願いします。
No.1
- 回答日時:
> 100と入力すると→2 2 5 5
の方は理解できてますか?
> 5と入力すると→5
なのは、素因数分解した結果がたまたま5だけだった、というだけです。
「5は5しか割り切れない」というような特別な判定はしていません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
vba
-
Escキーを押すと、中断する時と...
-
DoEventsが必要な理由について
-
ということですか 他に固定りよ...
-
DOSコマンドのループ内のTIMEコ...
-
Application.OnTime の使い方
-
Visual BasicのUserFormが閉じ...
-
流れ図(フローチャート)が分か...
-
ListBox 複数選択 で オートフ...
-
エクセル関数で1〜12の数字がル...
-
どなたかこのプログラミングを...
-
イベントの発生を待つ
-
ループ内での条件処理
-
プログラムはif文とforループが...
-
VB6 ListIndexのコピー
-
VB.NETで素因数分解のプログラ...
-
「偶数・奇数の和」のフローチ...
-
ループフリー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
ループ7回目の悪役令嬢は、元敵...
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
エクセルの当番表を作っていま...
-
GIFアニメをループさせたくない
-
VBAで3秒だけ時間を止めたい
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
-
DOSコマンドのループ内のTIMEコ...
-
ListBox 複数選択 で オートフ...
-
vbscriptでIE自動入力(途中で...
-
vb.netからエクセル関数書き込み
-
DoEventsが必要な理由について
-
Java 南京錠
-
アクティブセルから、A列最終行...
-
テキストボックスの名前に変数...
-
範囲指定したセルを1つずつ飛...
-
VBA Dir関数でファイルをループ...
おすすめ情報