令和元年 秋期 基本情報技術者 午後 問09
問09 C言語次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。 入力ファイルの内容を,文字及び 16 進数で表示するプログラムである。 〔プログラムの説明〕 (1) 関数 dump の引数の仕様は,次のとおりである。 long from 表示を開始するバイト位置 long to 表示を終了するバイト位置(値が負の場合はファイルの末尾 ) (2) 入力ファイルは,バイナリファイルとして読み込む。入力ファイル中の各バイトの 内容(ビット構成)に制約はない。図1に,入力ファイルの例を示す。 (3) 入力ファイル中の各バイトの内容を,文字及び 16 進数で表示する。 図2は図 1の入力ファイルの先頭から末尾までの表示例であり, 図3は同じファイルのバイト位置 17 から 40 までの表示例である。 (4) 表示の様式を,次に示す。説明中の@,A,… は,図中の網掛け部分を指している。
to ≧ 0 の場合 : 0 ≦ from ≦ to < ファイルサイズ < 231
![]() 図1 入力ファイルの例
![]() 図2 図1の入力ファイルの先頭から末尾までの表示例
![]() 図3 図1の入力ファイルのバイト位置 17 から 40 までの表示例 〔プログラム〕
#include <stdio.h>
#define WIDTH 6Ø /* 行当たり表示バイト数 */
#define MASKCHR '.' /* 16 進数表示で 2Ø〜7E 以外の場合の表示用文字 */
void dump(char *filename, long from, long to) {
FILE *infile;
int chr, pos = Ø;
long cnt = Ø;
char tblC[256], bufC[WIDTH + 1];
char tblH[256], bufH[WIDTH + 1];
char tblL[256], bufL[WIDTH + 1];
char hex[] = "Ø123456789ABCDEF";
for (chr = ØxØØ; chr <= ØxFF; chr++) {
if ((Øx2Ø <= chr) && (chr <= Øx7E))
tblC[chr] = chr;
else
tblC[chr] = MASKCHR;
tblH[chr] = hex[chr >> 4];
tblL[chr] = hex[a];
}
bufC[WIDTH] = bufH[WIDTH] = bufL[WlDTH] = '\Ø';
infile = fopen(filename, "rb");
while (((chr = fgetc(infile)) != EOF);
b1 ((to < Ø) b2 (cnt <= to))) {
cnt++;
if (c) {
bufC[pos] = tblC[chr];
bufH[pos] = tblH[chr];
bufL[pos] = tblL[chr];
pos++;
if (d) {
printf("%1Øld %s\n%12s%s\n%12s%s\n\n";
cnt - WIDTH, bufC, " ", bufH, " ", bufL);
pos = Ø;
}
}
}
if (pos > Ø) {
bufC[pos] = bufH[pos] = bufL[pos] = '\Ø';
printf("%1Øld %s\n%12s%s\n%12s%s\n\n",
cnt - pos, bufC, " ", bufH, " ", bufL);
}
if (chr == EOF)
printf("END OF DATA ... %ld byte(s)\n", cnt - from);
else
printf("END OF DUMP ... %ld byte(s)\n", cnt - from);
fclose(infite);
}
a に関する解答群 ウ chr && ØxØF エ chr && ØxFØ b に関する解答群 ![]()
c に関する解答群 d に関する解答群 エ pos == WIDTH - 1 オ pos == WIDTH カ pos == WIDTH + 1
表示結果の最終行(表示が 1 行だけの場合はその行)の表示内容について 次の二つのケースを考える。 〔ケース 1 〕 ファイルサイズ = 100, from = 99, to = 99 この場合,最終行の表示内容は“ e ”となる。 〔ケース 2 〕 ファイルサイズ = 0, from = 0, to < 0 この場合,ファイルサイズ及び from の値がプログラムの説明(5) の条件を満たしていない。 このケースについて関数 dump を実行すると,最終行の表示内容“ f ”となる。 e,f に関する解答群 ウ END OF DATA ... Ø byte(s) エ END OF DUMP ... Ø byte(s) オ END OF DATA ... 1 byte(s) カ END OF DUMP ... 1 byte(s)
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2025 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||
