
C言語の問題をどうやって解けば良いのか分からない・・・

C言語の問題を解く上で、どのポイントに気をつけたら良いかな?
今回はそんな人に向けて、C言語の問題の解き方や解くコツについて解説します。
目次
C言語というのは、基本情報技術者試験に出題される問題の中でも難易度が高く、しっかりとした勉強が必要になる分野です。
だからこそ万全の準備をしてから、今回の「C言語の問題の解き方と解くコツについて」と共に、C言語の点数を稼げるようにしてください。

ちなみにここのサイトでは、C言語の勉強法も解説しているぞ

C言語の基礎から出題される問題の種類まで広く網羅してるから、C言語を選ぶなら是非とも目を通しておいてね

・問題の種類は主に2つ

試験で出題される問題の種類は、主に2つ。
- プログラムの穴埋め
- 実行結果を求める問題
となっています。
では、それぞれの問題について少し解説をしていきます。
・プログラムの穴埋め
C言語の問題において、
最も出題されやすいのがプログラムの穴埋め。
1つ例を紹介すると、平成31年春期試験には、以下のようなプログラムの穴埋めが出題されました。


出典:平成31年春期 午後試験 問9より抜粋
基本的には1つの穴埋めに対して、1つの命令文や変数、配列や要素番号を入れるような形となっています。
逆に複数の命令文を入れる、プログラムを丸ごと選ぶというパターンはほとんどありません。
ただし1つの命令文を入れるにしても、プログラムをよく理解する必要があるため、
難易度が低い訳ではないという点に注意しましょう。
またC言語の問題においてよくあるのが、
プログラムの変更に伴い、プログラムを置き換えるというパターンです。
プログラムの置き換えに関しても、命令文を穴埋めするような問題が多いため、プログラムの穴埋めができるかどうかで、C言語の点数が大きく変動するでしょう。
とにかくプログラムに慣れることがプログラムの穴埋めにおけるコツであるため、できる限り過去問題の復習をして、プログラムを読むという経験を積んでください。

プログラムの穴埋めで注意するポイントと言えば、他の問題に影響が出てくるという点だね

自分が答えた命令文が、そのままプログラムに当てはまるから、下手をすればC言語全体の問題が総崩れになる可能性もある。だから慎重に答えるようにしてくれ
・実行結果を求める問題
プログラムの穴埋めの次に出題される可能性が高いのが、プログラムの実行結果を求める問題です。
例えば、平成29年春期に出題された問題。

出典:平成29年 春期 午後試験 問9より抜粋
上記の問題は、マークシート式の試験を採点するプログラムを題材とした問題で、順不同式の問題を採点する際の正しい実行内容を選ぶ問題でした。
実行結果を求める問題は、C言語の問題において後半で出題されるパターンが多く、
難易度が高くなりやすいといった特徴があります。
1つ前の「プログラムの穴埋め」でも話題に挙げましたが、
プログラムの穴埋めによる解答によって、他の問題に影響が出てくるといった点を考えると、他の問題より難易度が高いと言えるでしょう。
ちなみにC言語の問題は、出力された内容を答える問題や内部の変数を求める問題など、色々な形式で実行結果を求めるため、プログラムをトレースする力が重要です。
また過去問題の処理において分からない点があれば、C言語の開発環境を利用して、実際にプログラムを動かして理解してください。
もしくは問題に書かれているデータを当てはめて考えてみると、プログラムの処理が理解しやすいと思います。

プログラムを実行して処理を追ってみるという方法は、配列の処理を追う際に有効だと言えるね

あとは計算が必要な処理とかだな。特に小数とint型の変数が絡む場合なんかは、プログラムで実際に見た方が分かりやすいかも知れないな
・C言語の問題傾向
・文字列は出題率が高いため要注意

基本情報技術者試験のC言語において、出題されやすい内容が有ります。
それが文字列を題材とした問題です。
例えばC言語問題において、文字列を題材とした問題は、以下のようなものがあります。
- 平成31年春期
入力ファイル中の文字列に対して、それぞれの文字数をカウントする - 平成29年秋期
文字列の中から回文を探す - 平成27年春期
与えられた文字列を暗号化する - 平成26年春期
文字列を編集してファイルへ出力する - 平成25年秋期
2つの英単語を辞書順で比較する - 平成22年春期
英文を読み込んで、単語が途切れないように出力する
上記の出題歴を見てわかる通り、近年の試験では高確率で出題される内容となっています。
そのためC言語を対策する際には、
文字列操作や比較といった内容を重点的に復習しておきましょう。
またC言語のプログラムでは、文字列を比較、文字列をコピーする関数が出てきます。
- strcpy(a,b)
文字列bをaにコピーする - strncpy(a,b,c)
文字列bをcの長さだけ、aにコピーする - strcmp(a,b)
文字列aとbを比較して、結果によって負の値、0、正の値を返す
上記の関数は、文字列を題材とした問題だけでなく、
他のプログラムにおいても高確率で登場する関数であるため、軽く頭に入れておきましょう。
文字列の位置に関する情報は、文字列の出力や比較において重要な要素であり、
問題にもなりやすいといった特徴があります。
文字列の位置に関する変数や配列は、内容を理解できるまで時間が掛かる要素でもあるため、内容が理解できるまで粘り強くプログラムをトレースしてください。
ちなみに文字列を比較する処理で理解しづらい内容が出てきたら、比較する変数や配列に入っている内容をとりあえず書き出してみましょう。
すると比較する内容が明瞭になり、問題がスムーズに解けるようになります。

C言語って文字列を題材とした問題がすごく多いんだな。結構びっくりした

確かにね。けど文字列を操作するという内容は、文字列を題材とした問題以外にもよく出現するから、慣れておいて損は無いと思うよ

なるほど。出題率から考えても、文字列に慣れておいた方が良いんだな
・C言語にはアルゴリズムの要素が入る

C言語のプログラムには、アルゴリズムの内容である再帰や配列の入れ替え処理という要素が問題に含まれています。
そのため先にアルゴリズムの勉強をしてからC言語の勉強に入ると、ロジックを調べるといった手間が省けるようになるでしょう。
ちなみにC言語の問題には、配列の要素数や内容をこねくり回すような、プログラムの処理に着目した難しい問題が出題されます。
またC言語の文法に関しての問題は殆ど出題されないため、
- プログラムを読める(トレースする)
- ロジックを把握できる
といったポイントが重要になるでしょう。
他にもC言語におけるプログラムの記述方法とアルゴリズムで使う疑似言語は、内容が非常に似ているという注目すべき点があります。
例えばC言語において欠かせないループ処理。
- C言語
for(i = 0; i < 3; i++){
}
- 疑似言語
■i:0, i < 3, 1
|
■
両方を見比べてみると、非常に書き方が似ているのが分かるかと思います。
そのためC言語の勉強はアルゴリズムに、アルゴリズムの勉強はC言語に繋がると思って勉強を進めると、勉強のモチベーションアップに一役買ってくれるでしょう。

ちなみにC言語とアルゴリズム、どっちの勉強を先にしたら良いんだ?

正直言ってどっちでも良いかなといった感じだよ。ただC言語の勉強をスムーズにしたいなら、アルゴリズムを先に勉強しておいた方が良いかもね
・問題の解き方について

まずはC言語の問題における基本的な問題の解き方について解説します。
解き方にはいろいろな方法があると思いますが、基本的なやり方としては以下のような手順で解答を進めていきます。
- 問題がどれくらいで解けそうか、全体像をチェックする
- 問題文をサクッと読んで、重要箇所をチェック
- プログラムをしっかり読む
- 空欄を埋める前に問題文を再度チェックする
では、1つ1つ内容を確認していきましょう。
① 問題の全体像をチェックする
C言語の問題の全体像をチェックするのは、
- 問題を解くのにどのくらいの時間が掛かるかチェックする
- 問題の長さを把握して精神的な負担を軽くする
という理由があるからです。
やり方としては、
- 何を目的としたプログラムなのか
- 問題の形式
- プログラムの長さ
- 問題文の長さ
- プログラムの図解(掲載が有れば)
といった内容にサラッと目を通すだけ。
特にC言語の場合、
問題をじっくり解いていると試験時間が足りなくなる可能性が高いため、問題を途中で切り上げるという状況も考えて問題を把握しましょう。
② 問題文をサクッと読んで重要箇所をチェック
まず問題の全体像を把握しました。
それでは次に、問題文をサクッと読んでみてください。
そのため試験時間を節約するためにも、始めに問題文を読む際には、
問題文をあまり深く読まずにサクッと読む程度に留めておきましょう。
プログラムが複雑になりやすいC言語の場合、必須とも言えるやり方であるため、必ずメモを取るクセをつけましょう。
③ プログラムをしっかり読む
C言語の本番は、この「プログラムをしっかり読む」という工程から始まります。
「プログラムをしっかり読む」という工程において重要なのは、プログラムにデータを当てはめるといった、
プログラムをトレースするという感覚です。
問題の出来を左右する重要な過程でもあるため、プログラムをできる限り詳細に読むようにしてください。
- プログラムを詳細に読むコツ
- 変数や配列に、どのようなデータが使われているか書き出す
- 問題で使われているデータをプログラムに当てはめて考える
- ループ処理時にはループ回数を書き出しておくと、プログラムが読み取りやすい
④ 空欄を埋める前に問題文を再度チェックする
そして最後に空欄を埋める前に、問題文に書かれている内容とプログラムをチェックして、解答の最終確認をします。
この「空欄を埋める前に問題文を再度チェックする」という工程は、
2つ目に解説した「問題文をサクッと読む」のフォローになります。
また問題文の見落としによる処理を勘違いを防ぐため、内容のすり合わせをする意味を持つ重要な工程となっています。
ちなみに問題文を再度チェックする際には、問題文を一からチェックするのではなく、
解答に必要な部分のみをチェックして時間の短縮を図ってください。
またプログラムの処理に関わる個所にメモをしておくと、効率的に内容が確認できるようになります。
・問題を解く際の注意点
C言語の問題を解く際には、プログラムをしっかり読み、
トレースをするというポイントを第一に考えて問題を解いてください。
なぜこんなポイントを挙げるかというと、問題を読むのを途中で諦めて、選択肢からの逆算で解答を埋める人がいるからです。
もちろん選択肢から逆算して解答をするという方法が悪いとは言いませんが、あくまでも選択肢を絞り込む際の最終手段。
初めから選択肢から解答を絞り込むというやり方は、不確実性が高く点数を落とす原因になるため多用しないように気をつけてください。

C言語の問題は難しいから、やっぱり基本を押さえた解答方法が一番かも知れないね

あとは繰り返しプログラムを読むしかないな

プログラムを読んだという経験が多ければ、それだけ要点を押さえるスピードも上がるからね
・C言語の問題を解くためのコツ
・問題はデータの処理順に解く

C言語の問題を解く際には、基本的にプログラムを上から解くのではなく、データの処理順で解くことをおススメします。
なぜデータの処理順で問題を解くようにするのか?
データの処理順で空欄を埋めるようにしないと、プログラムの内容が理解できないパターンがあるからです。
ただ問題が分からない場合は、
1つの問題に固執するのではなく、次の問題を解くようにしてください。
C言語の場合、問題が難しいため1つの問題に固執すると、時間が足りなくなるといった事態が発生するため時間配分に注意しましょう。

C言語の問題を解く際には、常に試験時間を確認しながら、問題を進めた方が良いかもな

C言語のプログラムを読んでいると、
「いつの間にか60分も時間が経ってる・・・」なんて可能性も有るからね。

ある程度プログラムに慣れたら、時間制限を決めて問題を解くようにしよう
・注意するべきポイントは変数と配列

C言語の問題を解くにあたって、注意するべきポイントは、変数と配列。
何故ならば変数と配列という内容は、
C言語のプログラムにおいて最も問題になりやすいからです。
また変数と配列を理解するという行為は、
プログラムの処理の理解度をスピードアップさせる効果があります。
ちなみに変数と配列をマークする際には、変数や配列に対してどのような内容が入っているか片っ端からメモしてください。

変数に関しては入っている内容、配列に関しては入っている内容と添え字について理解するのが大事だよ

プログラムを読み始めた時は、内容を理解するのは難しいかも知れないが、そこは根気との勝負。

一つ一つ地道に内容を書き出して、処理が理解できるように努力しようね
・入出力のファイルを間違えないように

基本情報技術者試験のC言語のプログラムでは、入力、出力のファイルを用いて、データを処理する場合があります。
その入出力のファイルをプログラムで用いる場合は、
入出力のファイルを間違えないように気をつけましょう。
例えば、以下の平成30年春期の問題で使われた入出力ファイル。

出典:平成30年春期 午後試験 問9より抜粋
上記の問題は、入力ファイルと集計(出力)ファイルを用いてプログラムを処理していますが、2つのファイルのレコードが勘違いしやすいような内容になっています。
特にデータを出力する際に、空白の付け方といったポイントで、解答を間違えやすいため注意が必要です。
そのため入力ファイルと出力ファイルを使うプログラムになっていたら、
ファイルを処理する個所でファイルの内容を確認してみるといった慎重さが必要になるでしょう。

プログラムの入出力ファイルを勘違いするってw そんな状況有り得るのか?w

いや150分っていう制限時間なら、入出力ファイルを勘違いするなんてことも十分に考えられるよ

受験番号や生年月日を間違える受験生も、よくある話だからな。笑ってはいられないか・・・

しかも挑む問題は、基本情報の中でも難しいとされるC言語。だから注意すべきポイントは、いくらでもあると思っておいた方が良いね
・穴埋めは他の解答に影響が出やすい

基本情報技術者試験で出題されるC言語の問題は、
プログラムの穴埋めを慎重に解答する必要があります。
その理由はプログラムの穴埋めによって他の問題に影響が出てくるからです。
基本的に試験で出題されるC言語の問題は、
前半がプログラムの穴埋め、後半がプログラムの変更に伴う穴埋めやプログラムの結果を求める問題となっています。
そのため後半に答える問題は、
前半で貴方が答えたプログラムのコードを元に問題が進むため、穴埋めが間違っていると、後半の問題が総崩れになる可能性も有ります。
だからこそ試験の前半で出題されるプログラムの穴埋めは、慎重に答えて、後半の問題で躓かないように気をつけましょう。

C言語の問題において、最も慎重に答えるべきは、このプログラム穴埋めだな

まさに試験の点数を左右する問題になるからね。だから「こんなもんで良いや」なんて感覚で答えると痛い目を見るよ

問題が難しくて時間が掛かるのに、慎重さというポイントも重視しなければならない。やっぱりC言語ってハードルが高いと言えるな
・プログラムのコメントに注目

C言語の問題を解く上で、プログラムに書かれているコメントは、答えを出すための重要なポイントが隠れている場合があります。
例えば、平成27年の秋期試験で出題された以下の問題。


出典:平成27年秋期 午後試験 問9より抜粋
空白「a」の後に続くコメント(ファイルの終わりに~)とプログラムを見比べると、EOFを返す処理が抜けているという点が分かると思います。
上記のようなダイレクトに答えが書いてあるパターンは稀ですが、プログラムに書かれているコメントには、
- プログラムにおいて重要な処理に使われる変数や配列の簡単な説明
- 構造体となっており、分かりにくい変数の説明
といった問題を解く上でのヒントが含まれています。
だからこそコメントが書いてあれば、プログラムに対して何か重要な役割があると思って、コメント周辺をマークしておきましょう。

C言語の問題において書かれているコメントには、プログラムの処理において重要なポイントが書かれているパターンがあるんだな

でもコメントを重視しすぎるのも良くないよ。例えばさっき挙げた平成27年秋期の問題では、EOFの内容が分かっていないと、
「logEOF = 0」といった回答を選んでしまう可能性もあるからね

結局のところC言語で必要になる知識を勉強してないと、コメントを当てにしても、問題は解けないだろうからな
まとめ
今回は基本情報技術者試験の中でも難しいとされる、C言語の問題を解く上でのコツや問題の解き方を解説しました。
問題の種類は主に2つ
- プログラムの穴埋め
- 実行結果を求める問題
C言語の問題傾向
- 文字列は出題率が高いため要注意
- C言語にはアルゴリズムの要素が入る
問題の解き方について
- 問題がどれくらいで解けそうか、全体像をチェックする
- 問題文をサクッと読む
- プログラムをしっかり読む
- 空欄を埋める前に問題文を再度チェックする
(選択肢から絞り込む方法は最終手段)
C言語の問題を解くためのコツ
- 問題はデータの処理順に解く(分からなければ問題を飛ばす)
- 注意深く読むべきポイントは、変数と配列
- 入出力のファイルを間違えないように注意する
- 穴埋めは他の解答に影響が出やすいため注意
- プログラムのコメントには処理においての重要ポイントが記されている
基本情報技術者試験におけるC言語というプログラミング言語は、正直言って、初心者向きと言われるアセンブラや表計算より、2回りぐらい難易度が違います。
そのため今回のようなコツも重要ですが、事前準備となる勉強も、今回挙げたポイント以上に重要な要素と言えるでしょう。
だからこそ今回解説したコツと一緒に、以前解説したC言語の勉強法も合わせて、C言語の勉強に活用してください。

あとは受験生である貴方が、どれだけ努力できるかに掛かっています!
コメント