PowerPoint slide
Download
Report
Transcript 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日一杯(日本時間
で)
提出先:メールで木村まで.