情報科学演習
2012.10.01

Back to index page



  1. 本日の作業内容

  2. 授業の概要

    この授業では,C言語によるプログラミングを学習します.プログラミン グを通して,コンピュータの中で行われている処理を経験して行きましょう.

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

  3. 授業の進め方
    この授業は演習科目ですので,実際にみなさんがプログラミング作業を行なうと いうことを中心に,授業の最初にその日の作業内容の紹介と注意点,重要なポイ ント,教科書の補足説明などを行って,実習,小テスト,課題提出などのように 行っていきます.以下のことを覚えておいてください.

    • 教科書で予習

      事前にその日の授業で扱う教科書の範囲を指示しておきますので,その範囲は予 習をしてきてください.教室で実際にパソコンを使用した予習が望ましいです. (自分のパソコンでもC言語の勉強はできますので,環境を準備すれば自宅でもも ちろん可能です.) 次回以降は宿題を用意していきますので,課題のプログラミングを行うついで に予習をする習慣を付けてください.また,水曜日の7・8時 限にこの教室でメン ターが自習に対応してくれます.活用してください.

    • 実習作業

      教科書の例題などは,自分でもう一度打ち込んでいると,大変な時間がかかりま す.ですので,教科書に載っている例題は実習では扱いません.実習課題を用意 しますので,その課題のプログラミングを実習として行います.ですので,前に も書きましたように,教科書はしっかり予習してきてください.

    • 質問の勧め

      実習課題は教科書に書いてあることを応用する問題を中心に用意されています. そこで,自分では分からないこともときどき出てくることがあります.TAや私に 授業中に質問をすることで,理解を深めて行くことができますので,授業中はど んどん質問をしてください.コミュニケーション能力の養成にもつながります.

    • 補足事項

      教科書の順番でプログラミング作業を勉強していきますが,教科書ではまだ出て きていない処理も一つだけ使用します.それは「乱数」の発生の処理です.教科 書では,パラメータを自分で入力するために scanf というコマンドを 使用しますが,これは授業では使用しません.理由は,大勢の課題を採点するの に,自動化できないからです.そのため,毎回値が変わるようにするために乱数 を使用します.使用方法は,Web版のこのテキストで詳しく紹介します.

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

      プログラミングとは面倒な処理をコンピュータにやらせるためにあるものです. 自分が楽をするためにあるので,そのような処理を考えることが重要です.数字 を100個表示するプログラムでも,表示させる命令は1つで済ませるのが,プログ ラミングです.これについては,必要に応じてその都度説明します.

  4. C言語学習環境

    プログラミング学習は図1のような作業で行うことになります.エディタでプロ グラミングを行い,ターミナルでコマンドによりプログラムを実行して結果を確 認します.プログラムが期待どおりに動いていない場合には,再びエディタに戻っ て修正作業を行います.

    以下に,それぞれの作業を詳しく説明します.

    図1 プログラミングの流れ

    • gedit(エディタ)
      プログラムを作成するには,いくつかのパターンがあります.そのもっとも素朴 な形式は,「テキストエディタ」を利用して,自分でプロ グラム(ソースともいいます)を入力して行き,あるファイル名で保存したものを 実行環境で実行するというものです.C言語は人間がわかりやすい文字や記号を 使って作ったソースを,教科書の図1.6(p.6)にあるように一度機械語に変換して実行ファイルを作るという形式です ので,そのやり方を覚えていきましょう.

      現在教室で使用しているデスクトップ環境としては標準でGNOMEというものになっ ています.その中で標準として備わっているテキストエディタがgeditと呼ばれ るものですので,この授業ではこれからgeditを使っていきます.画面上のタス クバーの中の一番左のメニューから「アクセサリ」を選択すると「GNOMEテキス トエディタ」という項目がありますので,それを選択しましょう.すると,図2 のような構成のgeditが起動します.

      もちろん起動したときには中には何も入力されていません.

      図2 geditの画面

      ここで,上のプログラムのところを見ると,ソースが色分けされているのが分か るでしょう.このようにgeditではC言語のソースを自動で判り易く色分けしてく れる機能があります.プログラミングを行う際には参考にしてください.

      色分けは,geditがC言語のソースだと判断できる場合に行われます.すなわち, 拡張子に.cが付いたものを開いた場合や,拡張子を付けて保存した場合です.そ れまでは色分けはされませんので,なるべく早く一度保存するようにしてくださ い.

    • gnome-terminal(仮想端末)
      エディタで作成したプログラム(ソース)は教科書の図1.6や図2.1にあるような流 れで実行されます.この一連の作業は,基本的にはLinuxであってもWindowsであっ てもコマンド入力により行われます.そこで,実行までのコマンド操作を行う 「仮想端末」の復習を行いましょう.ここではGNOME標準のgnome-terminalを使 用します.

      1. ターミナル起動

        UNIX系のOSではターミナルによるコマンド操作がかつては一般的でしたが,最近 ではデスクトップ環境が充実してきたのであまり使わなくてもすむようになりま した.しかし,どの種類のUNIX(Linux)においても必ずコマンド操作は重要にな りますので,しっかりと学習しておきましょう.

        ターミナルの起動はgeditと同じように「アクセサリ」の中から「GNOME端末」を 選択することで行います.起動すると図3のようなターミナルが現れます.

        図3 gnome-terminalの画面

        ターミナル画面でいくつか重要なことを紹介しておきますと,上のウィンドウ枠 には,ログインしているユーザ名,端末名,作業しているディレクトリ名が表示 されています.また,それらの情報は「コマンドプロンプト」と呼ばれるコマン ド入力を受け付ける部分にも表示されています.作業するディレクトリを間違え るとエラーが出ますので,注意してください.

      2. ディレクトリ作成

        ターミナルで次の操作を実行して下さい.これにより,自分のホームディレクト リに seminar というディレクトリが作成されます.

        $ mkdir ~/seminar

        このディレクトリが今後この授業で作成するプログラムの保存に関するベースに なります.

      3. コンパイル練習

        テキストで書かれたソースコードを機械語に翻訳することをコンパイルと言いま す.さっそく試してみましょう.教科書ではp.10の例題2.1で最初のプログラム が紹介されています.が,古今東西プログラミングの練習の最初は



        Hello, world!



        という文字を画面に出すことと決まっていますので,ここではそっちで進めます. 教科書の例題2.1とほとんど同じですが,次に示すソースをgeditにコピーしてコ ンパイルの練習をしましょう.

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

        この内容で先ほどの seminar ディレクトリに hello.c とい う名前で保存します.保存が完了したら,ターミナルで確認してみましょう.

        $ ls

        とファイル表示コマンドを実行してみましょう.ちゃんと hello.c と いうファイルがあったでしょうか?

        ファイルが無い場合には保存したディレクトリが間違っている可能性があります のでよく確認してください.pwd というコマンドで自分が作業してい るディレクトリ(ワーキングディレクトリ)が確認できます.また,seminar ディレクトリに移りたい場合には cd というコマンド(Change Directoryの略)で出来 ます.

        $ pwd

        $ cd ~/seminar


        では,コンパイルしてみましょう.コンパイルのコマンドは cc もし くは gcc でどちらも同じ動作をします.

        $ cc hello.c

        とすれば良いのですが,これからコマンドによるコンパイルのときには必ず 「TAB補完」機能を使用してください.どういうことかというと,例えば,

        $ cc he

        まで入力してからキーボードの左上の方にある TAB キーを押してくだ さい.そうすると,ファイル名が補完されて

        $ cc hello.c

        のようになるはずです.この機能はキー入力を減らす効果だけではなく,保存し たディレクトリが正しいかどうかの判断にも役に立つので,必ず使うようにして ください.

        正しくコンパイルされるとエラー表示もなくもとのコマンドプロンプトに戻りま す.(図4)

        図4 正しくコンパイルされたところ

      4. 実行ファイル

        もう一度リストコマンドでディレクトリにあるファイルを確認します.

        $ ls

        すると, a.out という名前のファイルができているはずです.これが プログラムが機械語に翻訳された結果の実行ファイルです.実際に動かすには, それ自身がコマンドになっていますので,

        $ ./a.out

        とします.このときもTAB補完を忘れないでください.

        図5 実行コマンド入力画面

        最初にあるドットとスラッシュ ./ はこのディレクトリに あるファイルを指定するために必要なものですので,忘れないでください.

        Hello, world!
        

        と図6のように正しく表示されたでしょうか?

        図6 実行結果

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

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

      5. テキストの見方

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

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

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

        • 実行結果の画面表示

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

        • コマンド入力作業

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

          $ ./a.out

      6. 作業練習

        先ほど gedit の紹介のところで示しておいたサイコロのプログラムを実際にエディタを使用して作ってみましょう.また,実行してみましょう.それから

        Hello, world!
        

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

        1234567890
        
        + - / * %
        
        "Hello"
        
        \n
        

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

  5. 次回の予習範囲

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

  6. 今後の注意点

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

    • 教科書とノート必携

      教科書の例題や図表を使用してその日の授業内容の説明を行います.よって,教 科書は必ず持ってきてください.また,プログラミング処理がだんだん複雑になっ てくると,「アルゴリズム」(どのように実現するのか)や処理の進捗状況の理解 が必須になってきます.その際に,紙に書いて確認することが理解を深める上で 重要なので,ノートも必ず持ってきてください.

    • Insertキーの役割

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

    • Ctrl + C

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

    • レポート提出システム

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

      10.184.10.130/report/

      ただし,このシステムは学科外からはアクセスできませんので,注意してください.

目次ページに戻る