東京理科大学 infoserv[更新日]1999.11.10


次の問11から問14までの4問については,この中から1問を選択し,
答案用紙の選択欄のを マークして解答してください。
 なお,2問以上選択した場合には,はじめの1問について採点します。
平成11年度 秋期 午前問01〜05

問11 次の C プログラムの説明及びプログラムを読んで, 設問 1,2 に答えよ。

〔プログラムの説明〕

関数 wordwrap は,単語が行末で切れないように英文を出力する。

(1) 関数 wordwrap の引数は,英文が格納された入力文字列の配列 str[]と, 出力する 1 行の最大文字数 max(ただし,改行文字を含まない)である。

(2) 入力文字列中の単語は,1 文字の空白文字で区切られている。入力文字列の 先頭と最後に空白文字はない。

(3) 単語の途中で 1 行の最大文字数を超える場合は,その単語が次の行の先頭に なるように出力する。

(4) 単語の最大長を wx,入力文字列の長さを sx とすると,
0 < wx < 16 ≦ max < sx < 1024 の関係が成り立つものとする。

〔プログラム〕

(行番号)
01 #include <stdio.h>
02 #include <string.h>
03 #define  BUFFMAX  1024
04 #define  WORDMAX  16
05 
06 void wordwrap(char str[], int max)
07 {
08     char word[BUFFMAX / 2][WORDMAX], buff[BUFFMAX];
09     int  leng[BUFFMAX / 2], i, idx, cnt, pos;
10                          /*** 文字列を単語に分解する ***/
11     i = idx = cnt = 0;
12     while (str[i] != '\0') {
13         if (str[i] == ' ') {
14             word[idx][cnt] = '\0';
15             leng[idx] = cnt;
16             idx++;
17             cnt = 0;
18         }
19         else {
20             word[idx][cnt] = str[i];
21             cnt++;
22         }
23         i++;
24     }
25     word[idx][cnt] = str[i];
26     leng[idx] = cnt;
27                          /*** 出力する ***/
28     i = pos = 0;
29     while (i <= idx) {
30         if ((pos + leng[i]) > max) {
31             buff[pos-1] = '\0';
32             printf("%s\n", buff);
33             pos = 0;
34         }
35         strcpy(&buff[pos], word[i]);
36         pos += leng[i];
37         buff[pos] = ' ';
38         pos++;
39         i++;
40     }
41     buff[pos-1] = '\0';
42     printf("%s\n", buff);
43 }
設問1 次の記述中の に入れる正しい答えを, 解答群の中から選べ。

入力文字列と 1 行の最大文字数が次の値のとき,21 行目は 回実行される。また, プログラムが終了したときの変数 pos の値は である。

入力文字列:

AAAA△BBBBB△CCC△DDDD△EEE△FFF\0

1 行の最大文字数: 18

解答群

 ア 5    イ 7    ウ 8    エ 12     オ 13

 カ 15    キ 16    ク 22    ケ 27

設問2 次の記述中の に入れる正しい答えを, 解答群の中から選べ。

入力文字列の先頭の空白文字はそのまま出力するように,最初の単語に先頭の 空白文字列を含め,また単語間の空白文字が何文字あっても,1 文字にするように プログラムを修正する。

そのためには,αを12 行目の直前に,βを18 行目の直前に挿入すればよい。

α

while(str[i] == ' '){
word[idx][cnt] = str[i];
;
;
}

β

while(str[] == ' ')
i++;

解答群

 ア cnt++    イ cnt--    ウ i    エ i++    オ i--

 カ i+1    キ i-1    ク idx++    ケ idx--


東京理科大学 infoserv 戻る 次頁:問12