![]()
令和元年 秋期 基本情報技術者 午後 問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-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||