平成17年 秋期 基本情報技術者 午後 問06
問06 C言語次の C プログラムの説明及びプログラムを読んで,設問に答えよ。
〔プログラムの説明〕 関数 update_master は,処理年月を与えて,月刊誌の定期購読者マスタファイルの更新を 行うプログラムである。 (1) 関数 update_master の引数は,次のとおりである。 omf_name 旧定期購読者マスタファイル名
(2) 新旧の定期購読者マスタファイル及びトランザクションファイルのレコード様式は 次のとおりである。
@ 購読者コード及び雑誌コードは,空白を含まない 12 文字の英数字列である。 A 購読終了年月は,YYYYMM の形式で 6 けたの数字列である。 B レコードの終端には,改行文字 '\n' が付いている。 C レコードは,購読者コードを第1キー,雑誌コードを第2キーとして昇順に整列されている。 D 購読者は,複数の雑誌を購読することはあるが,同一の雑誌を重複して購読することはない。 (3) 旧定期購読者マスタファイル及びトランザクションファイルのレコードに誤りはないものとする。 (4) トランザクションファイルには,旧定期購読者マスタファイルを更新するための, 新規購読,購読期間延長及び購読打切りの3種類のレコードがある。 @ 新規購読及び購読期間延長レコードの購読終了年月は,与えられた処理年月以降になっている。 A 購読打切りレコードの購読終了年月は,“999999”となっている。 (5) 次のどちらかの条件を満足するレコードを,抽出レコードとする。 @ 旧定期購読者マスタファイルのレコードのうち,購読者コードと雑誌コードの組合せが トランザクションファイルには含まれていないもの A トランザクションファイルに含まれるレコード (6) 抽出レコードのうち,購読終了年月が与えられた処理年月以降であり,かつ “999999”ではないものだけを,新定期購読者マスタファイルに出力する。 (7) プログラム中で使用している関数 strcmp の仕様は,次のとおりである。 int strcmp(char *string1, char *string2)
〔プログラム〕 #include <stdio.h> #include <string.h> void update_master(char *, char *, char *, int, int); void update_master(char *omf_name, char *trf_name, char *nmf_name, int b_year, int b_month) { FILE *oldmf, /* 旧定期購読者マスタファイル */ *trf, /* トランザクションファイル */ *newmf; /* 新定期購読者マスタファイル */ char om_usrid[13], om_magid[13], t_usrid[13], t_magid[13]; long b_date, om_ldate, t_ldate, m_sts, t_sts, flg; oldmf = fopen(omf_name, "r"); trf = fopen(trf_name, "r"); newmf = fopen(nmf_name, "w"); b_date = b_year * 100 + b_month; m_sts = fscanf(oldmf, "%12s %12s %6ld\n", om_usrid, om_magid, &om_ldate); t_sts = fscanf(trf, "%12s %12s %6ld\n", t_usrid, t_magid, &t_ldate); while () { if ( m_sts == EOF ) flg = 1; else if ( t_sts == EOF ) flg = -1; else if ( (flg = strcmp(om_usrid, t_usrid)) == 0 ) flg = strcmp(om_magid, t_magid); if ( flg < 0 ) { if ( om_ldate >= b_date ) fprintf(newmf, "%12.12s %12.12s %6ld\n",); m_sts = fscanf(oldmf, "%12s %12s %6ld\n", om_usrid, om_magid, &om_ldate); } else { if () fprintf(newmf, "%12.12s %12.12s %6ld\n",); if ( flg == 0 ) m_sts = fscanf(oldmf, "%12s %12s %6ld\n", om_usrid, om_magid, &om_ldate); t_sts = fscanf(trf, "%12s %12s %6ld\n", t_usrid, t_magid, &t_ldate); } } fclose(oldmf); fclose(trf); fclose(newmf); } 設問 プログラム中の に入れる正しい答えを, 解答群の中から選べ。
a に関する解答群 ア (m_sts == EOF) && (t_sts == EOF) イ (m_sts == EOF) || (t_sts == EOF) ウ (m_sts != EOF) && (t_sts != EOF) エ (m_sts != EOF) || (t_sts != EOF) オ m_sts == EOF カ m_sts != EOF キ t_sts == EOF ク t_sts != EOF b,d に関する解答群 ア om_usrid, om_magid, om_ldate イ om_usrid, om_magid, t_ldate ウ om_usrid, t_magid, om_ldate エ om_usrid, t_magid, t_ldate オ t_usrid, om_magid, om_ldate カ t_usrid, om_magid, t_ldate キ t_usrid, t_magid, om_ldate ク t_usrid, t_magid, t_ldate c に関する解答群 ア b_date == 999999 イ b_date != 999999 ウ om_ldate == 999999 エ om_ldate != 999999 オ t_ldate == 999999 カ t_ldate != 999999
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||||