PowerPoint slide

プログラミング演習I
2004年4月21日(第2回)
木村巌
今日やること(知識編)
 そもそもプログラミングって?
 Cygwinって?
 GNU
Project
 C言語の歴史、定義、標準
 ファイルシステム
今日やること(実践編)
 Cygwinの使い方
 起動と終了
 ファイルとディレクトリ
 Cコンパイラの起動(とりあえずやってみる)
そもそもプログラミングって?
 プログラム :=
コンピュータに、「入力された
データをどのように処理するか」を指示するモ
ノ
 プログラミング := プログラムを作成すること
 プログラミング言語 := プログラムを記述する
ための言語
 様々なプログラミング言語がある:Lisp, Fortran,
Cobol, C, C++, Perl, Ruby, JAVA,…
C言語についての知識(歴史)
 Cの作者:Brian Kernighan, Dennis
Ritchie
 二人の共著「プログラミング言語C」、共立出
版.略称が K&R.
 Cの先祖:Algol(1960), CPL (1963), BCPL (1967),
B (1970), そしてC (1972)に至る
 Unixの記述言語(UnixはCで書かれている!)
C言語についての知識
(定義、標準)

C言語そのものと、C言語の処理系の違い


C言語そのもの……文法、意味、標準ライブラリの規定
C言語の処理系……上記にしたがって書かれたプログラ
ムを、実行できるモノへ変換するプログラム

例:gcc
最初はK&Rが標準だった
 そのうち、いろいろなC言語の処理系が現れた


人気があったので
しかもちょっとづつ違う!……困る
 標準的なCが策定された

C言語についての知識
(定義、標準の続き)
様々な環境で同じプログラムが等しく動くには、「厳
密な」定義が必要
 ANSI・IEC標準
 最新はC99と呼ばれる、1999年に策定された規格





複素数型のサポートなど数値型の拡張
国際化文字列のサポート
可変長配列、構造体のメンバーとして「フレキシブル」な配
列
などなど多数
C99はANSIから入手可(有償)
 Harbinson & Steeleが良いレファレンス

Cygwinって?
 Microsoft Windows上にUnix互換環境を構築
 GNU
Projectの成果
 本当のUnixはどこで使える?
 ⇒3Fの端末でLinuxが使える
 Linux:
1990年代からLinus Torvaldsが開発を進めて
いるOS.
 OS: Operating System. 計算機資源を抽象化、管
理を行うソフトウエア.
GNU Projectって?

Free Softwareという思想







Free Softwareには他の形もある


基本的なソフトウエアはFreeであるべきだ
単に「ただ」という意味ではない!
自由に手に入る、自由に配れる
自由に改変できる
改変したものを自由に再配布できる
この三つを柱にしたものが、GNU GPL (General
Public License).
FreeBSDなどが採用しているBSDライセンスなど
など
Open Source Softwareという動きもある
ファイルシステム
 ファイル
 読み書きできるモノ
 ファイル名、日付、所有者などの属性を持つ
 ディレクトリ(フォルダ)
 ファイルをまとめたモノ
 実は特殊なファイル
 OSが計算機資源(この場合、HDDなどの記憶
領域)を抽象化した例
実践編:Cygwinの使い方
 全部コマンドで入力(CUIという←→GUI)
 起動と終了
 起動:アイコンをダブルクリック
 終了:exit
 各コマンドの引数は、空白で区切る
 例;現在いるディレクトリの一覧を詳細表示
 ls
-l
ファイルとディレクトリ

Microsoft WindowsのExplorerとの関係

同じものが違ったように見えているだけ
全部文字で表示・入力
 ディレクトリの移動……cd (change directory)
 ディレクトリの内容一覧……ls (list)
 現在いるディレクトリ……pwd
 ディレクトリの新規作成……mkdir (make directory)
 Explorerとcygwinとで、同じディレクトリを見てみよ!
 manを見よう!!

ファイルとディレクトリ(続き)
 階層構造の表現:/some/where
のように、/で
区切る
 特別な記号:現在のディレクトリは. (ピリオド)
 現在のディレクトリの一つ上は .. (ピリオド二
つ)
Cygwin環境とWindowsでのファイルの
対応
 Microsoft Windowsでは、次のような表記:
C:\Documents and Settings\iwao\My
Documents\example.c
 同じファイルが、Cygwinだと、
/cygdrive/C/Documents and Settings/iwao/My
Documents/example.c
のようになる.
Cコンパイラの起動
 準備
 cd
/cygdrive/z/ ディレクトリの移動
 mkdir 040421 040421というディレクトリを作製
 cd 040421
そのディレクトリに移動
Cコンパイラの起動(例1)

プログラムファイルの準備



秀丸エディタで、次の内容を打ち込む(半角英数字で)
行頭の空白はタブキーで!
#include <stdio.h>
int
main (void)
{
printf (“Hello World!\n”);
return 0;
}
hello.cという名前で保存
Cコンパイラの起動(続き)
 Cygwinのウィンドウで、
 ls
 自分が打ち込んだ、hello.cというファイルがあることを
確認
 gcc
-o hello hello.c
 ./hello
 うまくいけば、Hello World!が表示される
例1を見ながら
 プログラムは基本的には英数字小
文字で
 #で始まる行は、コンパイラへの指示
int main (void) は、mainという関数が引
数をとらず、整数型の値を返すことを
意味する
 {}に囲まれた部分がmain関数の本体.
 printf()は、引数を書式付で出力する
標準ライブラリ関数
例1を見ながら(続き)
 関数名を書くと、その関数が実行される
 ただし、main()は特別で、プログラム内で最初
に実行されることが保証される
 関数に対して、カッコ内に引数を書く
 引数がprintf()によって印字される
 戻り値0を環境に返す
Coding Standard
Coding Standardとは
 改行や、行頭の空白の数、括弧の位置などを指定
したもの
 Cのプログラムは、自由書式で書かれる
 人間が見やすいように!
 しかし統一が必要である(特に複数人で開発すると
きは)
 この授業では、GNU Coding Standardに準拠する(教
科書とは違う).この文書の「C言語の上手な書き
方」参照.

例2(環境からの引数)







#include <stdio.h>
#include <stdlib.h>
int
main (int ac, char *av[])
{
if (ac < 2)
exit (EXIT_FAILURE);
printf ("Hello %s!\n", av[1]);
return 0;



}
コンパイルして実行
 hello2.c という名前で保存
 gcc -o
hello2 hello2.c
 ./hello2 Me
 Hello Me!
例2を見ながら(mainの引数)
main(int ac, char *av[]) は、関数main()が、最初の引数
として整数型を、二番目の引数として、charへのポイ
ンタの配列を取ることを意味する.
 整数型、char、ポインタ、配列、などは後述.
 hello2というプログラムに、外部からデータが渡され
る.それがどこにあるかが、avに収められている
 avが何個のデータを指すポインタを格納しているか
が、ac.
 教科書12.5参照.今はそういうことができる、というこ
とだけでよいです.
 You are not expected to understand this.

例2を見ながら
 #include <stdlib.h>が追加されている.関数exit()
や、定数EXIT_FAILUREが使いたいから.
 もしacが2より小さいなら、exit()を呼ぶ.引数は
EXIT_FAILURE. つまり、環境に失敗を通知して、
プログラムを終了.
 そうでないなら、環境から渡された値av[1]を用
いて、printf()で印字する.
例3(文字の変換、数学関数)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int
main (int ac, char *av[])
{
if (ac < 2)
exit (EXIT_FAILURE);

printf (“square root of %f
= %f.\n",
atof (av[1]),
sqrt (atof (av[1])));
return 0;
}
コンパイル&実行
 先のプログラムを、sqrt.c
 gcc –o
という名前で保存
sqrt sqrt.c –lm
 ./sqrt 4
 square root
of 4.0 is 2.00000.
まとめ
 Cygwinとはなにか、GNU Projectとはなにか
 C言語の歴史、標準、Cの規格と処理系との
違い
 ファイルシステムとは?
 とりあえず、幾つかのCプログラムをコンパイ
ル、実行.
レポート課題
1.
2.


Cygwin環境でのディレクトリ /usr/local/bin が、
Windowsだとどのフォルダになるか答えよ.
例1を何らかの形で改造せよ.改造したもの
について、「例1を見ながら」と同様に、プロ
グラムを解説せよ.
締め切り:2004年4月27日一杯(日本時間
で)
提出先:メールで木村まで.