Presentation is loading. Please wait.

Presentation is loading. Please wait.

プログラミング演習I 2004年4月21日(第2回) 木村巌.

Similar presentations


Presentation on theme: "プログラミング演習I 2004年4月21日(第2回) 木村巌."— Presentation transcript:

1 プログラミング演習I 2004年4月21日(第2回) 木村巌

2 今日やること(知識編) そもそもプログラミングって? Cygwinって? GNU Project C言語の歴史、定義、標準 ファイルシステム

3 今日やること(実践編) Cygwinの使い方 起動と終了 ファイルとディレクトリ Cコンパイラの起動(とりあえずやってみる)

4 そもそもプログラミングって? プログラム := コンピュータに、「入力されたデータをどのように処理するか」を指示するモノ
プログラミング := プログラムを作成すること プログラミング言語 := プログラムを記述するための言語 様々なプログラミング言語がある:Lisp, Fortran, Cobol, C, C++, Perl, Ruby, JAVA,…

5 C言語についての知識(歴史) Cの作者:Brian Kernighan, Dennis Ritchie
二人の共著「プログラミング言語C」、共立出版.略称が K&R. Cの先祖:Algol(1960), CPL (1963), BCPL (1967), B (1970), そしてC (1972)に至る Unixの記述言語(UnixはCで書かれている!) Cの歴史については、P. H. Salus, Unixの1/4世紀、ASCII, 2000年、にも詳しい.

6 C言語についての知識 (定義、標準) C言語そのものと、C言語の処理系の違い 最初はK&Rが標準だった
例:gcc 最初はK&Rが標準だった そのうち、いろいろなC言語の処理系が現れた 人気があったので しかもちょっとづつ違う!……困る 標準的なCが策定された

7 C言語についての知識 (定義、標準の続き)
様々な環境で同じプログラムが等しく動くには、「厳密な」定義が必要 ANSI・IEC標準 最新はC99と呼ばれる、1999年に策定された規格 複素数型のサポートなど数値型の拡張 国際化文字列のサポート 可変長配列、構造体のメンバーとして「フレキシブル」な配列 などなど多数 C99はANSIから入手可(有償) Harbinson & Steeleが良いレファレンス Samuel P. Harbison, Guy L. Steele, C: A Reference Manual, Prentice Hall Computer Books ; ISBN: X ; 5th 版 (2002/02/01) プログラミング言語の厳密な定義……文法、意味、標準ライブラリ. 文法に関してはBNFなど.意味は表示的意味論など.

8 Cygwinって? Microsoft Windows上にUnix互換環境を構築 GNU Projectの成果
⇒3Fの端末でLinuxが使える Linux: 1990年代からLinus Torvaldsが開発を進めているOS. OS: Operating System. 計算機資源を抽象化、管理を行うソフトウエア. 狭い意味のLinuxは、Linux Kernelと呼ばれる、OSの核心部のみを指す.それに、一般的なOSとして必要な付属ソフトや、一般ユーザが使うための要素を組み合わせたものをdistributionという.たとえばRedHat, Vine, Debianなど.これらは、他の商用ソフトとあわせた有料版と、それを除いた無料版とに分けて配布されていることが多い. Unixというのは、狭い意味では、AT&TのBell研究所で開発が始められたミニコン用のOSを指す.現在では、狭い意味でのUnixに倣って開発されたOS全般を指すと思ってよい.

9 GNU Projectって? Free Softwareという思想 Free Softwareには他の形もある
単に「ただ」という意味ではない! 自由に手に入る、自由に配れる 自由に改変できる 改変したものを自由に再配布できる この三つを柱にしたものが、GNU GPL (General Public License). Free Softwareには他の形もある FreeBSDなどが採用しているBSDライセンスなどなど Open Source Softwareという動きもある

10 ファイルシステム ファイル ディレクトリ(フォルダ) OSが計算機資源(この場合、HDDなどの記憶領域)を抽象化した例 読み書きできるモノ
ファイル名、日付、所有者などの属性を持つ ディレクトリ(フォルダ) ファイルをまとめたモノ 実は特殊なファイル OSが計算機資源(この場合、HDDなどの記憶領域)を抽象化した例 C言語でのファイルの読み書きなども、後の回でやります.ファイルシステムはOSが提供する機能です.基本的な機能なので、C言語からファイル入出力を行う方法が標準化されています(標準Cライブラリに、ファイル入出力の為の関数が用意されている).それ以外の、OSが提供するより広範な機能をCから使うには、システムコールを使うことになります.

11 実践編:Cygwinの使い方 全部コマンドで入力(CUIという←→GUI) 起動と終了 各コマンドの引数は、空白で区切る
起動:アイコンをダブルクリック 終了:exit 各コマンドの引数は、空白で区切る 例;現在いるディレクトリの一覧を詳細表示 ls -l CUI: Character User Interface GUI: Graphical User Interface CUIでは、結果も文字で出力される.計算機で扱うさまざまな対象を、文字で表現する必要がある.

12 ファイルとディレクトリ Microsoft WindowsのExplorerとの関係 全部文字で表示・入力
同じものが違ったように見えているだけ 全部文字で表示・入力 ディレクトリの移動……cd (change directory) ディレクトリの内容一覧……ls (list) 現在いるディレクトリ……pwd ディレクトリの新規作成……mkdir (make directory) Explorerとcygwinとで、同じディレクトリを見てみよ! manを見よう!! テキストファイルの内容を確認するための、lessというコマンドもある.

13 ファイルとディレクトリ(続き) 階層構造の表現:/some/where のように、/で区切る
特別な記号:現在のディレクトリは. (ピリオド) 現在のディレクトリの一つ上は .. (ピリオド二つ)

14 Cygwin環境とWindowsでのファイルの対応
Microsoft Windowsでは、次のような表記: C:\Documents and Settings\iwao\My Documents\example.c 同じファイルが、Cygwinだと、 /cygdrive/C/Documents and Settings/iwao/My Documents/example.c のようになる.

15 Cコンパイラの起動 準備 cd /cygdrive/z/ ディレクトリの移動 mkdir 040421 040421というディレクトリを作製

16 Cコンパイラの起動(例1) プログラムファイルの準備 秀丸エディタで、次の内容を打ち込む(半角英数字で) 行頭の空白はタブキーで!
#include <stdio.h> int main (void) { printf (“Hello World!\n”); return 0; } hello.cという名前で保存 #include <stdio.h> int main (void) { printf (“Hello World!”); return 0; }

17 Cコンパイラの起動(続き) Cygwinのウィンドウで、 ls gcc -o hello hello.c ./hello
うまくいけば、Hello World!が表示される コンパイルが失敗する例をわざと作って、どのようなエラーメッセージが出るか確認しておこう!

18 例1を見ながら プログラムは基本的には英数字小文字で #で始まる行は、コンパイラへの指示
int main (void) は、mainという関数が引数をとらず、整数型の値を返すことを意味する {}に囲まれた部分がmain関数の本体. printf()は、引数を書式付で出力する標準ライブラリ関数 教科書2.1からを参照のこと.

19 例1を見ながら(続き) 関数名を書くと、その関数が実行される ただし、main()は特別で、プログラム内で最初に実行されることが保証される
関数に対して、カッコ内に引数を書く 引数がprintf()によって印字される 戻り値0を環境に返す

20 Coding Standard Coding Standardとは 改行や、行頭の空白の数、括弧の位置などを指定したもの
人間が見やすいように! しかし統一が必要である(特に複数人で開発するときは) この授業では、GNU Coding Standardに準拠する(教科書とは違う).この文書の「C言語の上手な書き方」参照. テキスト2.1節付近を参照

21 例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; } 教科書12.5参照

22 コンパイルして実行 hello2.c という名前で保存 gcc -o hello2 hello2.c ./hello2 Me

23 例2を見ながら(mainの引数) main(int ac, char *av[]) は、関数main()が、最初の引数として整数型を、二番目の引数として、charへのポインタの配列を取ることを意味する. 整数型、char、ポインタ、配列、などは後述. hello2というプログラムに、外部からデータが渡される.それがどこにあるかが、avに収められている avが何個のデータを指すポインタを格納しているかが、ac. 教科書12.5参照.今はそういうことができる、ということだけでよいです. You are not expected to understand this.

24 例2を見ながら #include <stdlib.h>が追加されている.関数exit()や、定数EXIT_FAILUREが使いたいから. もしacが2より小さいなら、exit()を呼ぶ.引数はEXIT_FAILURE. つまり、環境に失敗を通知して、プログラムを終了. そうでないなら、環境から渡された値av[1]を用いて、printf()で印字する.

25 例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; }

26 コンパイル&実行 先のプログラムを、sqrt.c という名前で保存 gcc –o sqrt sqrt.c –lm ./sqrt 4
square root of 4.0 is

27 まとめ Cygwinとはなにか、GNU Projectとはなにか C言語の歴史、標準、Cの規格と処理系との違い ファイルシステムとは?

28 レポート課題 Cygwin環境でのディレクトリ /usr/local/bin が、Windowsだとどのフォルダになるか答えよ.
例1を何らかの形で改造せよ.改造したものについて、「例1を見ながら」と同様に、プログラムを解説せよ. 締め切り:2004年4月27日一杯(日本時間で) 提出先:メールで木村まで.


Download ppt "プログラミング演習I 2004年4月21日(第2回) 木村巌."

Similar presentations


Ads by Google