平成7年度 秋期 第二種 午後 問7〜問10

                        [更新日]1995.10.25
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃次の問7から問10までの4問については、この中から1問を選択し、答案用紙の┃ ┃選択欄の「選」を黒くマークして解答してください。             ┃ ┃ なお、2問以上選択した場合には、はじめの1問について採点します。    ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 問7 次のCプログラムの説明及びプログラムを読んで、設問に答えよ。 [プログラムの説明]    キーボード入力の練習用プログラムである。 事前に用意してある文字列格納ファイル(moji.f)から1行の文字列を 読み込む。画面に表示後、同一文字列をキーボードから入力させる。入力文字 列が表示文字列に等しいか否かをチェックする。等しくない場合は再入力を促 す。文字列格納ファイルの終端を検出した時点で、再入力した回数を画面に表 示する。 図1に示した文字列格納ファイルをもとに、プログラムを実行した例を図2に示す。 ┌───────────────────┐ │                   │ │#include <stdio.h> │ │#define LOOP  1    │ │main()             │ │{                  │ │ }                 │ │                   │ │                   │ └───────────────────┘ 図1 文字列格納ファイル(moji.f)の内容の例 ┌────────────────────────────┐ │*** キーボード入力練習プログラム ***      │ │画面に表示された文字列をキーボードから入力してください。│ │                            │ │                            │ │  #include<stdio.h>         │ │>>#include<stdio.h>         │ │  #define LOOP 1            │ │>>#defune LOOP 1            │ │                            │ │!!文字“i”を文字“u”と間違えています。      │ │入力をやり直してください。               │ │                            │ │  #define LOOP 1            │ │>>#define LOOP 1            │ │  main()                    │ │>>main()                    │ │  {                         │ │>>{                         │ │  }                         │ │>>}                         │ │                            │ │                            │ │*** 再入力回数 = 1回              │ └────────────────────────────┘ 図2 プログラムの実行例 (1) 文字列格納ファイルに含まれる文字は、英数字、そのほかの図形文字、 空白文字及び改行文字“\n”である。 (2) 文字列格納ファイルの行とは、行末が改行文字であり、長さが行末を含 めないで1文字以上70文字以下の文字列である。改行文字の直前の文字 は、空白以外の文字である。ファイル内には複数の行が存在する。 (3) 図2において先頭文字が“>>”の行は、練習者がキーボードから文字列 を入力する行を示している。キーボードから入力された文字列の長さは、 行末の改行文字を除いた部分が、70文字を超えないものとする。 (4) 表示文字列とキーボードからの入力文字列の比較チェックは、次の手順 で行う。 1. 両者の文字列長を比較し、長さが異なる場合には、改行後にエラー メッセージ“!!入力文字数が違っています。”を出力し、更に、 改行後にメッセージ“入力をやり直して下さい。”を出力して再 入力を促す。 2. 両者の長さが等しい場合には、対応する文字を1文字ずつ比較する。 3. 不一致の文字があった場合には、最初の不一致文字に対して、改 行後に入力文字誤りのメッセージ“!!文字“x”を文字“y”と間 違えています。”を出力する。“x”は文字列格納ファイルから読 み込んだ文字を表す。“y”はキーボードから間違って入力された 文字を表す。 更に、改行後にメッセージ“入力をやり直してください。”を出 力して再入力を促す。 4. 入力誤りがあった場合は、再入力した回数を記録する。 5. 対応するすべての文字が等しい場合は、文字列格納ファイルから 次の行を読み込んで、その文字列を画面に表示し、キーボード入 力チェックを繰り返す。 (5) プログラムを終了する直前に、再入力の回数を10進数形式で画面に表示 する。 設問 プログラム中の[ ]に入れる正しい答えを、解答群の中から選べ。 [プログラム] #include <stdio.h> #include <string.h> #define LOOP 1 #define LEXIT 0 #define RECLEN 72 main() { FILE *fp; char fbuf[RECLEN], ibuf[RECLEN],*cf,*ci; int mode,ercnt; fp = fopen( "moji.f","r"); printf("\n*** キーボード入力練習プログラム ***\n"); printf("画面に表示された文字列をキーボードから入力してください。\n\n"); ercnt = 0; while(fgets(fbuf, RCLEN, fp) [ a ] NULL){ for(cf = fbuf; *cf != '\n'; c++); *cf = '\0'; mode = LOOP; while(mode == LOOP){ printf(" %s\n >>",[ b ]); [ c ]; if(strlen(fbuf) != strlen(ibuf)){ printf("\n!!入力文字数が違っています。"); } else{ for(cf = fbuf, ci = ibuf; *cf != '\0'; cf++, ci++){ if(*cf != *ci){ printf("\n!!文字"%c"を文字"%c"と間違えています。",*cf,*ci); break; } } if(*cf == '\0')mode = LEXIT; } if(mode == LOOP){ [ d ]; printf("\n入力をやり直してください。\n"); } } } fclose(fp); printf("\n*** 再入力回数 = [ e ]回\n", ercnt); } aに関する解答群 ア = イ == ウ != エ += bに関する解答群 ア cf イ *cf ウ ci エ *ci オ fbuf カ ibuf cに関する解答群 ア fgets(fbuf, RECLEN, fp) イ getc(fp) ウ gets(ibuf) エ getchar() dに関する解答群 ア cf = &fbuf イ cf++ ウ ercnt = 0 エ ercnt++ eに関する解答群 ア %c イ %d ウ %s エ %x