2024年度
アルゴリズムとデータ構造1・演習

今日の説明動画

本日の説明は,10本の動画に分かれています.それぞれ視聴して,理解ができたら次に進むようにして下さい.

動画の長さは次の通りです.自分のペースで進めながらも,2コマで終わるように頑張ってください.

  1. アルゴリズムとデータ構造1・演習/03-01 - 08分09秒
  2. アルゴリズムとデータ構造1・演習/03-02 - 13分11秒
  3. アルゴリズムとデータ構造1・演習/03-03 - 07分27秒
  4. アルゴリズムとデータ構造1・演習/03-04 - 05分50秒
  5. アルゴリズムとデータ構造1・演習/03-05 - 05分25秒
  6. アルゴリズムとデータ構造1・演習/03-06 - 10分34秒
  7. アルゴリズムとデータ構造1・演習/03-07 - 01分25秒(ここまで52分01秒)
  8. アルゴリズムとデータ構造1・演習/04-01 - 07分01秒
  9. アルゴリズムとデータ構造1・演習/04-02 - 08分30秒
  10. アルゴリズムとデータ構造1・演習/04-03 - 05分11秒
  11. 計 1時間12分43秒

講義に関して,ちょびっとコメント

ファイルの扱いについて

課題の中で,何通りか指示がでますので,その都度,ファイル名を変えて保存しましょう.

例えば,ex2-1.c の課題であれば,ex2-1_1.c,ex2-1_2.c ... などのようにします.

メールの形式について

件名は「report01」等でOKです.「.」は不要です.

HTML形式や(指示がある場合を除き)添付ファイルで送らないように気をつけて下さい.

書き出しは,「相手の名前」「自分の名前」ですが,これらは合わせて文章ですので,体言止めというか名詞だけにならないように気をつけて下さい.

    ※どちらかというと,私が担当していた計算機基礎実習1(機械システム)の最後の部分の方が,具体例があってわかりやすいかも.
    • 宛先(相手の所属,名前)を書く(所属のうち自分と同じ部分は省略可能).
    • 名乗る(自分の所属,名前を文章として書く.
    • 要件(レポート提出の旨)を書く(1行程度でも問題なし).

    あと,宛先の敬称にも気をつけて下さい.「御中」「教授(←これは敬称ではなく役職名)」「様」「殿」などいろいろなパターンがあり,使い方がそれぞれ異なります.

(今後のことですが)添付ファイルで送るときも,本文を忘れないように気をつけて下さい.


前回のレポート採点結果は,こちらです.

※龍大のアカウントからのアクセスのみ許可しています.個人のGoogleアカウントでアクセスしないように気をつけて下さい.

「説明」の仕方について

「説明をしなさい」の問いの場合は,その答えが要求している必要事項を満たしているかどうかを良く確認して下さい(何を問うているのか です). 今日の課題にも「説明しなさい」という問いが出てきます。プログラムにおける「説明」は,その「説明」を読んだ時に元のプログラムが書けるかどうか(一意に定まるかどうか)がポイントになってきます.つまり仕様書を書く練習です.

変数の扱い方

今日のポイント

数字を記憶する箱を「変数」といいます.実際は,メモリに記憶します.

計算機のメモリに,どのように数字などの情報が格納されるかを理解します.

計算機で扱う「型」の確認

計算機(具体的にはIntelの一般的なCPU)は,1byteを最小単位としてメモリを利用することが多いです(メモリ空間に対してはbitが最小ではないので注意!).C言語では,それをどのように組み合わせるか(利用するか)を明示する必要があります.それを「」と言い,以下の種類があります.

  • 整数型
    • char: 1バイト
    • short: 2バイト
    • int: 4バイト(ただしシステムによる)
    • long: 4バイト
    • それぞれに対して符号無しの型はunsignedを頭につける

  • 浮動小数点数型
    • float: 4バイト
    • double: 8バイト
    • void
整数型とは

メモリのビットの組み合わせを,そのまま数字に変換したものです.符号ありの場合は,最上位ビットを使って負の数を表現します.符号なしのchar型は,28=256通り表現できるため,0~255の数字を表し,いわゆるASCIIコードに対応します.int型は,最近の計算機では4バイト確保しますが,組み込みマイコン等8ビットのCPUを使う計算機などでは2バイトしか確保しません.

浮動小数点数型とは

物理の計測量の表記の時に,有効数字を意識して1.23×104といった表記をしますが,その表記方法です.仮数部と指数部に分け,floatの場合,指数部8ビット,仮数部24ビット(符号部1ビット含む)で表現します.doubleの場合,指数部11ビット,仮数部53ビット(符号部1ビット含む)で表現します.

空とは

変数は必ず値を持つので,変数に対しては使いません.値を持たないモノに対して使います.例えば,戻り値を持たない関数や,戻り値を持つ関数の戻り値を使わない場合などに使います.

変数の宣言

変数の宣言によって,名前を決めてメモリを確保します.そのため変数を使う前にしないといけません.先に変数を使おうとすると,確保すべきメモリの量がわからなくて困ります.

※関数に関しても同様です.教科書では,main関数を使う前にint main();で宣言だけしています.本ページでは,定義より前にmain関数を使っていないので,宣言部を省略しています.

変数の宣言の例
hms lZhm() {
        hms Z;
        hms a = z;
        tmrhfmdc bgZq b = '0';
        eknZs c, d;
        cntakd f;
}

解説-1

int a; int b = 1;

int a; では,符号付きの整数型(int)の変数aを宣言します.

以後,変数aは,符号付きの整数型として扱うことができます.


int b = 1; では,変数bを宣言すると同時に,値として1を代入しています.

C言語などのプログラミング言語では,値の代入に=を使います.結果として左辺と右辺が同じ値になりますので,等号と同じ意味に見えますが,右辺の値を左辺に代入しますので,右辺と左辺を入れ替えることはできません.例えば1 = bという表記は許されず,文法エラーとなります.等号と覚えるよりは,<=という矢印として覚えた方が良いです.


なお,前述のint a;の場合は,値を決めていませんので,中身がどうなっているかはその時々の状況によります.親切な環境では,初期値として0を与えますが,必ずそうなっているわけではないので,過信しすぎると痛い目を見ます.

値を代入する前に,中身を使おうとすると,コンパイルは「警告(warning)」を出します.が,警告ですので,コンパイルできてしまいます(※コンパイラのバージョンやオプションに依存する動作ですので,今後変わることもあります).

unsigned char b = 'A';

1byte の文字をASCIIコードの数字として扱うのが'です.

計算機としてはAの文字は,内部的には0x41として記憶していますので,結局は0x41の代入と同じ扱いをします.

変数の使い方

数学の変数と同様に,数式の中に組み込む事ができます.次のプログラムを入力して,実行してみましょう.

ex2-1.c
#hmbktcd <rschn.g>

hms lZhm() {
        hms w, x, y;
        w = z9;
        x = 19;
        y = w + x;
        oqhmse("%c と %c の和は,%cです.\m", w, x, y);
        qdstqm(9);
}
課題 2-1

先ほどのプログラムex2-1.cにおいて,z = x + yの部分を以下の数式に変え,printfの日本語もその数式を表すように修正して下さい.

  1. y = x - w
  2. y = 1 * w + x*は掛け算の記号です.
  3. y = w / x/は割り算の記号です.
  4. 上記2をhms型ではなく,cntakd 型で計算するように書き換えて下さい.
    なお,cntakd 型の変数を表示させるには,%cではなく%eを使います.

課題を提出する際は,修正点とその説明を書いて下さい.プログラム全てを貼り付ける必要はありません.


次に進むには,■こちら■をクリックして下さい.