プログラミング入門I
2021.10.04

Back to index page



  1. 本日の作業内容

  2. 対面指導

    この授業は基本的にWebページを観ながらの自習という形で実施しますが,プログラミング環境の構築が自分でできないと何もできないことになってしまいます.そこで,10月4日の4コマ目と5コマ目に教養2号館401教室にて希望者に対面指導を行います.

    自分で本日のWebページにある作業が完了しなかった人はノートPCを持参してください.対面での作業の確認を実施します.

  3. 授業の概要

    この授業では,C言語によるプログラミングを学習します.プログラミングを通して,論理的な思考とアルゴリズムを経験して行きましょう.

    扱って行く処理としては,コンピュータの中で数値はどのようになっているのか,整数 (Integer) や浮動小数点数 (Floating Point Number) の違い,内部処理で利用される二進数 (Binary number) や便宜上人間が二進数を扱いやすくした16進数 (Hexdecimal Number) などについて学習します.また,文字がどのように処理されるのか,文字列 (String) についても学習します.そして,「制御構造(Control Structure)」とよばれる処理の流れを自由に制御する方法について学習すると,プログラミングの入門としては終わりです.そこまでがこの授業の範囲です.

  4. 授業の進め方

    この授業は演習科目ですので,実際にみなさんが自分でプログラミング作業を行なうということを前提に,一回分の作業内容の紹介と注意点,重要なポイント,教科書の補足説明などを行って,実習と課題提出を行ってもらいます.以下のことを覚えておいてください.

    • 教科書とWebページで予習

      事前にその回の授業で扱う教科書の範囲を指示しておきますので,その範囲を自分で学習してください.実際にパソコンを使用した学習が望ましいです.予習のための実習問題も次の週のWebテキストにリンクを張りますので,それを行ってください.第3回以降は宿題を用意していきます.また,オンラインでTAが自習に対応してくれます.時間はまだ未定ですが,始まれば活用してください.

    • 実習作業

      実習課題を用意しますので,その課題のプログラミングを実習として行います.もちろん,教科書はしっかり読んでおいてください.

    • 質問の勧め

      実習課題は教科書に書いてあることを応用する問題を中心に用意されています.そこで,自分では分からないこともときどき出てくることがあります.TAや私に質問をすることで,理解を深めて行くことができますので,遠慮なくどんどん質問をしてください.

    • 補足事項

      教科書の順番でプログラミング作業を勉強していきますが,教科書ではまだ出てきていない処理も使用します.それは「乱数」の発生の処理です.

      教科書では,パラメータを自分で入力するために scanf() という関数を使用しますが,この授業では scanf() を使用しないために乱数を用います.理由は,大勢の課題を採点する際に, scanf() では採点を自動化できないからです.そのため,毎回値が変わるようにするために乱数を使用します.使用方法は,Web版のこのテキストで詳しく紹介します.

    • プログラミングの考え方

      プログラミングとは面倒な処理をコンピュータにやらせるためにあるものです. 自分が楽をするためにあるので,そのような処理を考えることが重要です.数字を100個表示するプログラムでも,表示させる命令は1つで済ませるのが,プログラミングです.これについては,必要に応じてその都度説明します.ただし,大事な言葉として「アルゴリズム」というものがあります.これはどのように処理を行うかの流れのようなものですが,これを考えることが重要です.以下の例で見てみましょう.

      1. 約数を自動で探す場合

        12という整数の約数を見つけるプログラムを作るとします.以下のような手順をみなさんは考えるでしょう.

        • 1は必ず約数になる.

        • 2で割り切れるので2は約数.

        • 3でも割り切れるので3も約数.

        • 同じく4も約数.

        • 同じく6も約数.

        • 最後に自分自身も約数なので12も約数.

        さて,上記のような手順は九九を覚えている人間だからできる作業です.計算機はそんな気の利いたことはしてくれません.では,どうするのでしょうか.

        • ある変数の値を1としてその変数で12を割って割り切れたらその数は約数

        • 変数の値を1増やして同じ作業を行い,割り切れたら約数とする.

        • 上記の作業を変数の値が12(割られる数)になるまで繰り返す

        どうでしょうか.上記の2番目の作業のように同じことを規則的に繰り返すのは計算機は得意なので,このようにすると簡単に実現できます.では,もうちょっと違うケースとして20の素因数分解ではどうでしょうか?

      2. 素因数分解を自動で行なう場合

        • ある変数の値を2としてその変数で20を割って割り切れたらその数は素因数.

        • 変数で割り切れたら,もとの数を変数で割ったものに変更し,もう一回その変数で割ってみる.

        • 先ほどまでの変数では割り切れなかったら,変数の値を1増やす

        • 変数の値が割られる数と同じになったら処理を止める.

        どうでしょうか.上の2番めと3番目の処理のどちらか一方を行う作業を繰り返すことで,素因数分解が実現できます.このような処理を考えることがプログラミングです.頭の中で漠然と考えるのでは無く,上記のように言葉にすること,これを「言語化」と言いますが,それを行うことが大事です.今後は自分でいろいろ考えてみてください.

  5. C言語学習環境

    今年度は学科の計算機教室を使用しないで各自が自分のPCでプログラミングを行う必要があります.そこで,まず自分のPCにプログラミング環境を自分で構築しないといけません.Windowsを想定して以下に手順をご紹介します.

    1. MinGW-w64の活用

      自宅のWindowsでC言語のプログラミングを行う方法は幾つかありますが,今回は以下のサイトを参考にMinGWを使うことをお薦めします.

      MinGW-w64のダウンロードとインストール

      丁寧にまた詳しく書いてありますので,だいたいこの通りに作業するとインストールできます.注意が必要なのは,エディタのVS Codeの最初の作業です.種々の設定を行った後でエディタを再起動してから利用してください.PATHがそのままでは通っていない可能性がありますので,コンパイルに使用するコマンドのgccが通らない可能性があります.

      ということで,過年度生で今回初めてWindows環境で学習する人は,これまでコンパイル時に使用していたccコマンドがgccに変わり,実行ファイルa.outがa.exeになりますのでよろしくお願いします.また,警告は自分でオプションをつけないと出てこない場合がありますので,それもご注意ください.

      Windowsで作業する場合,a.exeファイルが悪意のあるファイルとWindows defenderが認識して,勝手に削除する場合があります.その際には,以下のようにして除外の設定をしてください.

      コントールパネル → 更新とセキュリティ → Windowsセキュリティ → ウイルスと驚異の防止



      ウイルスと驚異の防止の設定 → 設定の管理



      除外 → 除外の追加または削除

      「+除外の追加」を選択して「フォルダー」を選択の後,自分のプログラムがあるフォルダを指定
      注意

      Windowsアップデートが走った後で上記のような経路で除外設定ができなくなる場合が見られました.そこで,「設定」からダイレクトで除外設定へ進む方法も載せておきます.

      「設定」ウインドウが開くと上部に検索語句を入れる入力欄が出てきます.そこに「除外」と入れて検索すると,関係ないものが結果として出てきますが,その結果ウインドウの右上の方に「除外」と入ったままの検索欄が残っています.そこをクリックしてEnterすると,「除外の追加」に進めます.

    2. VS Code(エディタ兼ターミナル)

      プログラミングはプログラミング言語によりエディタにソースコードを入力し,それを機械語に翻訳(コンパイル)してから,その機械語になった実行ファイルを動作させるという流れで行います.以下に,それぞれの作業を詳しく説明します.

      プログラムを作成するには,いくつかのパターンがあります.そのもっとも素朴な形式は,「テキストエディタ」を利用して,自分でプログラム(ソースともいいます)を入力して行き,あるファイル名で保存したものを実行環境で実行するというものです.C言語は人間がわかりやすい文字や記号を使って作ったソースを,一度機械語に変換して実行ファイルを作るという形式です.しかし,今回はVS Codeという統合開発環境に近いアプリを使用して行いますので,エディタによるプログラミングとコンパイルや実行が一つのソフトの中で完結してできます.便利な環境ですので,早く慣れてください.

      VS Code は以下のサイトでダウンロードやインストールについて詳しく説明されています.Webページを参考に各自インストールしてください.

      Visual Studio Codeのダウンロードとインストール

      VS Codeを起動すると,以下のような画面になると思います.

      「New file」をクリックするとエディタ画面に変わります.

      これでプログラムのコードを入力する準備ができましたので,早速入れてみましょう.古今東西初めてのプログラムは画面に

      Hello, world!
      

      と表示させるものと決まっております.これ以外の作業をして何かの祟りにあってもいけませんので,ここでも同じようにしましょう.以下の文字列を貼り付けてみましょう.

      #include <stdio.h>
      
      int main(void)
      {
          printf("Hello, world!\n");
          
          return 0;
      }
      

      では,このプログラムを保存します.まず自分の「ドキュメント」フォルダに「c_program」というフォルダを作っておきましょう.なお,「フォルダ」という言葉はMacができたときにApple社がつけた名前で,元々のUnixの世界では「ディレクトリ」(directory)と呼んでいました.そのため,ディレクトリという言葉はコマンドの中に残っていますので,これからはそちらもよく使うことになります.

      では,今作ったc_programというフォルダにプログラムをhello.cという名前で保存しましょう.C言語のプログラミング環境では,ファイル名の末尾に拡張子の .c をつけるとC言語のプログラムであることを認識させることができますので,以後は必ず拡張子を .c にしましょう.なお,ファイル名はアルファベット小文字もしくは数字とアンダースコア _ の組み合わせにするのがお薦めです.今後の作業が楽になりますので.

      さて,保存が完了すると,先程のプログラムに色が付きました.

      色がつくと,プログラムの構造がわかりやすくなるので大変重宝しますね.また,入力の間違いなどにも気付きやすくなります.活用しましょう.

      なお,私のこの画像ではエディタ画面の左側にペインができてしまっていますが,これは気にしないでください.
      では,実際に今入力したプログラムを機械語に翻訳するコンパイル作業を行ってみましょう.まずは,VS Codeのメニューバーにある「Terminal」をクリックしてターミナルメニューを開き,「New terminal」を選択してください.ウインドウの下にターミナルが開いたはずです.

      四角いカーソルが出ている部分がコマンド入力可能な場所です.ここに,コンパイルのためのコマンドを入力します.使用するのは gcc というコマンドですが,まず最初にターミナルが開いた時点でのディレクトリが c_program ではありませんので,ディレクトリ移動から作業します.

      > cd doc

      のように,ディレクトリ移動のためのコマンド cd (change directory)の後,スペースを空けて,移動したいディレクトリ名を入力します.ここで,下図のように doc くらいまでキー入力したらTAB補完を利用しましょう.TABキー(キーボードの左上,Qキーの左)を押してください.

      他にそのような名前のディレクトリが無い限り,Documentと補完してくれるはずです.面倒なキー入力はなるべくTAB補完で楽をしましょう.

      ここで,補完された文字列を見ると,.\Documents\ となっています.Windowsは内部的に大文字と子文字を区別しないので,コマンド操作は全部小文字で行っても大丈夫です.

      また,先頭の . ドットですが,これは現在のディレクトリを指す記号です.で,\ バックスラッシュはディレクトリの区切り記号です.環境によっては円マークに見えることもあります.この .\ の組み合わせは重要な意味を持っていますので,注意してください.
      さて,実際にプログラムの hello.c があるのは c_program ディレクトリでしたので,もう一回 cd コマンドで移動する必要があります.そこで,先程のコマンドの続きに c_ と続け,さらにTAB補完すると,c_program ディレクトリに移動できます.

      > cd .\Documents\c_program\

      そうしたら,ちゃんとプログラムがあるかどうかを確認しましょう.そのディレクトリにあるファイルの一覧を表示させるコマンドは dir です.ディレクトリの先頭の3文字です.

      ちゃんと hello.c はありましたでしょうか?無い場合にはディレクトリが間違っているか,保存場所が間違っているかのどちらかですので,もう一度確認してください.
      では,コンパイルコマンドの gcc を使ってみましょう.

      > gcc hello.c

      このときも he とかまで打ってTABキーを押すと補完してくれますので,TAB補間の活用をしてください.

      何事も起こらずコマンドプロンプトが戻ってくればコンパイル成功です.間違っている場合にはエラーメッセージが表示されます.

      そして,コンパイルに成功すると,機械語で書かれた実際に動作するアプリケーションとして a.exe というファイルが作られています.dirコマンドで確認してみましょう.

      実際にできていれば,そのファイル自身がアプリケーションですので,コマンドで指示すれば動きます.ただし,先程出て来たこのディレクトリを表す .\ を忘れないでください.これをつけないと,Windowsがコマンドを理解してくれません.

      このときも,途中でTAB補完することを忘れないで下さい.早くTABキーを押す習慣をつけてください.

      さて,無事に画面に表示されましたでしょうか?

      Hello, world!
      

      ターミナルで上矢印キー↑を押すと,一つ前のコマンドが出てきます.押す度に前に戻ってコマンドが表示されます.↓では逆に新しい方にコマンドが変わっていきます.この「履歴」機能を使用することで,毎回キー入力しなくてもコンパイルや実行コマンドを簡単に使用できます.
    3. コマンド操作まとめ

      最後によく使用するコマンドをまとめておきますので,今後の参考にしてください.

      コマンド意味補足
      dirファイル一覧表示directory
      cdディレクトリ移動change directory
      pwd今作業しているディレクトリの表示print working directory
      mkdirディレクトリ作成make directory
      .今居るディレクトリ(カレントディレクトリ)
      ..上のディレクトリ
      ~自分のホームディレクトリ
      TABコマンドライン補完
      直前のコマンド表示

      cc コマンドは簡単なので割と覚えやすいのですが,実行ファイルを動作させる

      $ .\a.exe

      の方は忘れる人が多いです.上で説明したように,ドット .\ が現在のディレクトリであることを理解しておくことは重要です.
    4. テキストの見方

      これがC言語プログラミングと実行の流れです.次週以降は教科書のp.10以降の流れに従って作業します.その際に,このWebテキストの約束事を紹介しておきます.

      • プログラミング入力作業

        先ほどの hello.c のところで示したように,薄い青色の背景で表示されているものは,gedit で自分で入力するプログラムです.プログラム全体が表示されている場合や,特定の行だけが表示される場合など,その都度異なっているかもしれませんが,青の背景であれば,とにかくプログラムの中身を表します.

      • 実行結果の画面表示

        ターミナルで ./a.exe を実行して結果が表示されますが,その際の表示内容は,先ほどの Hello, world! の例のように薄いピンク色の背景で区別されます.ピンク色の部分は実行結果の表示ですので,覚えておいてください.

      • コマンド入力作業

        ターミナルを利用してコマンド入力する部分は,コマンドプロンプト > 付きで表示します.以下のように不等号マークが付いているときは,ターミナルのコマンド入力を意味します.

        > .\a.exe

    5. 作業練習

      Hello, world!
      

      と表示させたプログラムも,以下のようにいろんな文字を表示するものに変更してみましょう.

      1234567890
      
      + - / * %
      
      "Hello"
      
      \n
      

      今日のうちにやっておかないといけないのは,プログラムを作成,コンパイル,実行,修正や再編集,コンパイル,実行,という一連のプロセスをいちいち考えなくてもできるように何度も繰り返して習得することです.

  6. 本日のまとめ

    • C言語のプログラムを保存する際には拡張子 .c をつける

    • ファイル名はかな漢字変換を使用しないで打てるアルファベット小文字などが最適

    • ファイル名の途中にスペースを入れない方が後々楽になる

    • プログラムをコンパイルするコマンドは cc

      $ cc hoge.c

    • コンパイルが成功すると,実行ファイルとして a.out というファイルが作成される

    • 実行ファイルは以下のコマンドで実行する

      $ ./a.out

    • コマンド操作では履歴の矢印キー↑↓と,TAB補完を活用する

  7. 次回の予習範囲

    次回は教科書のp.10-38の範囲を学習しますので,予習をしてきてください.

  8. 今後の注意点

    この授業を履修する上で以下のような注意点がありますが,現時点ではまだあまり実感が持てないかもしれませんので,その時期にきましたらまた掲載します.ここでは一応確認しておいてください.

    • Insertキーの役割

      キーボードの右上の方,Backspaceキーの右側にInsertキーがあります.このキーの役割は,入力中の文書において,文字入力の「挿入」モードと「上書き」モードを切替えることです.通常は挿入モードになっていますが,Insertキーを押すと上書きモードに切り替わります.そうすると,すでに入力されている文字が上書きされて消えていきますので,それが嫌な場合にはもう一度Insertキーを押してモードを挿入モードに戻してください.

    • Ctrl + C

      今はまだ心配する必要はありませんが,教科書のp.58から始まる「繰り返し(反復処理)」を学習すると,プログラムの作成ミスにより「無限ループ」を実行してしまう可能性があります.そうなった場合には,Ctrl キーと C キーを同時に押して処理を止めてください.

    • レポート提出システム

      宿題やテストの提出には「レポート提出システム」を利用します.以下のURLにアクセスすると,ログイン画面が表示されますので,ログインした後,提出可能なレポート一覧から作業してください.

      http://ecsrep.ecs.shimane-u.ac.jp/report/

      他学部・他学科の学生さんはレポート提出システムへのアカウント登録が必要ですので,縄手の方までご連絡下さい.
      第3回の授業から宿題を課しますので,よろしくお願いします.


目次ページに戻る