広島工業大学紀要教育編
第 23 巻（2024）17-22

論文

じゃんけんゲームの段階的改良に基づく
C 言語プログラミング演習教材とその教育効果
松岡雷士＊・佐々木克実＊＊（令和 5 年11月24日受付）

Teaching material for C language programming practice based on
stepwise improvement of the Janken game and its educational effect
Leo MATSUOKA and Katsumi SASAKI（Received November 24, 2023）

Abstract
C 言語の基礎的な諸概念の使い方を学ぶために開発した演習教材、および、それを用いた授業実践について報告する。本教材は単純なじゃんけんゲームを題材とし、各回で学んだ内容を使って、ゲームのプログラムを段階的に改良していく構成となっている。その過程において、受講者は配列、関数、ポインタ、構造体などの概念とそれらの使い方を体験的に学習できる。受講者アンケートの結果に基づけば、各項目に対する理解度と教材の有効性について、全体として高い評価が得られている。特に、一般的に難解な「ポインタの基本的な使い方」について、半数以上の受講者に理解の実感を与えることに成功している。プログラミングに興味が持てた学生や得意科目と自覚する学生を増やすことにも成功しており、本教材を用いた授業の高い教育効果が示される結果を得ることができた。

Key Words: Computer programming education, Pointer, Pass by pointer, Effective exercise

受講者の多くが授業を通してプログラミングを理解でき

1 ．はじめにない、もしくは、面白さが全く分からないというケースはプログラミングは創造力と論理的思考を結びつける訓練

残念ながら多くの大学で散見される。失敗の原因はいくつとして、あらゆる科目の基礎となるべき科目であり、まかあるが、まず多いのはプログラミング教育を「言語文法た、直接的・間接的な幅広い応用範囲を持つ科目でもあの教育」と同義にとらえてしまっているケースである。プる。小学校でもプログラミングに関する授業が開始され、ログラミングを思い通りに組立てるスキルは文法の知識と小学生が Scratch（Scratch Foundation）などを通してプ同じものではない。例えば、授業で配列などの文法概念をログラミングに触れる機会も着実に増えている。しかしな教えた後、それを確かめるための小さなプログラムを学生がら、著者が見る限り、少なくとも地方私立大学においてに逐一作成させて確認を促す授業スタイルは多くの大学では初年次でプログラムをゼロから書ける大学生は皆無に等実施されているようである。しかしながら、学生にとってしく、特に変数のスコープやポインタなどの抽象的な概念はそのような小さなプログラムは抽象的で意味がわからに理解が及ぶ学生は非常に少ない。大学におけるプログラず、また役に立つものではない。結果として小さなプログ

ミング教育にはまだまだ工夫が必要であるように思える。

ラムで文法概念を確かめさせても、学生にはプログラミン
＊＊＊

広島工業大学工学部電気システム工学科
有限会社工房知の匠（広島工業大学非常勤講師）― 17 ―

松岡雷士・佐々木克実

本論文では、著者らが C 言語の授業のために開発した、グの利用価値が全く伝わらないのである。
著者は以前から、学生に言語文法の範囲にないプログラ

じゃんけんゲームを題材とした演習教材とその教育効果にミング力の向上を実感させるため、ゲームの作成を授業について紹介する。この教材は誰もがルールをよく知るじゃ［1］

取り入れてきた 。これまでにも Fortran や Python を用

んけんを題材とし、一つのプログラムを授業内容に従っていたプログラミングの授業において、最低限の文法知識で段階的に改良していく構成となっている。じゃんけんが題

学生のプログラミング力を一旦完成させることを目標にす材であることにより、受講者は抽象的な概念を身近な具体る授業を構成してきた。このために、for や if 以外の文法例に当てはめて考えることが可能となる。また、受講者には極力使わない段階で「確率を使ったゲーム」を作成する

とっては毎回の題材が同じであることにより、具体例のイ演習を行い、文法に過剰にとらわれない論理的思考力の育メージがしやすい。教科書における概念の登場に合わせて成を試みてきた。この試みは概ね好評であり、自由にゲープログラムにその概念を一つずつ導入していくため、対象ムを改良する課題等においても、手の込んだコードを提出となる概念の便利さを実感しやすい教材となっている。こしてくる学生を年々増やしていくことに成功していた。の論文では、まず演習教材の概要を示し、本学における授しかしながら、C 言語などの言語を深く学んでいくためには単純な制御構造から一歩踏み込んだ文法の諸概念とそ業実践とアンケート結果に基づいた教材に関する考察を示していく。の使い方の理解が必要であり、特にポインタや変数のス

2 ．教材の概要

コープなどの概念を教科書の記述に合わせて明確に理解していくことが重要となる。このためには、ゲーム型教材に開発した演習教材の内容について述べる。本教材の出題も一歩踏み込んだ文法を取り入れる必要が生じる。ゲーム

スライド一式と解答の一部を著者の GitHub リポジトリに型教材の利点は、抽象概念を現実のイメージに結び付けな公開する［2］。本教材は著者らが独自に作成したものであるがら考えることが容易であることであるが、一歩進んだ文が、現在も授業課題として利用中であるため、リポジトリ

法概念を理解する段階においても、イメージと抽象的概念での解答の公開は一部に留める。希望があれば、教育関係を乖離させない具体例としてゲームは有効であると考え者にはメールで全解答を送付する。

る。

例として第一回課題の出題スライドを図 1 に示す。本課

図 １ ．第一回課題の出題スライド― 18 ―

じゃんけんゲームの段階的改良に基づく C 言語プログラミング演習教材とその教育効果
表 １ ．各回の実施事項の概要

題の解答例はリポジトリの Janken1_3.c である。第一回はる。変数を使用することが出来ていれば、コードを少し書「グーしか出せないジャンケンマシーン」と題したテキスき換えるだけでチョキやパーしか出せないじゃんけんマトベースのゲームプログラムを作成する。簡単なコードをシーンもすぐに作成できる。しかしながら、単に if 文で作成する課題ではあるが、学生は例題やプロトタイプのなプレーヤーの手に対する勝敗を分岐するだけの、取り回しいスクラッチからのコーディングを体験することになる。の効かないコードを提出してくる学生も多い。（すなわ

ここが本課題の一つ目のポイントである。例を写すのではち、こちらがグーなら引き分け、チョキなら負け、パーななく、口語で書かれた出題文をプログラムに翻訳するといら勝ちと出力するだけのプログラムのこと。）このようなう、プログラマーにとっては当たり前の作業でありなが学生には、この時点で一度解答を配布し、方向性の間違いら、文法に傾倒した大学のプログラミング教育では省略さに気づかせることが重要となる。

れがちな手順をしっかりと踏ませる。学生は問題文をまず表 1 に各回の課題の実施概要を示す。第二回以降、繰りよく読み、授業で学習した概念と照らし合わせながら、プ返し、配列、関数（戻り値と引数）の利用に進んでいく。

ログラミングするべきことを自ら考えることになる。学生

学生にとって最も踏ん張りどころとなるのは、ポインタには問題文をよく読むこと、例のあるコードを書き写すこ（および、ポインタ渡し）の概念を学ぶパートである。ことがプログラミングではないことを繰り返し呼びかける。

こでは一旦グローバル変数を使って関数間でのデータの受第一回は if 文までを範囲とするが、この時点でじゃん

け渡しを行うステップを経由し、その上でポインタを使っけんの手を変数にうまく格納できているかどうかは学生にたコード、構造体を使ったコード、構造体のポインタをよって出来が異なる。じゃんけんの手を変数に格納し、さ使ったコードへとプログラムを改良していく。C 言語のポらに勝敗判定を部分として独立に実装できていれば、プロインタの概念は決して簡単なものではないが［3］、ここではグラミングの基本的なセンスが身につき始めていると考え「変数のポインタ渡し」の使い方を理解することのみに重― 19 ―

松岡雷士・佐々木克実

ラミング演習」は 2 年前期に位置付けられていることもあ点を置いている。
教材には途中でわざと「結果が間違いとなる課題」を出り、受講者が自身のプログラミングへの向き不向きを、研している箇所もある。そのような箇所は表 1 において赤字

究や就職に向けて自覚していくための重要なポイントにで示されている。例えば、独立した関数の中で繰り返し呼なっていると考える。

ばれる変数を静的変数にし忘れるケース、もしくは、ポイ「プログラミング演習」の各回は説明と演習で構成されンタをつかわずに変数を値渡ししてしまい、関数の中で想ており、前半は C 言語の各概念について教科書とスライ

定通りに変数の値が書き換わらないケースなどが含まれてドを用いて説明する授業、後半はノート PC を用いた演習いる。受講者はこのような間違いの例なども作成しながを 行 っ て い る。 コ ー デ ィ ン グ 環 境 と し て は Microsoft

ら、新しい概念の重要性や使い方を体験的に理解する。

Visual Studio を用いる。演習時間においては TA・SA とこの教材の二つ目のポイントは、最初から自分で書き始

教員が教室を巡回しつつ、受講者同士の話し合いも推奨しめたコードを何度も実行・デバッグしながら改良して使用た状態で実施している。講義を進めつつ時間を小分けにししていくことにある。従来のように例文を写す形式の演習て演習を実施する形式も考えられるが、受講者のレベルにでは、プログラミングは、正しく写せるかどうかの課題によってペースが異なることもあり、評判はあまり良くななりがちである。この教材では小さくとも自分で最初からい。演習時間をある程度まとめて確保する方が良いことを作成したコードを用いるため、受講者は一貫してコードの示唆する意見はアンケート結果にも見られた。

実行イメージがつかみやすい状態にある。課題を段階的な演習中に特に重要なことは、受講者のプログラミングに改良型にすることにより、受講者は常に動く状態のコード対する意識について何度も繰り返し呼びかけることであっをキープし、動作チェックを行いながら改良を行うというた。多くの受講者はプログラミングとは手本となるコード作業スタイルをとることになる。実はこの小さなトライ＆を写すものだと考えている。このため、コードを写し間違エラーの繰り返しのスタイルこそがプログラミングにおいえて実行が出来ないなどの事態になると、すぐに挙手してて最も理想的であり、本教材を使用すればそのスタイルを「動きません」と質問をする。実際に対応してみると、エ体験的に身に着けることが可能となっている。

ラーの原因はエラーメッセージに全て書かれている。英語

この教材の三つ目のポイントは、この課題を通して同様の専門用語が読めないという理由はあるだろうが、このよのコードが見やすく保守しやすいコードに変わっていく過うな意識では、何度質問に対応していても上達にはつなが程が体験できる点にある。プログラミングは原理的にはらない。写し間違いは誰にでも起こることなので、むしfor と if さえ使えれば、どのようなコードでも書くことがろ、エラーが出た際にエラーメッセージを読みながら自分出来る。これはこれで大切なことであり、受講者には早めのコードと向き合うことが大切であることを何度も伝えに理解してもらいたい事項でもある。一方で、一歩踏み込る。例えるなら、エラーメッセージときちんと会話するこんだ文法概念は他人が見て理解しやすいコードを作成するとを何度も何度も呼びかけた。翻訳サイト等を利用して英ために導入されている場合が多い。本教材では、構造体の語のエラーメッセージを理解することは当然必要となる。

ポインタを用いて変数の受け渡しをシンプルにしていく過

printf 文を使った制御位置の把握や変数の中身を把握す

程を通じ、保守しやすいコード記述の重要性を体験させる

るデバッグについては、本来であれば授業に取り込んでことが可能となっている。

しっかりと教え込みたい内容である。しかしながら、デバッグを伴うコーディングの経験が浅いうちからそれにつ3 ．授業実践

いて教えても実感がわかないと現状では判断しており、本教材は広島工業大学工学部電気システム工学科 2 年次
1Q 科目の「プログラミング演習」において利用した。
「プprintf 文を使ったデバッグなどは個別対応の中で教えていった。

ログラミング演習」は C 言語の基礎的内容の授業であり、4 ．アンケート結果と考察クォーター制で週 2 回実施される。ポインタ・構造体を一通り網羅するレベルの書籍を教科書として指定してい［4］

令和 3 年度・令和 4 年度の「プログラミング演習」終了

る 。関連科目としては、事前科目として C 言語プログ時に実施した匿名の受講者アンケートの結果を用いて、本ラミングの初歩的内容を学ぶ「プログラミング」が 1 年次教材の有効性を示す。図 2 は C 言語に関して学習した諸の 1Q に開講されている。並行して 1 、 2 年次の 4Q にプ概念の使い方を理解できたかについてのアンケート結果でログラム実践基礎、プログラム実践応用を開講しており、ある。ここでは各項目について「大いに当てはまる」「そこちらでは Arduino を搭載したロボット（Zumo）の制御こそこ当てはまる」と回答した受講者を「理解を実感したを通して実践的なプログラミングを扱っている。「プログ受講者」として定義することとする。まず序盤の if や for― 20 ―

じゃんけんゲームの段階的改良に基づく C 言語プログラミング演習教材とその教育効果

図 ２ ．
「使い方を理解できたか」（令和 3 ， 4 年度の受講者への終了時アンケートの結果）については 9 割近い学生が理解を実感している。回を進め

図 ３ ．
「使い方を理解するためにジャンケンゲームの作成が役に立ったか」（令和 3 ， 4 年度の受講者への終了時アンケートの結果）

るにつれて理解度は下がり、ポインタのパートで理解を実感した受講者の割合は50％と底を打つ。ここで「50％しか理解出来ていない」という結果は、通常の授業であれば教育効果としては疑問の余地があるかも知れない。しかしながら、C 言語のポインタの概念に関して言えば、地方私立大学における50％という数値は全くもって低くはない。ある国立大学において 1 学期の C 言語の授業が終了した状

図 ４ ．
「興味が持てたか」（令和 3 ， 4 年度の受講者への終了時アンケートの結果）

態から授業を引き継いだ際、「C 言語の授業でポインタを・授業形式でじゃんけんゲームを毎授業で学ぶ知識を使っ理解できたか」という問いかけについて挙手でアンケートて作成していくので、プログラムの知識をこつこつと学をとったところ、約80人中 2 人程度しか挙手をしなかった

べていくことができ、良かったです。今後も何かのゲー経験なども著者にはある。それだけポインタに関して理解ムを段階を踏んで作成する授業形式がいいと思いましの実感を与えられる授業は難しいと考える。構造体や乱数た。

に関する単元はポインタよりは理解度が高くなっており、・友達と相談して行うことができるため、質問をする前に考えることが出来る点がとても良かったと感じました。

これは現場の感覚とも一致している。
図 3 はじゃんけんゲームの段階的な改良が各事項の理解

・1 年のプログラミングのときは、作業が多かったが、プに役に立ったかについてのアンケート結果である。こちら

ログラミング演習では自分でゲームを作っていくので、も図 2 とほぼ同じ傾向を示したが、全体的に肯定的な回答やってみたいことがあれば調べて完成させていくのが楽をした受講者の割合が増えている。じゃんけんの作成をしかったです。

ベースにした教材は少なくとも本学科の受講者にとっては
図 4 は授業を通してプログラミングに興味が持てたかにかなりの高評価を得たことがわかる。
本アンケートにおいては自由記述欄にも肯定的な意見がついてのアンケート結果である。
「理解できたかどうかは多かったが、その中でも単なる感想を超えていたものとしともかく、プログラミングに興味が持てたと思う」というては以下のものがあった。

質問について 8 割を超える学生から肯定的な意見を得られた。並行して 4Q に実施しているロボットプログラミング― 21 ―

松岡雷士・佐々木克実との相乗効果でもあると考えられるが、これは近年の電気ところで、本論文の草稿の作成を終えた直後の時期を起システム工学科においてはなかった傾向である。さらに、点とし、ChatGPT（OpenAI）に関する議論が急激な高ま

令和 3 年度にこの授業を履修した学生のうち、 3 年次の履りを見せ、大学におけるプログラミング教育においても無歴書作成演習において「プログラミングが得意である・好視することの出来ない要素となってしまった。ChatGPTきである」と記述した学生は71人中10人にも及んだ。比較の利用を肯定的に捉えた上で本教材が果たすべき役割を論

対象を定量化することは出来ないものの、プログラミングずるには、まだ時間・データ・試行が不足している。しかに対してこれまでとは明らかに異なった意識を学生に与えしながら、時代に合わせた教育手法の急速なアップデートることに成功した。

が必要とされる段階に入ったことについては疑いの余地はないと考えている。

5 ．まとめ謝辞

本学科で使用したオリジナルのじゃんけんゲーム教材について紹介し、実践とアンケート結果に基づいて確認した

広島工業大学において関連科目の担当として本授業のサ教育効果について述べた。地方私立大学で実施されるプロポートをしてくださいました電気システム工学科の先生

グラミング授業としては比較的高い理解度を得ることに成方、TA を務めてくださいました学生の皆さま、ならび功し、プログラミングを得意と自覚する学生を一定数増やに、アンケートに協力してくださいました受講生の皆様にすことが出来たことも確認した。

心より御礼申し上げます。

プログラミングは研究においても企業においても基礎的参考文献なスキルとなるため、プログラミング力の向上は理系能力全体のベースアップにつながることが期待できる。一方で［1］松岡雷士「プログラミング教育における確率ゲームの数学や物理とは異なり、現在のところ教育的な配慮や工夫

活 用 と そ の 教 育 効 果 」 応 用 物 理 教 育 , 44（ 2 ）, pp.

がされにくい授業科目でもある。このような教育研究を通65-70（2020）.

した情報共有は小さなことではあるが、今後も行っていく［2］著者の GitHub リポジトリ :べきであると考える。教員のプログラミング能力を測る指h ttps://github.com/leo-matsuoka/article_source_

標というものが存在しておらず、さらには、プログラミン

codes/tree/master/2022_C_Edu_Janken

グが得意な教員が良いプログラミング教育を実施する能力［3］前 橋 和弥「C 言語 ポインタ完全制覇」技術評論社が高いとも言い切れない。それぞれの大学のレベル差もあるとは思うが、学生目線のプログラミング授業は今後も積（2017）.
［4］高 橋 麻奈「やさしい C 第 5 版」SB クリエイティブ極的に開拓していくべきである。

（2017）.

― 22 ―