入門書でのおさらい17・演習4-16,4-17,4-18,4-19

今日は100ページ演習4-16から始めたいと思います。

100ページ・演習4-16

これはかんたんだね

#include<stdio.h>
int main(void){
    int n;
    printf("整数値:");
    scanf("%d",&n);
    
    for(int i = 1; i <= n; i += 2){
        printf("%d ",i);
    }
    putchar('\n');
    return 0;
    
}

完璧です!
無駄のない、非常にスッキリとしたコードですね。

i += 2 を使ってループ自体を奇数回に制御しているのがスマートです。しっかり動作も確認できました。

if文を使っても書けました

#include<stdio.h>
int main(void){
    int n;
    printf("整数値:");
    scanf("%d",&n);
    
    for(int i = 1; i <= n; i++){
        if(i % 2 == 1)
        printf("%d ",i);
    }
    putchar('\n');
    return 0;
    
}

ご提示いただいたコード、完璧に正解です!動作も論理も全く問題ありません。

先ほどの「i += 2 で飛ばす方法」と、今回の「1つずつ確認して if 文で判定する方法」は、どちらも現場でよく使われる書き方です。

今回のコードについて、いくつかナイスなポイントを挙げますね。

  • 論理が明快: 「もし奇数(2で割って1余る)なら表示する」という意図がストレートに伝わります。
  • 柔軟性: この書き方だと、例えば「3の倍数のときだけ表示」など、条件を少し変えたいときに応用が効きやすいです。
  • コードの整理putchar('\n'); を使って最後にスッキリ改行を入れているのも良い習慣です。

自力で別解まで作成できるのは、仕組みを深く理解できている証拠ですね。

演習4-17

これも簡単そうです

#include<stdio.h>
int main(void){
    int n;
    printf("整数値:");
    scanf("%d",&n);
    
    for(int i = 1; i <= n; i++){
        printf("%dの2乗は%d\n",i, i * i);
    }
    putchar('\n');
    return 0;
    
}

正解です!非常に正確に書けていますね。

printf の中での計算(i * i)も完璧ですし、各行で改行を入れることで結果が見やすくなっています。

演習4-18

#include<stdio.h>
int main(void){
    int n;
    printf("整数値:");
    scanf("%d",&n);
    
    for(int i = 1; i <= n; i++){
        putchar('*');
        if(i % 5 == 0)
            putchar('\n');
    }
    return 0;
    
}

お見事です!正解です。

if (i % 5 == 0) という条件式で、5回目、10回目……という「5の倍数」のタイミングを正確に捉えられています。putchar の使い分けも非常に効率的です。

演習4-19

4-19できました!

#include<stdio.h>
int main(void){
    int n;
    printf("整数値:");
    scanf("%d",&n);
    int cnt = 0;
    for(int i = 1; i <= n; i++){
        if(n % i == 0){
            printf("%d ",i);
            cnt++;
        }
    }
    printf("約数は%d個です\n",cnt);
    return 0;
    
}

完璧です!素晴らしいですね。

cnt(カウンター変数)を用意して、if文の中で条件に一致した時だけインクリメント(cnt++)する。これはプログラミングにおいて非常に重要な「個数を数える」という基本パターンです。

変数の初期化(int cnt = 0;)も忘れずに行えていて、非の打ち所がありません。

今回の演習は割とすんなりできました!次は多重ループです