プログラミング入門 情報科学演習
2018.10.15

Back to index page



  1. 本日の作業内容

  2. メンター学習室について

    毎週水曜日の4コマ目にこの教室でメンター学習室を開設します.実習や宿題についての質問や,今後の学習方法など,先輩学生がいろいろと相談に乗ってくれますので,活用してください.

  3. 前回の復習

    C言語を用いたプログラムを作成し,コンパイルして実行することを前回行いま した.もう一度確認してみましょう.図1を前回もお見せしましたが,この2つの アプリケーション(gEditとGNOME端末)を使い分けてプログラミングを行います.

    図1 プログラミングのフロー

    • プログラムのファイル名

      エディタで作成したプログラムを保存する際には,拡張子を .c とすることを忘れないでください.また,ファイル名には基本的にはアルファベット小文字を使用し,スペースを入れないようにしましょう.

    • コンパイル

      Cのソースプログラム hoge.c をLinuxの cc コマンドでコン パイルします.

      $ cc hoge.c

    • 実行

      実行はコンパイルしてできた a.out という実行ファイルを使います. これもコマンドらインから行います.

      $ ./a.out

      ここで,現在作業しているディレクトリにある a.out を実行するので, コマンドパスとしての ./ が必要でした.また,コマンドライン操作 を行うときには TAB 補完を使うことが大切でしたので,よく覚えてお きましょう.

    • コマンドライン操作

      先ほども書きましたが,コマンドライン操作では次の2つを活用しましょう.

      • TAB補完

        コマンド操作の途中でTAB補完を使う癖をつけましょう.確実に操作ミスが減って効 率良くなります.

      • コマンド履歴

        コマンドライン操作時に上矢印キー(↑)を押すとひとつ前に実行したコマンドが,下 矢印(↓)ではその時点での一つ後のコマンドが表示されます.活用しましょう. また,しばらく前(1000回分程度)に入力したコマンドは

        $ history

        というコマンドで呼び出せます.もう一回実行するときには,そこで表示された 番号の前にエクスクラメーションマーク(!)を付けてやると実行できます.

    • ~ ティルダの付いたファイル

      名前をつけて保存したファイルの中には,自分では作成していないのに末尾に ~ のついたものがあります.これはgeditがバックアップのため に自動的に一つ前のファイルを保存しているものなので,注意してくださ い.

    • 画面への文字列表示

      もうひとつ重要なことは画面出力に関するものでした.以下にまとめておきますので,よく覚えておいてください.

      • printf

        画面に文字列を表示するためのコマンド

      • 二重引用符

        二重引用符である " " で囲まれた範囲の文字列が画面に表示される

      • バックスラッシュ

        バックスラッシュ \ は次に続く文字の意味(もしくは機能)を打ち消す

        なので,画面に二重引用符そのものを表示させたい場合には \" のようにする.バックスラッシュ自身を表示させる場合には \\ のようにバックスラッシュを2つ続ける

      • 改行文字

        \n は2つの記号で1つの「改行文字」を表す

  4. コメントアウト

    コメントアウトとは教科書のp.10のリスト1_1の途中にあるような注釈文の ことで,プログラムだけを記述すると後から見てわかりづらいことが多いので, 説明を加えておくものです.スラッシュ二つ // があるとその行のそれ以降がコメントとなり,実行に関係なくなります.例えば,

        printf("Print\n");
    //  printf("Do not print\n");
    

    のような処理があるとすると,2行目の方は出力されません.他の多くの言語では # がよく使わ れています.

    一方,C言語では

    
    /*    この部分は何を書いていてもプログラム内では無視されます    */
    

    のように /* */ とスラッシュとアスタリスクの組合せでできた一組 の記号の中もコメントとなります.この場合は途中に改行があっても範囲内全部がコメントとしてコンパイル時に無視されるようになっています.

    次週以降の小テストや宿題などでは下に示すような解答用紙を使用します.これは授業資料として保管しますので,誰のプログラムソースかわかるよう に解答用紙の最初には学生番号と名前を記入してもらいます.そのため,プログ ラムの実行に関係ない部分ができてしまうためコメント行を置いていますので,注意してくだ さい.

    /* ************************************************** */
    /*                                                    */
    /*      プログラミング入門                              */
    /*      レポート課題                                  */
    /*      2018.10.15                                    */
    /*                                                    */
    /* ************************************************** */
    /*                                                    */
    /*      学生番号:                                    */
    /*                                                    */
    /*      氏名:                                        */
    /*                                                    */
    /* ************************************************** */
    /*                                                    */
    /*      この行以降に解答のプログラムを書くこと        */
    
    

    反復処理が登場すると,途中経過を確認したくなることがよくあります.そのようなときに,試しに printf 文を入れておいて,確認しながらプログラミングを進め,邪魔になれば // をつけて表示をしないようにする,というような使い方とか,コンパイル時にエラーが出るので,新しく追加した行や怪しい行などに // をつけてみてコンパイル可能かどうかを確認する,という使い方がよくなされます.

  5. 定数

    教科書p.10のリスト1_1参照.

    現時点では数値と文字の扱いが違うことに注意してください.

  6. 変数

    「変数」とは値の入れ物で,プログラミング言語には必須の概念です.また, 「値」というのは「数値」だけでなく,「文字」や「真偽」なども含みます.さ らに,C言語では変数を使用する際には最初に「宣言」が必要となります.変数 の種類としては代表的なものに以下のようなものがあります.

    記号(宣言名)データ型
    int整数
    long倍長整数
    float浮動小数点数(実数)
    double倍精度浮動小数点数
    char文字

    型について,詳しくは教科書のp.15を参照してください.この授業では主として int 型と char 型を使用します.まれに float double が出てくる程度です.そこで, int char について少しだけ補足しておきます.

    例えば,100と画面に表示されるプログラムがあるとします.このとき,この100には二つの型の可能性があります.一つは「数値」としての100であり,これは足し算などの演算や大小比較ができる「値」です.これが int 型となります.一方,「文字列」としての1と0と0が並んでいる場合も考えられます.これはただの「文字」です.演算に使用することはできません.これが char 型となります.もちろんアルファベットや記号が画面に表示されている場合も char 型です.

    また,同じような文字に見えても,文字と文字列は異なります.先ほどの例でいえば,100という3文字が一つにまとまったものが文字列で,その要素の1と0と0が文字となります.char 型で文字を扱う場合,プログラム中で文字か文字列かで扱いが異なりますので注意してください.以下のような違いを理解しておくことは重要です.

    表現説明
    int1ただ普通にプログラム中に数値を書くと int
    char"1"二重引用符 " (ダブルクオート)で括られると文字列となる.これは1という文字と \0 というヌル文字とで構成されている.詳しくは,教科書p.116参照.
    '1'引用符 ' (シングルクオート)で括られると一文字となる.このときは本当に文字の1だけ.

    整数と倍長整数については計算機の環境(実装)に依存します.整数 int 型で扱える範囲がどうなるかについては,例えば,以下のようなプログラ ムで確認することができます.

    #include <stdio.h>
    
    int main(void)
    {
    	int n = 1234567890123;
    
    	printf("%d\n", n);
    	
    	return(0);
    }
    

  7. 書式指定文字列

    printf scanf のような画面やキーボードとのやりとりに 関する関数において,「書式指定文字列」を使うことで便利で簡単な入 出力が可能となります.覚えておく必要がありますので,以下のような よく使用するものをしっかり練習してください.特に,桁数の指定と右揃え,左揃えの指定は課題でもよく使用しますので確認を忘れずに.詳しくは,教科書の例題を参考にしてください.

    記号書式補足
    %d整数(10進数)
    %f浮動小数点数(実数)
    %e指数形式の浮動小数点数
    %o8進数
    %x16進数
    %c文字'1'のような文字一つずつを表示させるときに使用
    %s文字列"100"のような文字列を表示させるときに使用

  8. バックスラッシュ

    ところで,教科書のプログラムのソースでは改行文字が¥nになっています.¥ マークは日本独自の文字コードで英語圏ではキーボードにはありません.日本語 キーボードで¥記号のところの文字コードは本来バックスラッシュ( " \ " )です.画面にバックスラッシュが表示されていてもまったく問題あ りませんので,気にしないでください.

  9. 実習

    • インデント

      前回の授業では見様見まねでプログラムを編集してコンパイルしましたが,今回 からは自分で入力することが多くなります.そこで,インデント(字下げ)につい て確認しておきましょう.

      教科書のp.10にあるリスト1_1などを見ると,ブロックと呼ぶ中括弧({ })で囲ま れた部分は左側が空いていて,段落のようになっているのがわかります.これらはインデントと言っ て,プログラムを見やすくするものです.これが無いとブロックの範囲がわかり づらいものになります.約束事としてブロック単位で4文字程度字下げすること が良く行われます.インデントは無くてもプログラムは動作します.しかし,非 常にわかりづらいものになってしまいます.

      Web版のテキストに載せているプログラムではインデントされている文字数が8文字になっています.これはWebブラウザがTABを8文字と解釈して表示しているからです.ですので,みなさんはgEdit上でプログラムを書く際には,教科書と同じ4文字文のインデント(字下げ)を行ってください.
      また,すき間(空行)がたくさんあります.意味や構造の切れ目で空行を入れると理解しやすくなります.

    • 練習問題

      予習用の実習問題です.当日の問題は当日案内します.

  10. 本日のまとめ

    • 値には文字型,整数型,そして,実数型のように型がある.

    • % 記法

      printf の中で文字を表示させる %c ,整数値を表示させる %d ,そして,実数値を表示させる %f がある.

    • 整数型の値の四則演算は整数型の計算を行う.

    • それぞれの型には扱える数値の大きさに制限がある.

    • 実数型は2進数の小数に多くのビットを必要とするため,桁の多い数値を扱う際には注意が必要となる.

  11. 次回の予習範囲

    教科書p.32までを扱いますので,予習をお願いします.

  12. 宿題

    来週から基本的に毎週課題を出しますので,自分でプログラミングを行って提出してください.レポート提出システムを使用します.ログインできるか確認しておいてください.


目次ページに戻る