はじめに
どうも! みなため(@MinatameT)です。
今回は「7で割ると2余る数」のうち、3の倍数である値がいくつあるのかを求めるプログラムを紹介していきます。
ただし、扱う値の範囲は1から100までとします。
考え方
まずは条件を正しく理解し、プログラミングしやすいように整理することが大切です。
今回の場合は、次のように整理するとわかりやすいはずです。
- 条件1:1から100の整数値
- 条件2:7で割ると2余る数
- 条件3:3の倍数
この3つの条件をすべて満たした値のみをカウントしたいので、そうなるように「どうプログラミングすれば良いのか」を考えていきましょう。
今回は条件1 → 条件2 → 条件3の流れで順番に確認していくプログラムにしますね。
その場合、必要な変数は次のとおりです。
- 1から100の整数値として使うint変数 a
- 3つの条件をすべて満たした値になったときにカウントするint変数 count
まず条件1は、for文で「1から100までの整数値」となるように、int変数 aを1から100まで1ずつ増やしていきます(1 → 2 → 3 → …… → 100)。
……ということで、条件1はfor文を使うだけで簡単に満たせますので、条件1についてはif文を使いません。
次に条件2は、条件1を満たしたint変数 aについて、7で割った余りが2であるのかどうかをif文でチェックします。
次に条件3は、条件2を満たしたint変数 aについて、3で割った余りが0であるのかどうかをif文でチェックします。
なぜなら、3の倍数は3で割った余りが0になるからです。
条件3を満たした場合の処理として、カウント用のint変数 countに1を加えておきます。
そして最後に、カウント用のint変数 countの値をprintf文で出力すればOKです(ループ中ではなく、ループ終了後に出力するようにしてください。カウント途中の値は邪魔になります。)。
ちなみに、答えは9、30、51、72、93の5つなので「5」が出力されたら成功です!
文法のポイント
ここで、文法を簡単に確認しておきます。
- for文は「ループ処理(繰り返し処理)」に使います。
- for(初期値; ループ継続条件; 1回のループ終了ごとの処理){ループ中の処理}
- if文は「条件分岐処理」に使います。
- if(条件式){条件を満たしている場合の処理}
- 「a%b」で、aをbで割ったときの「余り」を求めることができます。
これらを踏まえて、ソースコードと実行結果を確認していきます。
プログラム例と実行結果
ソースコード
下記のコードは「解答例」ですので、他のやり方もあります。
#include<stdio.h>
//条件1:1から100の整数値
//条件2:7で割ると2余る数
//条件3:3の倍数
//答え:9、30、51、72、93の5つ。
int main(void)
{
int a; //1から100まで1ずつ増えていく整数値
int count = 0; //条件1から条件3のすべてにあてはまる値のカウント(初期値:0)
for(a = 1; a <= 100; a = a + 1) //条件1:1から100まで繰り返す。
{
if(a % 7 == 2) //条件2:aを7で割ると2余るのなら
{
if(a % 3 == 0) //条件3:aが3の倍数なら
{
count = count + 1; //カウントを+1する。
}
}
}
printf("%d\n", count); //カウント結果を出力する。
return(0);
}
条件2と条件3は1つのif文で(&&を使って)同時判断できるのですが、コードが横に長くなって複雑に見えてしまうので、if文を入れ子にして順番に判断するようにしています。
実行結果
5
正解は「5」ですので、正しく出力されていることがわかりました!
お疲れさまでした。