情報科学演習
2010.4.30

Back to index page



  1. 本日の作業内容

  2. 前回の復習

    • 課題の提出状況

      前回の課題の提出状況についてまとめておきます.まだ問題が多く残っているよ うです.

      1. 古い課題の提出について

        以前の授業のテストの解答を出してくる人がいますが,採点の対象としていませ んので,もう出さないようにしてください.

      2. 件名について

        件名の間違いが少数残っています.件名の方の末尾に .c を付けてい るものがほとんどです.それら間違った件名の課題の提出は採点対象外として見 ていません.

      3. 解答の添付ファイル名について

        添付して提出してもらっている解答用紙ですが,ファイル名の間違っているもの がまだあります.大半は最後に ~ が付いているものでした.これにつ いては前回の授業で説明しているので,必ず理解して注意してください.

      4. 解答用紙の利用について

        まだ解答用紙の書式を使っていない人がいます.それらも採点していません.解 答に学生番号と氏名が無いものは採点しません.

      5. \n について

        まだバックスラッシュが理解できていない答案があります.その場合はだいたい /n になっているようなので,注意してください.自分の環境で 実行してみれば,それは分かるはずなので,必ず自分で確認してから提出 してください.

    • ディレクトリ移動

      これまでのプログラミング実習の中で,よく発生した問題の一つにコマンド入力 を行っているターミナルの理解の不足が多いようです.特に,ディレクトリの概 念がコマンドラインからはわかりにくいのが問題になっているようです.ここで, もう一度整理しておきましょう.

      ファイルマネージャーでホームディレクトリを表示すると,例えば,図1のよう になります.このとき,一方でターミナルを開いて,ファイル一覧を表示するコ マンド ls を実行すると図2のようになります.

       
      図1 ホームディレクトリ内のファイル表示  図2 ls 表示の結果

      geditで作成したプログラムのソースは seminar ディレクトリにあり ますから,その中で cc コマンドを実行しなければコンパイルできま せん.そこで,ターミナルにおいて,ディレクトリ移動をしないと行けなくなり ます.そのときに使用するのは Change Directory の頭文字を取って, cd となります.

      $ cd seminar

      と図3のようにすることで,ディレクトリを移動します.移動後は図4のようにな ります.

       
      図3 cd コマンドの実行  図4 cd コマンド実行後のターミナル

    • geditではまず保存

      授業の中でも説明しましたが,geditでプログラムを書きはじめたら,まず保存 しましょう.1行も書いてなくても大丈夫です.拡張子が .c という名 前で保存したら,それ以降はgeditの方で編集の文書がC言語のソースだと認識し てくれるので分かり易く色分けしてくれます.

    • printf の使い方

      例題のプログラムは画面に結果を表示するものばかりです.そのため,必ず printf という関数を使うようになっています.これを使いこ なせなければ,今後の作業は困難になることが予想されますので,以下 のような基礎知識はしっかり持っておきましょう.

      • 文法

        1. 引数無し

          ただ単に文字列を出力するだけです.例題2.1で出てきました.

          printf("Hello, world!\n");
          

          geditでは二重引用符の範囲内の文字がピンク色になります.プログラムの最後 に出てくるときには,最後の \n を忘れないようにしてください.

        2. 引数一つ

          例題2.2の2つ目の printf の方です.変数や計算結果の値などを出力 します.そのためには %d などの書式指定文字列が必要です.

          int a = 1234
          printf("The value of variable a is %d.\n", a);
          printf("The sum of 3 and 5 equals to %d.\n", 3 + 5);
          

        3. 複数の引数

          例題2.3で出てきました.Webテキストでも 紹介しています.

          int a = 1234, b = 2345
          printf("a is %d and b is %d\n", a, b);
          

          上の例では,二つの %d がありますが,これは後ろの「引数」 a b の値が順番に入ります.引数の数はいくつでも構いません. このときの様子は図5のようになります.

          図5 printf の動作

      • 注意

        例題2.3や今日の例題である2.6や2.7では複数にまたがる printf の使 い方を紹介しています.慣れるまではこのような使い方ではなく,1行の出力に 一つの printf 文を書く方法をお薦めします.

  3. 四則演算

    • 整数の計算

      教科書の例題2.6を見ると,演算記号の使い方が大体分かると思います.「掛け る」がアスタリスク * で「割る」がスラッシュ / になって いますが,直感的に判ると思います.また次で紹介する割算の余りを求める剰余 % はプログラミングで非常に重要な演算なので注意しましょ う.

    • 剰余

      「剰余」とは割算の余りを指します.演算記号 % は二つの数の剰余を 求めるもので,

      a = 5 % 3
      

      のようにすると変数 a には2が代入されます.

      剰余がなぜプログラミングで重要かというと,一定周期で繰り返すものに便利に 使えるからです.例えば,UNIX系のOSではターミナルで次のようにコマンドを使 用すると,その月のカレンダーが表示されます.

      $ cal

      こういう表示をさせるときに,どこで折り返すか(改行するか)については7で割っ た余りを活用します.すなわち,問題となっている日が基準となる日から何日目 かが分かると,その日が何曜日かが分かるので,それで折り返しの処理ができま す.また,じゃんけんみたいな勝ち負けが順繰り送りになるようなものにも,コ ンピュータ上で疑似じゃんけんを行って勝ち負けを判定する際に3の剰余が使用 できます.

      C言語では負の数の剰余を求めると,負の数の余りを返してくれます.他の言語 ではそうでは無い場合もあるので,別の言語を使うときには注意してください. 例えば,Cでは -1 % 3 -1 ですがRubyでは答えは 2 になります.

    • 乱数の利用

      教科書では scanf を活用して,自分でいろいろな数字や文字を入力し てプログラムの動作を確認するように例題が用意されています.それはそれでい いのですが,乱数を利用するともっと楽にいろんなケースについて考えることが できます.ここでは乱数を発生させるための基本的なソースを紹介しますので, こちらも活用してください.

      #include <stdlib.h>
      #include <time.h>
      

      まず,上のようなヘッダファイルを最初に読み込む必要がありますので,必ず記 述しておいてください.

      srand((unsigned) time(NULL));
      
      printf("%d\n", rand());
      

      で乱数を作れます.最初の srand の部分は乱数配列を初期化するもの で,これを用意しておかないと,毎回乱数の登場順が決まってしまいますので, ちゃんとしたばらばらな数が出てきません.また,乱数を発生させている正体は rand() という関数です.そのまま printf で出力 もできますが,代入したり演算したりも可能です.

  4. 実習

    教科書のp.18までの内容を各自プログラミングで確認してください.その後で, 今日の実習作業を案内します.


目次ページに戻る