このページでは平成26年春期 基本情報技術者試験のC言語問題のソースコードを実際に実行できるように変更したものを公開しています。C言語問題対策のためにも、こちらのソースコードをコピペして実際にプログラムを動作させ、どのように動作するのか、正解以外の選択肢を選んだ場合にどのような動きになるか、どう仕様を満たさないかを確認するために使用してみてください。
問題
平成26年春期のC言語問題はIPAの下記ページで公開されています。
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_fe_pm_qs.pdf
設問1
スポンサーリンク
C言語ソースコード
#include<stdio.h>
#define WLEN_MAX 20
/* format_textの第三引数width(1行の最大文字数) */
#define WIDTH_MAX 50
void format_text(char *, char *, int);
void format_text(char *in_file, char *out_file, int width) {
FILE *ifp, *ofp;
int ch, lpos = 0, sp = 0;
char str[WLEN_MAX + 2];
ifp = fopen(in_file, "r");
ofp = fopen(out_file, "w");
while ((ch = fgetc(ifp)) != EOF) {
if(ch == '\n') {
str[sp++] = ch;
str[sp] = '\0';
fputs(str, ofp);
/* 設問1[a] */
lpos = 0;
sp = 0;
} else if (ch == ' ') {
lpos += sp;
if (lpos >= width) {
/* 設問1[b] */
str[sp++] = '\n';
lpos = 0;
}
str[sp] = '\0';
fputs(str, ofp);
fputc(ch, ofp);
lpos++;
/* 設問1[c] */
sp = 0;
} else {
/* 設問1[d] */
if ((lpos + sp) >= width) {
fputc('\n', ofp);
lpos = 0;
}
str[sp++] = ch;
}
}
str[sp] = '\0';
fputs(str, ofp);
fclose(ifp);
fclose(ofp);
}
int main(int argc, char* argv[]) {
FILE *tfp;
/* 引数チェック */
if (argc != 3) {
printf("入力ファイル名[第一引数]と出力ファイル名[第二引数]を入力してください\n");
return -1;
}
tfp = fopen(argv[1], "r");
if (tfp == NULL) {
printf("入力ファイル[第一引数]が開けません\n");
return -1;
}
fclose(tfp);
tfp = fopen(argv[2], "w");
if (tfp == NULL) {
printf("出力ファイル[第二引数]が開けません\n");
return -1;
}
fclose(tfp);
format_text(argv[1], argv[2], WIDTH_MAX);
return 0;
}
スポンサーリンク
実行方法
ソースコードをコンパイルし、実行ファイルを生成します。さらに、下記をコピペして適当なファイル名をつけて保存してください。例えば「input.txt」など。
The Information Technology Engineers Examination was first administered in 1969. In 1970, it became a national examination. Since its commencement, the examination has played an important role in the development of IT engineers.
実行時には、第一引数に用意した入力ファイル名を、第二引数に出力ファイル名をしてください。例えばコマンドラインで実行するのであれば、下記のコマンドで実行してください。「input.txt」が入力ファイルで、「output.txt」が出力ファイルになります。出力ファイルはあらかじめ用意しておく必要はありません。
26s_1.exe input.txt output.txt
実行結果
プログラムを実行すると、第一引数に指定した入力ファイルのテキストに対し、50文字を超えた行は50文字で改行するように変換したテキストが出力ファイルに保存されます。例えば上記のテキストを入力とした場合、出力ファイルの中身は下記のようになります。
The Information Technology Engineers Examination was first administered in 1969. In 1970, it became a national examination. Since its commencement, the examination has played an important role in the development of IT engineers.
スポンサーリンク
動作確認用の変更箇所
main関数追加
問題にはmain関数がないのでmain関数を追加しています。引数の数と、引数で指定されたファイルが開けるかどうかを確認し、問題なければformat_text関数を実行しています。format_text関数の第三引数は50にしていますが、この数を変更すると出力結果も変わります。
設問2
スポンサーリンク
C言語ソースコード
#include<stdio.h>
#define WLEN_MAX 20
/* format_textの第三引数width(1行の最大文字数) */
#define WIDTH_MAX 50
void format_text(char *, char *, int);
void format_text(char *in_file, char *out_file, int width) {
FILE *ifp, *ofp;
int ch, lpos = 0, sp = 0;
int lch = '.';
char str[WLEN_MAX + 2];
ifp = fopen(in_file, "r");
ofp = fopen(out_file, "w");
while ((ch = fgetc(ifp)) != EOF) {
if(ch == '\n') {
str[sp++] = ch;
str[sp] = '\0';
fputs(str, ofp);
/* 設問1[a] */
lpos = 0;
sp = 0;
} else if (ch == ' ') {
lpos += sp;
if (lpos >= width) {
/* 設問1[b] */
str[sp++] = '\n';
lpos = 0;
}
str[sp] = '\0';
fputs(str, ofp);
/* 設問2[e] */
if (lpos != 0) {
fputc(ch, ofp);
lpos++;
}
/* 設問1[c] */
sp = 0;
} else {
/* 設問1[d] */
if ((lpos + sp) >= width) {
fputc('\n', ofp);
lpos = 0;
}
if ((lpos == 0) && (sp == 0) && (lch == '.')) {
fputc(' ', ofp);
lpos++;
}
/* 設問2[d] */
lch = ch;
str[sp++] = ch;
}
}
str[sp] = '\0';
fputs(str, ofp);
fclose(ifp);
fclose(ofp);
}
int main(int argc, char* argv[]) {
FILE *tfp;
/* 引数チェック */
if (argc != 3) {
printf("入力ファイル名[第一引数]と出力ファイル名[第二引数]を入力してください\n");
return -1;
}
tfp = fopen(argv[1], "r");
if (tfp == NULL) {
printf("入力ファイル[第一引数]が開けません\n");
return -1;
}
fclose(tfp);
tfp = fopen(argv[2], "w");
if (tfp == NULL) {
printf("出力ファイル[第二引数]が開けません\n");
return -1;
}
fclose(tfp);
format_text(argv[1], argv[2], WIDTH_MAX);
return 0;
}
スポンサーリンク
実行方法
実行方法は設問1と同じです。
実行結果
プログラムを実行すれば下記のようなテキストが第二引数で指定したファイルに書き込まれます。
The Information Technology Engineers Examination was first administered in 1969. In 1970, it became a national examination. Since its commencement, the examination has played an important role in the development of IT engineers.
スポンサーリンク
動作確認用の変更箇所
main関数追加
設問1と同じmain関数を追加しています。
他の回のソースコード
他の回のソースコードについても下記ページで公開していますので、是非ソースコードを使用してプログラムの動きを見てみてください。
基本情報技術者試験C言語問題のプログラムを動かしてみよう(まとめ)本ページのプログラムについて
プログラムはIPA公開の過去問題から引用し、さらに動作確認できるように必要な部分に関してのみ加工して使用させていただいております。
出典:平成26年度 春期 基本情報技術者試験(FE)試験区分 午後 問9