基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成17年 春期 基本情報技術者 午後 問06
問06   C言語

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

〔プログラムの説明〕

関数 print_string は,欧文ピッチ処理(文字固有の字幅に従って字送りする)を 行って印刷するとき,単語の途中で改行されないように英文を出力するプログラムである。

(1) 関数 print_string の引数は,次のとおりである。

line_w  1行の行幅(ポイント数)

str_list  出力する英文を構成する単語の配列 (最後の要素には,NULL が格納されている)

char_list  出力する単語を構成する文字とその文字幅(ポイント数)の リスト(構造体 CHARPROF の配列)

space_w  空白文字の文字幅(ポイント数)

(2) 文字幅は,文字ごとに次に示す構造体 CHARPROF で定義される。


typedef struct { char char_p; /* 文字 */
                 int  char_w; /* 文字幅(ポイント数) */
               } CHARPROF;

(3) 単語幅は,単語を構成する各文字の文字幅の和である。 単語幅を求めるために,関数 word_width を用いる。

(4) 単語を出力しようとしたときに,1行の行幅を超える場合は, その単語が次の行の先頭になるように出力する。 ただし,どの単語幅も行幅を超えることはない。

(5) 単語は,空白を含まない文字列である。 単語と単語の間には,1文字の空白文字を出力する。 ただし,行の最後に出力する単語の後には,空白文字は出力しない。

〔プログラム〕

#include <stdio.h>
typedef struct { char char_p; /* 文字 */
                 int  char_w; /* 文字幅(ポイント数) */
               } CHARPROF;
void print_string(int, char *[], CHARPROF *, int);
int word_width(char *, CHARPROF *);
void print_string(int line_w, char *str_list[],
                  CHARPROF *char_list, int space_w) {
    int cur_w = 0, str_w, idx;
    for (idx = 0; ; idx++) {
        str_w = word_width(str_list[idx], char_list);
        ;
        if (cur_w == str_w)    /* 最初の単語? */
            printf("%s", str_list[idx]);
        else {
            cur_w += space_w;
            if (cur_w <= line_w)
                printf(" %s", str_list[idx]);
            else {
                ;
                printf("\n%s", str_list[idx]);
            }
        }
    }
    putchar('\n');
}
int word_width(char *str, CHARPROF *char_list) {
    int print_w = 0, idx;
    while (*str != '\0') {
        for (idx = 0; ; idx++);
        print_w += char_list[idx].char_w; 
        str++;
    }
    return print_w;
}

設問 プログラム中の に入れる正しい答えを,解答群の中から選べ。

a に関する解答群

ア idx <= line_w        イ idx < line_w

ウ idx + 1 < line_w      エ str_list[idx] != NULL

オ str_list[idx] = NULL    カ str_list[idx] == NULL

b,c に関する解答群

ア cur_w += space_w       イ cur_w += str_w

ウ cur_w = 0            エ cur_w = space_w

オ cur_w = space_w + str_w    カ cur_w = str_w

d に関する解答群

ア *str != *char_list[idx].char_p

イ *str != char_list[idx].char_p

ウ *str == *char_list[idx].char_p

エ *str == char_list[idx].char_p

オ str != char_list[idx].char_p

カ str == char_list[idx].char_p

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]