開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: C
- Clang (コンパイラ)
プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第1章(やさしい入門)、1.6(配列)の演習 1-13、1-14を解いてみる。
その他参考書籍
- プログラミング言語Cアンサー・ブック 第2版 (クロビス・L.トンド、スコット・E.ギンペル(著)、矢吹 道郎(翻訳))
演習 1-13.
横書き
コード
sample.c
#include <stdio.h>
#define IN 1
#define OUT 0
#define MAXLENGTH 11
main()
{
int c, i, nc, state;
int other; /* 10文字以上の単語数 */
int len; /* 各柱状の長さ */
int wl[MAXLENGTH]; /* 各長さの単語数のカウンタ */
state = OUT;
for (i = 0; i < MAXLENGTH; ++i)
wl[i] = 0;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\n' || c == '\t') {
state = OUT;
if (nc > 0)
if (nc < MAXLENGTH)
++wl[nc];
else
++other;
nc = 0;
} else {
++nc;
if (state == OUT)
state = IN;
}
}
for (i = 1; i < MAXLENGTH; ++i) {
printf("%5d %5d ", i, wl[i]);
len = wl[i];
while (len > 0) {
putchar('*');
--len;
}
putchar('\n');
}
if (other > 0) {
printf("%5s %5d ", "other", other);
while(other > 0) {
putchar('*');
--other;
}
putchar('\n');
}
}
入出力結果(Terminal)
$ cat sample.c|./a.out
1 39 ***************************************
2 37 *************************************
3 15 ***************
4 11 ***********
5 8 ********
6 7 *******
7 5 *****
8 4 ****
9 3 ***
10 4 ****
other 11 ***********
$ ./a.out
a
aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaaaa
aaaaaaaaaaaaaaa
a aaa aaaaa aaaaaaa aaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
a aa aaa aaaa aaaaa
a a a a a a aaaaaaaaaaaaaaaaaaaaaaa
1 9 *********
2 2 **
3 3 ***
4 2 **
5 3 ***
6 1 *
7 2 **
8 1 *
9 2 **
10 0
other 3 ***
$
縦書き
コード
sample.c
#include <stdio.h>
#define IN 1
#define OUT 0
#define MAXLENGTH 11
main()
{
int c, i, j, nc, state;
int other; /* 10文字以上の単語数 */
int len; /* 各柱状の長さ */
int max; /* lenの最大値 */
int wl[MAXLENGTH]; /* 各長さの単語数のカウンタ */
state = OUT;
for (i = 0; i < MAXLENGTH; ++i)
wl[i] = 0;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\n' || c == '\t') {
state = OUT;
if (nc > 0)
if (nc < MAXLENGTH)
++wl[nc];
else
++other;
nc = 0;
} else {
++nc;
if (state == OUT)
state = IN;
}
}
max = 0;
for (i = 0; i < MAXLENGTH; ++i) {
if (wl[i] > max)
max = wl[i];
}
for (i = max; i > 0; --i) {
printf("%2d ", i);
for (j = 0; j < MAXLENGTH; ++j) {
if (wl[j] >= i)
printf(" * ");
else
printf(" ");
}
if (other >= i)
printf(" * ");
putchar('\n');
}
printf(" ");
for (i = 0; i < MAXLENGTH; ++i)
printf(" %2d ", i);
printf("other\n");
}
入出力結果(Terminal)
$ cat sample.c | ./a.out
49 *
48 *
47 * *
46 * *
45 * *
44 * *
43 * *
42 * *
41 * *
40 * *
39 * *
38 * *
37 * *
36 * *
35 * *
34 * *
33 * *
32 * *
31 * *
30 * *
29 * *
28 * *
27 * *
26 * *
25 * * *
24 * * *
23 * * *
22 * * *
21 * * *
20 * * *
19 * * *
18 * * *
17 * * * *
16 * * * *
15 * * * *
14 * * * *
13 * * * *
12 * * * *
11 * * * *
10 * * * *
9 * * * *
8 * * * * * *
7 * * * * * * * *
6 * * * * * * * * *
5 * * * * * * * * *
4 * * * * * * * * *
3 * * * * * * * * * * *
2 * * * * * * * * * * *
1 * * * * * * * * * * *
0 1 2 3 4 5 6 7 8 9 10 other
$ ./a.out
0 1 2 3 4 5 6 7 8 9 10 other
$ ./a.out
a
1 *
0 1 2 3 4 5 6 7 8 9 10 other
$ ./a.out
a
aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaaaa
aaaaaaaaaaaaaaa
a aaa aaaaa aaaaaaa aaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
a aa aaa aaaa aaaaa
a a a a a a aaaaaaaaaaaaaaaaaaaaaaa
9 *
8 *
7 *
6 *
5 *
4 *
3 * * * *
2 * * * * * * * *
1 * * * * * * * * * *
0 1 2 3 4 5 6 7 8 9 10 other
$
演習 1-14.
コード
sample.c
#include <stdio.h>
#define MAXORD 1024
main()
{
int c, i, j, max, other;
int oc[MAXORD];
for (i = 0; i < MAXORD; ++i)
oc[i] = 0;
other = 0;
while ((c = getchar()) != EOF) {
if (c < MAXORD)
++oc[c];
else
++other;
}
max = 0;
for (i = 0; i < MAXORD; ++i) {
if (oc[i] > max)
max = oc[i];
}
for (i = max; i > 0; --i) {
printf("%4d ", i);
for (j = 0; j < MAXORD; ++j) {
if (oc[j] > 0) {
if(oc[j] >= i)
printf(" * ");
else
printf(" ");
}
}
if(other > 0)
if(other >= i)
printf(" * ");
putchar('\n');
}
printf(" ");
for (i = 0; i < MAXORD; ++i)
if (oc[i] > 0)
printf("%4d ", i);
if (other > 0)
printf("other");
putchar('\n');
}
入出力結果(Terminal)
$ cat sample.c | ./a.out
435 *
434 *
433 *
432 *
431 *
430 *
429 *
428 *
427 *
426 *
425 *
424 *
423 *
422 *
421 *
420 *
419 *
418 *
417 *
416 *
415 *
414 *
413 *
412 *
411 *
410 *
409 *
408 *
407 *
406 *
405 *
404 *
403 *
402 *
401 *
400 *
399 *
398 *
397 *
396 *
395 *
394 *
393 *
392 *
391 *
390 *
389 *
388 *
387 *
386 *
385 *
384 *
383 *
382 *
381 *
380 *
379 *
378 *
377 *
376 *
375 *
374 *
373 *
372 *
371 *
370 *
369 *
368 *
367 *
366 *
365 *
364 *
363 *
362 *
361 *
360 *
359 *
358 *
357 *
356 *
355 *
354 *
353 *
352 *
351 *
350 *
349 *
348 *
347 *
346 *
345 *
344 *
343 *
342 *
341 *
340 *
339 *
338 *
337 *
336 *
335 *
334 *
333 *
332 *
331 *
330 *
329 *
328 *
327 *
326 *
325 *
324 *
323 *
322 *
321 *
320 *
319 *
318 *
317 *
316 *
315 *
314 *
313 *
312 *
311 *
310 *
309 *
308 *
307 *
306 *
305 *
304 *
303 *
302 *
301 *
300 *
299 *
298 *
297 *
296 *
295 *
294 *
293 *
292 *
291 *
290 *
289 *
288 *
287 *
286 *
285 *
284 *
283 *
282 *
281 *
280 *
279 *
278 *
277 *
276 *
275 *
274 *
273 *
272 *
271 *
270 *
269 *
268 *
267 *
266 *
265 *
264 *
263 *
262 *
261 *
260 *
259 *
258 *
257 *
256 *
255 *
254 *
253 *
252 *
251 *
250 *
249 *
248 *
247 *
246 *
245 *
244 *
243 *
242 *
241 *
240 *
239 *
238 *
237 *
236 *
235 *
234 *
233 *
232 *
231 *
230 *
229 *
228 *
227 *
226 *
225 *
224 *
223 *
222 *
221 *
220 *
219 *
218 *
217 *
216 *
215 *
214 *
213 *
212 *
211 *
210 *
209 *
208 *
207 *
206 *
205 *
204 *
203 *
202 *
201 *
200 *
199 *
198 *
197 *
196 *
195 *
194 *
193 *
192 *
191 *
190 *
189 *
188 *
187 *
186 *
185 *
184 *
183 *
182 *
181 *
180 *
179 *
178 *
177 *
176 *
175 *
174 *
173 *
172 *
171 *
170 *
169 *
168 *
167 *
166 *
165 *
164 *
163 *
162 *
161 *
160 *
159 *
158 *
157 *
156 *
155 *
154 *
153 *
152 *
151 *
150 *
149 *
148 *
147 *
146 *
145 *
144 *
143 *
142 *
141 *
140 *
139 *
138 *
137 *
136 *
135 *
134 *
133 *
132 *
131 *
130 *
129 *
128 *
127 *
126 *
125 *
124 *
123 *
122 *
121 *
120 *
119 *
118 *
117 *
116 *
115 *
114 *
113 *
112 *
111 *
110 *
109 *
108 *
107 *
106 *
105 *
104 *
103 *
102 *
101 *
100 *
99 *
98 *
97 *
96 *
95 *
94 *
93 *
92 *
91 *
90 *
89 *
88 *
87 *
86 *
85 *
84 *
83 *
82 *
81 *
80 *
79 *
78 *
77 *
76 *
75 *
74 *
73 *
72 *
71 *
70 *
69 *
68 *
67 *
66 *
65 *
64 *
63 *
62 *
61 *
60 *
59 *
58 *
57 *
56 *
55 *
54 *
53 *
52 *
51 *
50 *
49 *
48 *
47 *
46 * *
45 * *
44 * *
43 * * *
42 * * *
41 * * *
40 * * *
39 * * *
38 * * *
37 * * *
36 * * *
35 * * *
34 * * *
33 * * *
32 * * *
31 * * *
30 * * *
29 * * *
28 * * *
27 * * * *
26 * * * * * *
25 * * * * * *
24 * * * * * *
23 * * * * * *
22 * * * * * * *
21 * * * * * * * * *
20 * * * * * * * * * *
19 * * * * * * * * * *
18 * * * * * * * * * *
17 * * * * * * * * * *
16 * * * * * * * * * * * *
15 * * * * * * * * * * * *
14 * * * * * * * * * * * * * *
13 * * * * * * * * * * * * * * * *
12 * * * * * * * * * * * * * * * * * *
11 * * * * * * * * * * * * * * * * * *
10 * * * * * * * * * * * * * * * * * *
9 * * * * * * * * * * * * * * * * * * * * *
8 * * * * * * * * * * * * * * * * * * * * * * * *
7 * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
6 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
5 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
10 32 33 34 35 37 39 40 41 42 43 44 45 46 48 49 50 52 59 60 61 62 65 68 69 70 77 79 82 88 91 92 93 97 99 100 101 102 103 104 105 106 108 109 110 111 112 114 115 116 117 119 120 123 125
$ ./a.out
$ ./a.out
a 1 *
97
$ ./a.out
a
1 * *
10 97
$ ./a.out
abb
2 *
1 * * *
10 97 98
$
0 コメント:
コメントを投稿