基本情報技術者試験のプログラミング対策!選ぶべき言語と対策法!

2020年1月24日

基本情報技術者試験はその業界の方でなくても知っている方が多く、人気かつ有名な国家資格になります。

人気なことからも

ラク
ラク
これを取って未経験でも転職決めてやるぜ!

と意気込んで受験をするも、大抵の方は

ラク
ラク
プログラミングわかんねえええええ

と玉砕してしまうことが多いのが実情です。

プログラミングは20点を締めており、しかも必修なのでここではそれぞれの言語の特徴と、どれを選ぶのが良いのか、さらに効率の良い学習方法についても併せて解説していこうと思います。

基本情報のプログラミング言語一覧

プログラミング

C言語

C言語はプログラミングの中でも特に知名度の高い言語のひとつで、人間にとっては記述内容が容易でいわゆる高級言語のひとつとされています。

50年近くもの歴史があり、古いプログラミング言語ではあるものの今でも人気な言語として上位を占めており、現在用いられているソフトでもこのC言語をベースに作られているものが多いです。

C言語の概要

C言語の大きな特徴としてはCPUやメモリと言ったハードウェアについて意識する必要があり、基本情報ではハードウェアやメモリも当然学習するので絡めたような問題も出てきます

カズ
カズ
つまり、その分野が得意ならC言語が良いのかな?

確かに、ハードウェアやCPUが得意!と言う方はC言語も向いているかもしれません。

しかしC言語は高級言語の中では機械に近い言語であり、構文自体も読みやすいとは言えません。その為、初心者が0から勉強したい!と言う場合はあまり向いている言語ではありませんね。

キュー
キュー
ちなみにC言語の強みは早さやで!試験上で実装することは中々無いから確認のしようはないけど・・・

基本情報技術者試験のC言語対策に関しては以下をご覧ください。

C言語のサンプルコード

/********************/
/*  数字当てゲーム  */
/********************/
#include <stdio.h>
#include <time.h>
#include <windows.h>

void  main( )
{
    int   n1;                                  // コンピュータが選んだ数字
    int   n2;                                  // 入力数字
    int   i;
    char  c[128];

    system("cls");                             // 画面消去

    srand(time(NULL));                         // 乱数の準備
    n1=rand( );                                // 乱数発生
    n1%=100;                                   // 100で割った余り

    printf("****************************************\n");
    printf("* 今コンピュータが数字を1つ選びました *\n");
    printf("* 選んだ数字を当ててください           *\n");
    printf("* 数字の範囲は 0 から 99 までです      *\n");
    printf("****************************************\n");

    for( i=1; i<=10; i++ )
      {
        printf("\n数字: ");                    // 数字表示
        fflush(stdout);
        gets(c); n2=atoi(c);                   // Aの値を入力
        if ( n1==n2 ) break;                   // 同じ数字
        if ( n1< n2 )
             printf("  大きすぎます");
        else
             printf("  小さすぎます");
      }

    if ( i<=10 ) printf("\n\n%d回目で当たり\n",i);
         else    printf("\n\n\aアウト!!  正解は %d でした\n",n1);
}

引用元:https://saeki-ce.xsrv.jp/C_src/suujiate01.html

Java

JavaはC言語以上に人気があり幅広い分野で用いられている言語になります。

アプリ開発を始め、大規模なシステム開発にも用いられており、さらにどんなコンピュータ上でも用いることが出来るので汎用性が高いとされています。

Javaの特徴

Javaの最も大きな特徴は、モノ同士の関係性を見出し、そこから組み立てていくと言ったオブジェクト指向の考え方がベースになってきます。

ラク
ラク
オブジェクト指向?

例えば、車を作ろうと考えた時、いきなり車を作ろうとしても漠然としすぎていて手が動きませんが、最初に車体とタイヤ、ドアを作成しておき、それを組み合わせて一台の車を作ろうと考えると効率的な開発が実現できます。

これをオブジェクト指向と呼びます。

Javaの詳しい対策記事は以下にまとめています。

Javaのサンプルコード

/* 金種の枚数を計算する */

package samples.number;

public class KinshuSample {
  public static final int[] YEN_TYPES = {
    10000,5000,1000,500,100,50,10,5,1
  };
  public static int[] getYenCount(int yen, int[] yentype) {
    int[] count = new int[yentype.length];
    for (int i = 0; i < yentype.length; i++) { while (yen >= yentype[i]) {
        yen -= yentype[i];
        count[i]++;
      }
    }
    return count;
  }
  public static void main(String[] args) {
    int yen = 87654;
    int[] count = getYenCount(yen, YEN_TYPES);
    for (int i = 0; i < YEN_TYPES.length; i++) {
      System.out.println(YEN_TYPES[i] + "円\t" + count[i] + "枚");
    }
  }
}

引用元:http://www7a.biglobe.ne.jp/~java-master/samples/number/KinshuSample.html

Python

令和2年度から、COBOLに変わって新しくPythonが出題範囲に追加されました。

多くのプログラミングスクールでも取り扱うことが増え、最近注目されているのがこのPythonになります。

Pythonの特徴

Pythonは比較的新しい言語になっており、少ないコード量で簡単にプログラミングが書ける、コードが読みやすいと言った特徴があります。

近年話題のAIにおいてもそうですが、Web開発や教育分野と言った実に幅広い分野で用いられており、この言語さえあれば何でも作れてしまうのではないかとさえ言われています

初心者向けで学習しやすいと言った特徴もあり、C言語で挫折した経験がある筆者でもPythonではすんなりと動かすことが出来た経験があります。

カズ
カズ
でも具体的にPythonで動いているアプリって何があるの?
キュー
キュー
Youtubeとかそうやな

身の回りのアプリでも、実はPythonで動いていた、なんてことは多いかもしれませんね!

Python関係の記事はこちら!

Pythonのサンプルコード

# kmp.py(文字列検索)
import time
 
def create_table(pattern):
    table = [0 for _ in range(len(pattern))]
    j = 0
    for i in range(1, len(pattern)):
        if pattern[i] == pattern[j]:
            j += 1
            table[i] = j
        else:
            table[i] = j
            j = 0
    return table
 
def kmp_search(string, pattern):
    table = create_table(pattern)
    i = j = 0
    while i < len(string) and j < len(pattern):
        if string[i] == pattern[j]:
            i += 1
            j += 1
        elif j == 0:
            i += 1
        else:
            j = table[j]
 
    if j == len(pattern):
        return i - j
    else:
        return None
 
with open("sample_string.txt", "r") as f:
    string = f.read()
pattern = "hoge"
 
start = time.time()
 
index = kmp_search(string, pattern)
if index:
    print("The pattern starts with at index {}.".format(index))
else:
    print("No pattern matched.")
print("elapsed {} sec.".format(time.time() - start))

引用元:https://engineeringnote.hateblo.jp/entry/python/algorithm-and-data-structures/kmp_algorithm

アセンブラ

アセンブラはC言語よりさらに機械語に近いプログラミング言語とされており、CPUに対して直接命令する形式になります。

アセンブラの特徴

アセンブラの特徴としてはCPUに対して1対1のコードで命令する言語であり、どのような動作をさせ、メモリーの把握だったり、その他の周辺機器がその都度どのような状態になるかも全て把握していく必要があります。

より細かく正確に理解し定義する必要があるため比較的習熟には難しい言語とされています。その一方でより根底的に理解できるので、それ以降別のプログラミングを学習しようとした際にスムーズな理解がしやすくなると言った特徴もあります。

カズ
カズ
抽象的な概念が多くて勉強には結構時間がかかりそう・・・

アセンブラのサンプルコード


	**
	** 64ビットの減算を行う
	**

	** 64ビット長のデータ MR0 と MR1 の減算を行い,
	** 結果を MR1 に格納する.MR0 の内容は保存される
	** 実際には,32ビットの引き算を繰り返すことで,64ビットの差を得る
	
** プログラム 
.section .text
.even
	
.equ	X_CLR,		0x0004	        /* Z フラグの場所の16進数表現 */
.equ	B64_CNT,	8			/* 64ビットは8バイト */
.equ	ADD_CNT,	2-1			/* ループ回数は1回 */
			
	moveq.l		#ADD_CNT, %d0	/* ループ回数の設定 */
	lea		MR0+B64_CNT, %a0
	lea		MR1+B64_CNT, %a1

	move.w	#X_CLR, %ccr		/* Xフラグをクリア,Zフラグをセット */
ADD_LOOP:	 
	subx.l	-(%a0), -(%a1)
	dbra	%d0, ADD_LOOP

** 実行の終わり
	.dc.w 0x4848       /* BSVC の break 相当 */
	stop	#0        

**  データ領域
.section .bss
.even

MR0:	.ds.l	2		/* 64ビットは2ロングワード */
MR1:	.ds.l	2		/* 64ビットは2ロングワード */

	.end

引用元:https://www.kkaneko.jp/cc/as/sample/samples.html

表計算

表計算ソフトと言うと某microsoft社のexcelを思い浮かべる方が多いと思います。

基本情報で問われる表計算もほぼそれと変わらないので一通りエクセルに触ったことがある方なら理解はスムーズかなと思います。

表計算の特徴

基本情報技術者試験で問われる表計算に関しては、演算子の理解や相対参照、絶対参照と言った言葉が出てくるためこれらをしっかりと押さえて置かないとスムーズに問題は解けません。

しかし、問われること自体はある程度決まっておりそれらをしっかり押さえて置けば対策がしやすく暗記も通用してしまうのがこの科目になります。

筆者の周りでも特にプログラミングが苦手な方は表計算で対策して突破している方が多くいらっしゃいました。

キュー
キュー
と言っても決して簡単なわけではないから対策せんと受からんで!

表計算対策に関する記事は以下をご覧ください。

スポンサーリンク

何を選ぶのがオススメ?

疑問

一通り基本情報技術者試験で問われるプログラミングに関して紹介させていただきましたが、中でもどれがオススメなの?と思う方も多いと思います。

そこで次に、筆者が基本情報技術者試験の午後でオススメできるプログラミング言語を紹介させていただきます。

合格を狙うだけなら表計算

まず、プログラミング言語に対して苦手意識が強い方はオススメ出来る言語として表計算を挙げます。

具体的な理由としては3点あります。

問われる内容がある程度決まっている

1点目は問われる内容がある程度決まっている点にあります。

表計算で聞かれるポイントとしては基本中の基本である演算子をはじめとし、関数、参照、マクロ等になります。

過去問数年分を解いてみると「あ、今回もこのパターンか」となるくらいに傾向も似ているので対策が立てやすいですね!

ラク
ラク
他の言語でいきなりゲーム的な要素を解説されると、そのルールを理解するだけでも時間がかかってしまうからな・・・

仕事で慣れている場合が多い

表計算はエクセルとほぼ同じ動作をするため、仕事でエクセルを触った経験がある方だとスムーズに対応できます

特に会社でバリバリマクロを組んでいる、統計やグラフを取るのが得意!と言う方は触ってみると、基本情報の方が圧倒的にシンプルで分かりやすく優しい問題という事が分かります。

学習環境が構築しやすい

もし上記で仕事上であまりエクセルを使ったことがない・・・と感じた方もご安心ください。

表計算はほぼ同じ動きをexcel上で実行できるので、エクセルさえあれば今からでも練習はいくらでもできます

他のC言語だったりPythonだったりはコンパイラをインストールし、ライブラリも用意して・・・と初心者にとっては壁が高く学習環境を構築できずに挫折してしまう方も後を絶ちません。

一方でエクセルは万が一なくても直ぐに購入してインストールもできるので簡単に利用できます。

キュー
キュー
今エクセルを持っていないって人も、今後使う可能性もあるから用意しておくのがええで
created by Rinker
マイクロソフト
¥14,923 (2020/09/23 01:19:31時点 Amazon調べ-詳細)

就職に結び付けたいならPython

基本情報技術者を取得した後に就職でアピールしたい!得た技術を仕事に活かしたい!と言う方は少し敷居は高くなる可能性がありますが、Pythonをオススメします。

初心者向けで習得が容易

Pythonは複数あるプログラミング言語の中では非常にシンプルな構文で学習障壁が低く、初心者向けと言われています。

人気言語なだけあり実装環境の構築からライブラリ、使用方法の解説などもネット上に大量に転がっているので無料で情報を仕入れられる点も大きいです。

非常に人気のあるプログラミング言語

先ほど、PythonはWebアプリから大型システム、AIなど多岐に渡って利用されていると書きましたが、実際どれくらいのシェアがあるのでしょうか。

引用元:http://pypl.github.io/PYPL.html

上図はgoogle上での検索結果をもとにプログラミングの人気を決定するPYPL PopularitY of Programming Language」を参照にしたデータですが、最近では1位に輝いていますね。

就職時にも情報系だと基本情報で何の言語を選んだか聞かれることもあり、Pythonと答えられると良い印象を得られることが多いです。

カズ
カズ
AIブームも相まって有利になりそう!

基本情報のプログラミングを対策するために

これらのプログラミング問題はいくら初心者向けの言語を選んでも独学で対策するのは難しいとされています。

特に今から学習環境を構築して・・・と言うのは非常に手間がかかってしまい遠回りになってしまいます。

直ぐに結果を出すためにも、試験に特化した対策と言うものが必要であり、そのための方法についてもまとめます。

基本情報のプログラミング特化のテキストを用いる

例えばC言語やJavaと言ったプログラミング言語を学習できるテキストはたくさん存在していますが、いずれもエンジニア向けで半年~数年かけて学習していくことを前提とした分厚さになっています。

基本情報の為だけにそれだけの時間を費やせる余裕のある受験者はいないと思うので、ここはストレートに基本情報のプログラミングに特化したテキストを選びましょう。

ここでは先ほど紹介した表計算とPythonのテキストを紹介します。

created by Rinker
¥1,958 (2020/09/23 01:19:32時点 Amazon調べ-詳細)

こちらは関数や参照に関して図や実際の表を多用しながら紹介しています。

更に苦手意識を持つ方が多いマクロについても疑似言語の読み方から問題の解き方まで、練習問題を織り交ぜてアウトプットを出来るように考慮されながら編集されています。

created by Rinker
¥2,530 (2020/09/23 00:31:09時点 Amazon調べ-詳細)

Pythonに関しては令和2年度から開始の為過去問はありませんが、基本情報技術者試験の対策テキストとして評判の良いわくわくスタディワールドから出版されたテキストがオススメです。

解説付き予想問題で演習量を重ねていきましょう。

カズ
カズ
これ以外のテキストの場合でもamazonで「基本情報 + programming言語名」で調べれば出てくるよ!

スクールを利用する

もっと無難な方法としてはスクールを利用すると言う方法もありますね。

特に資格の大原の場合、プログラミング言語だけ特化して取り扱っているお得なコースもあります。

大原の場合、もちろんこれ以外にも午前免除や完全初学者向けのオススメのコースもあるので気になる方は是非ご覧ください。

カズ
カズ
模擬試験もあって着実に力を付けられるよ!

また、資格ではなくプログラミングスクールに通うのも一つの手です。

こちらの場合多少時間はかかりますが、根本的な理解が進みます。

結果として仕事でもつかえる実力が付くので大きな武器となることは間違いないでしょう。

今回紹介する侍エンジニア塾は筆者も実際に利用させていただいた経験がありますが、1対1で深い学習ができたので最短で実力を付けたい方にはオススメです!

基本情報技術者試験のプログラミング対策まとめ

今回は基本情報技術者試験のプログラミング問題に関して、それぞれの特徴と選ぶべき言語、さらには対策方法を紹介させていただきました。

どれも全くの0知識からの学習は難しいですが、しっかりとテキストやスクールで知識を補う事で決して対策は不可能ではありません。

言語は全体の20点を占めておりここでとれるかどうかが合格への分かれ道になることは間違いありません。

資格取得後のスキルとしても活きてくる部分なので、早め早めに対応して将来活かせるようにしておきましょう!

カズ
カズ
ここを得点源にできれば合格は目の前!
スポンサーリンク