今日は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;)も忘れずに行えていて、非の打ち所がありません。
今回の演習は割とすんなりできました!次は多重ループです
