プログラミング演習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日一杯(日本時間 で) 提出先:メールで木村まで.
© Copyright 2024 ExpyDoc