はじめに
どうも! みなため(@MinatameT)です。
記事タイトルの通りなのですが、次のような条件のプログラムをC言語で作る方法について、説明しています。
- 1から100の整数値を出力していく。
- 3の倍数なら、数字ではなく「Fizz」と出力する。
- 5の倍数なら、数字ではなく「Buzz」と出力する。
- 3の倍数かつ5の倍数なら、数字ではなく「Fizz Buzz」と出力する。
これらの条件は、「Fizz Buzz(フィズ・バズ)」という海外の遊びのルールそのものなのですが、プログラミングの基礎ができているかどうかの確認問題としてよく使われています。
難しいプログラムではありませんが、凡ミスしやすいかもしれませんね。
それでは、このプログラムの作り方を説明していきます!
Fizz Buzzのプログラムの作り方
ソースコード
さっそくですが、答えの例を掲載しておきます。正解はたくさんありますが、私ならこういうコードを書きます。
#include<stdio.h>
int main(void)
{
int n;
for(n=1; n<=100; n=n+1) //1から100まで
{
if((n%3)==0 && (n%5)!=0) //3の倍数だが5の倍数ではない場合
{
printf("Fizz\n", n); //「Fizz」と出力する。
}
else if((n%5)==0 && (n%3)!=0) //5の倍数だが3の倍数ではない場合
{
printf("Buzz\n", n); //「Bizz」と出力する。
}
else if((n%3)==0 && (n%5)==0) //3の倍数かつ5の倍数なら
{
printf("Fizz Buzz\n", n); //「Fizz Bizz」と出力する。
}
else //それら以外の場合
{
printf("%d\n", n); //数字を出力する。
}
}
return(0);
}
ソースコードの説明
まず、3の倍数や5の倍数の求め方を知っておく必要があります。
3の倍数なら、その数字を3で割ったときのあまりが0になります。
実際に、3の倍数で考えてみましょう。例えば、3/3 = 1で、あまりが0です。6/3 = 2で、あまりが0です。9/3 = 0で、あまりが0です。あまりが0以外になれば、それは3の倍数ではないことがわかります。
5の倍数なら、その数字を5で割ったときのあまりが0になります。
実際に、5の倍数で考えてみましょう。例えば、5/5 = 1で、あまりが0です。10/5 = 2で、あまりが0です。15/5 = 0で、あまりが0です。あまりが0以外になれば、それは5の倍数ではないことがわかります。
これで、3の倍数や5の倍数の求め方はわかりましたが、それをC言語で作れないといけません。
C言語であまりを求めるためには、「%」を使います。
例えば、n%3なら、nを3で割ったときのあまりの数字が求められます。n%5なら、nを5で割ったときのあまりの数字です。
……ということで、3の倍数を条件文(if文)で判別するためには、次のコードを書けば良いことがわかります。
if((n%3)==0)
{
//省略
}
※「==」は、同じ(等しい)という意味です。
ただし、これだけだとダメです。
何がダメかといいますと、3のすべての倍数に当てはまってしまうことです。
条件を思い出してみてください。3の倍数では「Fizz」、5の倍数では「Buzz」、3の倍数かつ5の倍数では「Fizz Buzz」と出力しなければいけません。
つまり、3の倍数のかつ5の倍数になっているときは、「Fizz」だけや「Buzz」だけを出力してはいけません。例えば、15は3の倍数かつ5の倍数なので、「Fizz Buzz」と出力される必要があります。
よって、正確な条件は次のように考えられます。
- 1から100の整数値を出力していく。
- 3の倍数だが5の倍数ではないのなら、数字ではなく「Fizz」と出力する。
- 5の倍数だが3の倍数ではないのなら、数字ではなく「Buzz」と出力する。
- 3の倍数かつ5の倍数なら、数字ではなく「Fizz Buzz」と出力する。
……ということなので、「3の倍数だけ」とか「5の倍数だけ」といった考えをしていると、正しい出力が得られません。
さて、「3の倍数だが5の倍数ではない」というのは、2つの条件の組み合わせです。
それぞれ単体だと、次のようになりますよね。
if((n%3)==0) //3の倍数のとき
{
//省略
}
if((n%5)!=0) //5の倍数ではないとき
{
//省略
}
※「!=」は異なる(等しくない)という意味です。
この2つの条件を組み合わせるためには、「&&」を使います。使い方は簡単で、「条件1 && 条件2」という感じで直感的に使えます。
それでは、「Fizz」を出力するコードを書いてみます。
if((n%3)==0 && (n%5)!=0) //3の倍数だが5の倍数ではない場合
{
printf("Fizz\n", n); //「Fizz」と出力する。
}
こうした感じのコードを、残りの条件でも作ればOKです。
それでは、「Buzz」を出力するコードを書きます。これは、「Fizz」のコードと同じ考え方ができますよ。
else if((n%5)==0 && (n%3)!=0) //5の倍数だが3の倍数ではない場合
{
printf("Buzz\n", n); //「Bizz」と出力する。
}
続いて、「Fizz Buzz」を出力するコードを書きます。
else if((n%3)==0 && (n%5)==0) //3の倍数かつ5の倍数なら
{
printf("Fizz Buzz\n", n); //「Fizz Bizz」と出力する。
}
これで完了……というわけではありません。このままだと、数字が出力されないからです。
したがって、「Fizz」、「Buzz」、「Fizz Buzz」の条件に当てはまらない場合(else文)のコードを書きます。
else //それら以外の場合
{
printf("%d\n", n); //数字を出力する。
}
これで、条件分岐の部分のコードは完成しました!
for文のループに関しては、整数値であるnを1から100まで、1ずつ増加させていきます。そのnを使って、条件に当てはまらないかの判別をしているわけです。
……ということで、「Fizz Buzzプログラム」の作り方の説明はここまでです!
最後に、出力結果を掲載しておきます。
出力結果
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
Fizz Buzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
Fizz Buzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
Fizz Buzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
Fizz Buzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
Fizz Buzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
お疲れ様でした! 参考になったのなら幸いです。
関連記事