演習課題「ドットで文字を出力しよう」
右のコードエリアには、「A」という文字が、letter_A という2次元配列で表されています。
この配列から要素を順に取り出して出力してください。
ただし、要素が 1 だったら「@」(半角アットマーク)、0 だったら「 」(半角スペース)を出力します。
プログラムを実行して、正しく出力されれば演習課題クリアです!
期待する出力値
@@
@ @
@ @
@@@@@@
@ @
@ @
#05:ドット絵を表示させよう
2 次元配列を使って簡単なドット絵を表示させてみましょう。2 次元配列をもとに、テキストで出力します。
このチャプターで使用した、ドット絵を表す 2 次元配列です。
1 がドットがあるところを表していて、0 がドットがないところを表しています。int enemy_image[7][16] = {
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
{1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1},
{1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1}
};
#include <stdio.h>
int main(void)
{
int enemy_image[7][16] = {
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
{1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1},
{1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1}
};
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 16; j++) {
printf("%d", enemy_image[i][j]);
}
printf("\n");
}
}
#include <stdio.h>
int main(void)
{
int enemy_image[7][16] = {
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
{1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1},
{1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1}
};
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 16; j++) {
if (enemy_image[i][j] == 1) {
printf("#");
} else {
printf(" ");
}
}
printf("\n");
}
}
条件演算子 (三項演算子) は、次のように記述されます。(条件式) ? (式1) : (式2)
・条件式が成立するとき、式1 の値が返されて、
・そうでないときは、式2 の値が返されます。
※複数の条件を組み合わせるとわかりにくくなるので、そのような使い方は推奨されません。
たとえば、以下のように複数の条件で分岐させると、わかりにくいコードになってしまいます。printf("%d\n", x == 1 ? 100 : x == 2 ? 200 : x == 3 ? 300 : 400);
このチャプターで作成したコードです。// ドット絵を表示させよう
#include <stdio.h>
int main(void)
{
int enemy_image[7][16] = {
{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
{1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1},
{1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1}
};
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 16; j++) {
printf("%s", enemy_image[i][j] == 1 ? "#" : " ");
}
printf("\n");
}
}
- 2 次元配列 - 初心者のためのポイント学習 C 言語
http://www9.plala.or.jp/sgwr-t/c/sec09.html
- 多次元配列 - 超初心者向けプログラミング入門
https://programming.pc-note.net/c/hairetsu2.html
- 簡潔な条件判断~三項目演算子 - もう一度基礎から C 言語
https://www.grapecity.com/developer/support/powernews/column/clang/018/page04.htm