課題のようなので、ヒントまで。〇×の代わりに配管工を描いてみました。
配列の縦横をループさせて配列の値の応じて文字を出力すれば絵が出ます。
c
1#include <stdio.h>
2
3int data[][18] = {
4 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
5 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0},
6 {0,0,0,0,0,0,0,1,1,1,1,1,0,0,3,3,3,0},
7 {0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,3,3,0},
8 {0,0,0,0,0,0,2,2,2,3,3,2,3,0,2,2,2,0},
9 {0,0,0,0,0,2,3,2,3,3,3,2,3,3,2,2,2,0},
10 {0,0,0,0,0,2,3,2,2,3,3,3,2,3,3,3,2,0},
11 {0,0,0,0,0,2,2,3,3,3,2,2,2,2,2,2,0,0},
12 {0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,0,0,0},
13 {0,0,0,2,2,2,2,2,1,2,2,2,1,2,0,0,0,0},
14 {0,0,2,2,2,2,2,2,2,1,2,2,2,1,0,0,2,0},
15 {0,3,3,2,2,2,2,2,2,1,1,1,1,1,0,0,2,0},
16 {0,3,3,3,0,1,1,2,1,1,3,1,1,3,1,2,2,0},
17 {0,0,3,0,2,1,1,1,1,1,1,1,1,1,1,2,2,0},
18 {0,0,0,2,2,2,1,1,1,1,1,1,1,1,1,2,2,0},
19 {0,0,2,2,2,1,1,1,1,1,1,1,1,0,0,0,0,0},
20 {0,0,2,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0},
21 {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
22};
23
24typedef struct {
25 int code;
26 char color[3];
27} COLOR_MAP;
28
29COLOR_MAP map[] = {
30 {0, " "},
31 {1, "〓"},
32 {2, "■"},
33 {3, "□"}
34};
35
36char* getColor(int code)
37{
38 int i;
39 for (i = 0; i < sizeof(map)/sizeof(map[0]); i++) {
40 if (map[i].code == code ) {
41 return map[i].color;
42 }
43 }
44 return NULL;
45}
46
47int main(int argc, char* argv[]) {
48 int x;
49 int y;
50 int x_max;
51 int y_max;
52
53 x_max = sizeof(data[0])/sizeof(data[0][0]);
54 y_max = sizeof(data)/sizeof(data[0]);
55
56 for (y = 0; y < y_max; y++) {
57 for (x = 0; x < x_max; x++) {
58 printf("%s", getColor(data[y][x]));
59 }
60 printf("\n");
61 }
62 return 0;
63}
■ 実行結果