プログラミングスクールC言語プログラミング入門講座レッスンノート 基本情報技術者試験 午後対策

基本情報技術者試験 午後対策

C言語プログラミング入門講座のレッスンノート

レッスンノートって?レッスンノートって?

2/15のレッスン内容は、以下の通りです。

 ○ 基本情報技術者試験 午後対策
  ・ 2015年度秋期 午後問9(C言語の問題)
 ○ C言語の文法レッスン

以下に詳細を記します。

□ 2015年度秋期 午後問9

「入退室の状況を印字する」という仕様を持った、C言語のプログラムが題材です。

まずは、仕様について以下にまとめました。

○ 仕様のまとめ

 [外部仕様]
 ・ 制限エリアは、3段階のレベルに分けられている
  - 高いレベルの部屋には、1段階低いレベルの部屋からしか入退室できない
 ・ ドア番号は、10の位がレベル、1の位が番号を示す

 [内部仕様]
 ・ 入退室レコード
  - 1行に記される内容は、(1)の本文の表を参照。
 ・ 入退室のアクセスログ
  - 上記入退室レコードを「IDと日時の昇順」で1行以上保存される
 ・ 入退室状況の印字スタイル
  - 入退室のアクセスログの内容を元に、図3に示すスタイルで印字する
   - 同一人物のアクセスが連続する場合、IDと名前の部分は空白にする

以下で設問の解説に行きたいのですが、C言語のレッスンで触れていない項目がありました。

ということで、先にそちらの文法レッスンを実施しました。内容は、後述の「C言語の文法レッスン」を参照してください。

○ 設問1の解説

a と b について説明しました。

a: エ

getRecord()(ログの読み込み処理)において、これ以上読み込むものがなかった場合に実施される処理です。

このプログラムでは、logEOFという変数をファイルの終わりを示すフラグとして使っています(0である限り、終わりではないことを示す)。

したがって、このlogEOFにファイルの読み込みが終わったことを示す情報を設定しなければなりません。

正解は、エの logEOF = EOF となります。

b: イ

putRecord()(入退室状況の印字処理)において、cardIDとlastIDが一致しなかった場合に実施される処理です。

さて、lastIDの役割は何でしょう。印字の仕様を見ると「同一人物のアクセスが連続する場合、IDと名前の部分は空白にする」とありましたね。

つまり、今回の印字対象と前回の印字対象が「同一人物」かをチェックする必要があります。前者はcardIDで示されますから、lastIDは後者を示す役割をもつことがわかります。

そして、この両者が一致しなかったので、IDと名前を出力していますね(printf("\n%4s %1Os ", cardID, name); の箇所)

この際、lastIDとcardIDが異なるわけですから、次回の印字処理のためにlastIDを更新しておかなければなりません。

したがって、bの欄にはイのlastID = cardID を入れる必要があります。



□ C言語の文法レッスン

ここで取り上げるのは、C言語におけるファイルアクセスについてです。

○ ファイルアクセスについて

[ヘッダファイル]

<stdio.h>のインクルードが必須です。

[ファイル情報]

<stdio.h>で定義されている「FILE型構造体」の中で、ファイルの各種情報を管理します。

管理できるのは、対象ファイルのオープン~クローズの間です。

[標準関数]

・ fopen()
 - ファイルをオープンする関数です。引数を2つ取り、オープンしたファイル情報へのポインタ(以下、FILEポインタと称す)を返します。
 - 第1引数は、ファイル名を示す文字列を指定します。
 - 第2引数は、ファイルオープンのモードを文字列で指定します。"r"は読み取り、"w"は新規書き込み、"a"は追加の各モードになります。
・ fclose()
 - ファイルをクローズする関数です。引数を1つ取り、fopen()でオープンしたFILEポインタを指定します。
・ fscanf()
 - 入力元をFILEポインタとして、scanf()と同等の処理をします。読み込み範囲は、1行分です。
 - 第1引数はファイルポインタ、第2引数以降はscanf()の第1引数以降と同じ内容を指定します。
・ fprintf()
 - 出力先をFILEポインタとして、printf()関数と同等の処理をします。
 - 第1引数はファイルポインタ、第2引数以降はprintf()の第1引数以降と同じ内容を指定します。

[EOFについて]

EOFは、ファイルの終端を示す記号として頻繁に使用します(EOF: End Of File の略)

大部分の実行環境では、「-1」と定義されているマクロになります。
このレッスンノートを書いたコーチ

富士通でソフトウェア開発を担当。楽しいプログラミングの醍醐味、教えます

楽しめるC言語セミナー
源田雄一 (C言語)

品川・戸塚・武蔵中原・立川・新横浜・中山・長津田・成瀬・町田・関内・石川町・東小金井...

レッスンノート ページ先頭へ

C言語情報

サイタのC言語講師がブログを通して、C言語情報を発信。更新情報のチェックはこちらから!