• 検索結果がありません。

プログラミング演習

N/A
N/A
Protected

Academic year: 2021

シェア "プログラミング演習"

Copied!
26
0
0

読み込み中.... (全文を見る)

全文

(1)

1

プログラミング演習 I

2003年 4 月23日(第 2 回)

木村巌

(2)

2

やること(知識編)

‹ Cygwinって?

‹ GNU Project

‹ C 言語の歴史、定義、標準

‹ ファイルシステム

(3)

3

やること(実践編)

‹ Cygwinの使い方

™ 起動と終了

™ ファイルとディレクトリ

™ C コンパイラの起動(とりあえずやってみる)

(4)

4

Cygwin って?

‹ Microsoft Windows上にUnix互換環境を構築

‹ GNU Project の成果

‹ 本当のUnixはどこで使える?

™ ⇒3 F の端末で 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全般を

指すと思ってよい.

(5)

5

GNU Project って?

‹ Free Software という思想

™ 基本的なソフトウエアは Free であるべきだ

™ 単に「ただ」という意味ではない!

™ 自由に手に入る、自由に配れる

™ 自由に改変できる

™ 改変したものを自由に再配布できる

™ この三つを柱にしたものが、 GNU GPL (General Public License).

‹ Free Software には他の形もある

™ FreeBSDなどが採用しているBSDライセンスな どなど

‹ Open Source Software という動きもある

(6)

6

ファイルシステム

‹ ファイル

™ 読み書きできるモノ

™ ファイル名、日付、所有者などの属性を持つ

‹ ディレクトリ(フォルダ)

™ ファイルをまとめたモノ

™ 実は特殊なファイル

‹ OS が計算機資源(この場合、 HDD などの記 憶領域)を抽象化した例

C言語でのファイルの読み書きなども、後の回でやります.ファイルシステムは OSが提供する機能です.基本的な機能なので、C言語からファイル入出力を行 う方法が標準化されています(標準Cライブラリに、ファイル入出力の為の関数が 用意されている).それ以外の、 OS が提供するより広範な機能を C から使うには、

システムコールを使うことになります.

(7)

7

C 言語についての知識(歴史)

‹ Brian Kernighan, Dennis Ritchie

‹ Algol(1960), CPL (1963), BCPL (1967), B (1970), C (1972)

‹ Unix の記述言語( Unix は C で書かれてい る!)

Cの歴史については、P. H. Salus, Unixの1/4世紀、ASCII, 2000年、にも詳しい.

(8)

8

C 言語についての知識

(定義、標準)

‹ C 言語そのものと、 C 言語の処理系の違い

™ C言語そのもの……文法、意味、標準ライブラリの規定

™ C言語の処理系……上記にしたがって書かれたプログ

ラムを、実行できるモノへ変換するプログラム

‹ 例:gcc

‹ 最初は K&R が標準だった

‹ そのうち、いろいろなC言語の処理系が現れた

™

人気があったので

‹ しかもちょっとづつ違う! …… 困る

‹ 標準的なCが策定された

(9)

9

C 言語についての知識

(定義、標準の続き)

‹ 様々な環境で同じプログラムが等しく動くには、

「厳密な」定義が必要

‹ ANSI・IEC標準

‹ 最新は C99 と呼ばれる、1999年に策定された規 格

™

複素数型のサポートなど数値型の拡張

™

国際化文字列のサポート

™

可変長配列、構造体のメンバーとして「フレキシブル」な 配列

™

などなど多数

‹ C99 は ANSI から入手可(有償)

‹ Harbinson & Steeleが良いレファレンス

Samuel P. Harbison, Guy L. Steele, C: A Reference Manual, Prentice Hall Computer Books ; ISBN: 013089592X ; 5th 版 (2002/02/01)

プログラミング言語の厳密な定義……文法、意味、標準ライブラリ.

文法に関してはBNFなど.意味は表示的意味論など.

(10)

10

実践編: Cygwin の使い方

‹ 全部コマンドで入力(CUIという←→GUI)

‹ 起動と終了

™ 起動:アイコンをダブルクリック

™ 終了: exit

‹ 各コマンドの引数は、空白で区切る

™ 例;現在いるディレクトリの一覧を詳細表示

™ ls -l

CUI: Character User Interface GUI: Graphical User Interface

CUIでは、結果も文字で出力される.計算機で扱うさまざまな対象を、文字で表

現する必要がある.

(11)

11

ファイルとディレクトリ

‹ Microsoft Windows の Explorer との関係

™

同じものが違ったように見えているだけ

‹ 全部文字で表示・入力

‹ ディレクトリの移動……cd (change directory)

‹ ディレクトリの内容一覧 ……ls (list)

‹ 現在いるディレクトリ ……pwd

‹ ディレクトリの新規作成 ……mkdir (make directory)

‹ Explorer と cygwin とで、同じディレクトリを見てみ よ!

‹ manを見よう!!

テキストファイルの内容を確認するための、lessというコマンドもある.

(12)

12

ファイルとディレクトリ(続き)

‹ 階層構造の表現:/some/where のように、/で 区切る

‹ 特別な記号:現在のディレクトリは . (ピリオド)

‹ 現在のディレクトリの一つ上は .. (ピリオド二

つ)

(13)

13

C コンパイラの起動

‹ 準備

™ cd /cygdrive/z/ ディレクトリの移動

™ mkdir 030423 030423 というディレクトリを作 製

™ cd 030423 そのディレクトリに移動

(14)

14

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;

}

(15)

15

C コンパイラの起動(続き)

‹ Cygwinのウィンドウで、

™ ls

‹ 自分が打ち込んだ、hello.cというファイルがあることを 確認

™ gcc -o hello hello.c

™ ./hello

™ うまくいけば、 Hello World! が表示される

コンパイルが失敗する例をわざと作って、どのようなエラーメッセージが出るか確

認しておこう!

(16)

16

例 1 を見ながら

‹ プログラムは基本的には英数字小文字で

‹ # で始まる行は、コンパイラへの指示

‹ int main (void) は、 main という関数が引 数をとらず、整数型の値を返すことを意味 する

‹ {} に囲まれた部分が関数の本体.

‹ printf() は、引数を書式付で出力する標準

ライブラリ関数

(17)

17

例 1 を見ながら(続き)

‹ 関数名を書くと、その関数が実行される

‹ ただし、 main() は特別で、プログラム内で最初

に実行されることが保証される

‹ 関数に対して、カッコ内に引数を書く

‹ 引数が printf() によって印字される

‹ 戻り値 0 を環境に返す

(18)

18

Coding Standard

‹ Coding Standard とは

‹ 改行や、行頭の空白の数、括弧の位置などを指定 したもの

‹ C のプログラムは、自由書式で書かれる

‹ 人間が見やすいように!

‹ しかし統一が必要である(特に複数で開発するとき は)

‹ この授業では、 GNU Coding Standard に準拠する

(教科書とは違う).この文書の「 C 言語の上手な書 き方」参照.

テキスト1.6節付近を参照

(19)

19

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

‹ }

(20)

20

コンパイルして実行

‹ hello2.c という名前で保存

‹ gcc -o hello2 hello2.c

‹ ./hello2 Me

‹ Hello Me!

(21)

21

例 2 を見ながら( main の引数)

‹ main(int ac, char *av[]) は、関数 main() が、最初の 引数として整数型を、二番目の引数として、 char へ のポインタの配列を取ることを意味する.

‹ 整数型、 char 、ポインタ、配列、などは後述.

‹ hello2 というプログラムに、外部からデータが渡され

る.それがどこにあるかが、 av に収められている

‹ av が何個のデータを指すポインタを格納しているか が、 ac.

‹ You are not expected to understand this.

(22)

22

例 2 を見ながら

‹ #include <stdlib.h>が追加されている.関数 exit()や、定数EXIT_FAILUREが使いたいか ら.

‹ もし ac が 2 より小さいなら、 exit() を呼ぶ.引数 はEXIT_FAILURE. つまり、環境に失敗を通 知して、プログラムを終了.

‹ そうでないなら、環境から渡された値av[1]を

用いて、printf()で印字する.

(23)

23

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

‹ }

(24)

24

コンパイル&実行

‹ 先のプログラムを、sqrt.c という名前で保存

‹ gcc –o sqrt sqrt.c –lm

‹ ./sqrt 4

‹ square root of 4.0 is 2.00000.

(25)

25

まとめ

‹ Cygwinとはなにか、GNU Projectとはなにか

‹ C 言語の歴史、標準、 C の規格と処理系との 違い

‹ ファイルシステムとは?

‹ とりあえず、幾つかの C プログラムをコンパイ

ル、実行.

(26)

26

レポート課題

‹ 「例1をみながら」、「例2を見ながら」、にならっ て、「例3を見ながら」、を書け.関数atof()は、

与えられた文字列を浮動小数点数に変換す

る.関数 sqrt() は、与えられた浮動小数点数

の平方根を与える.(教科書を参照のこと).

‹ 締め切り: 2003 年 4 月 29 日一杯(日本時間で)

‹ 提出先:メールで木村まで.

参照

関連したドキュメント

(1860-1939)。 「線の魔術」ともいえる繊細で華やかな作品

ESMPRO/ServerAgent for GuestOS Ver1.3(Windows/Linux) 1 ライセンス Windows / Linux のゲスト OS 上で動作するゲスト OS 監視 Agent ソフトウェア製品. UL1657-302

あれば、その逸脱に対しては N400 が惹起され、 ELAN や P600 は惹起しないと 考えられる。もし、シカの認可処理に統語的処理と意味的処理の両方が関わっ

(自分で感じられ得る[もの])という用例は注目に値する(脚注 24 ).接頭辞の sam は「正しい」と

2) ‘disorder’が「ordinary ではない / 不調 」を意味するのに対して、‘disability’には「able ではない」すなわち

□ ゼミに関することですが、ゼ ミシンポの説明ではプレゼ ンの練習を主にするとのこ とで、教授もプレゼンの練習

・私は小さい頃は人見知りの激しい子どもでした。しかし、当時の担任の先生が遊びを

それを要約すれば,①所得税は直接税の中心にして,地租・営業税は其の