[← 演習のページへ戻る]
サンプルプログラム 4 の内容自然数 n を読み込み,1 ~ n についてそれぞれの約数を表示する.1: #include <stdio.h> 2: 3: int main(void){ 4: int n, i, k; 5: 6: printf("n を一つ入力してください:"); 7: scanf("%d", &n); 8: 9: for ( i = 1; i <= n; i++ ){ 10: printf("%d の約数 =", i); 11: for ( k = i; k >= 1; k-- ){ 12: if ( i % k == 0 ){ 13: printf(" %d", k); 14: } 15: } 16: printf("\n"); 17: } 18: 19: return 0; 20: } 9-17 行目: for ( i = 1; i <= n; i++ ){ ... }9: for ( i = 1; i <= n; i++ ){ 10: printf("%d の約数 =", i); 11: for ( k = i; k >= 1; k-- ){ 12: if ( i % k == 0 ){ 13: printf(" %d", k); 14: } 15: } 16: printf("\n"); 17: }ここでは,n を読み込んだ後,for 文で変数 i の値を 1 から n まで変化させながら目的の処理を繰り返し行おうとしています. この for 文でやろうとしていることは,変数 i の値に対して,その約数をすべて出力するというものです. つまり,
11-15 行目: for ( k = i; k >= 1; k-- ){ ... }9: for ( i = 1; i <= n; i++ ){ 10: printf("%d の約数 =", i); 11: for ( k = i; k >= 1; k-- ){ 12: if ( i % k == 0 ){ 13: printf(" %d", k); 14: } 15: } 16: printf("\n"); 17: }この(内側の) for 文では k の値を i から 1 まで減らしながら,i の約数を表示します. ポイントになるのが,「k が i の約数である」⇔「i が k で割り切れる」⇔「i を k で割った余りが 0」ということです. そのため,12 行目では i % k == 0 を条件とした if 文があり,これが成立する時にのみ k を出力しています. 今回の実行例では,約数を大きい方から表示していますので, for 文では k の値を i から始めて,k >= 1 の間,k の値を -1 する(k--)という流れになっています. 16 行目: printf("\n");9: for ( i = 1; i <= n; i++ ){ 10: >printf("%d の約数 =", i); 11: for ( k = i; k >= 1; k-- ){ 12: if ( i % k == 0 ){ 13: printf(" %d", k); 14: } 15: } 16: printf("\n"); 17: }内側の for 文での繰り返しが終わった後に,改行文字を出力していますが, こうしないと次の約数の出力が同じ行に続いてしまうからです. |