プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/clangi2015/clangi2015_1p.pdf ·...

30
C言語入門 プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。) 1

Upload: others

Post on 26-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

C言語入門

プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ,

情報処理言語Ⅰ(実習を含む。)

1

Page 2: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

本日の内容

• 授業予定日の確認

• 授業教材の指示

• C言語用プログラミング環境の整備

• C言語プログラミングの導入部分

2

Page 3: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

授業予定日の確認

• 授業予定日の変更があります • 本来の授業予定日:

• 毎週金曜日 7,8,9,10 時限 4/10、 4/17、 4/24、 5/1、 5/15、 5/22、 5/29、 6/5、 6/12、 6/19、 6/26、 7/3、 7/10、 7/17、 7/24、 7/31 以上16回、最終日は期末試験

• ただし以下の授業予定日は出張のため、翌日または翌々日に変更になります。 • 金曜日: 4/24、5/22、6/19、7/10 休講 • 土曜日: 4/25、5/23、6/20、7/11 補講候補日1 • 日曜日: 4/26、5/24、6/21、7/12 補講候補日2

3

Page 4: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

授業変更日の確認

4月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 5月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

6月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 7月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

4

Page 5: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

教材のページ

• 修学支援システムの講義情報から Moodle【学内外版】へ

5

Page 6: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

コマンドプロンプト

• キーボードから直接命令を入力して実行する時に使います。本講義ではC言語によるプログラムのソースコードをコンパイル(=機械語に翻訳)する場合等に利用する。

Page 7: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

コマンドプロンプトを開く

• キーボードから「田」を押したまま「R」を押して「ファイル名を指定して実行」を開く。 「田+R」のように表記された場合、慣例として上記のような複数キー同時押しを意味する。

• 「ファイル名を指定して実行」 の「名前」の欄に「cmd」と入力し、 「ENTER」キーを押すか、「OK」ボタンをクリックする。

「スタート」ボタンから、「すべてのプログラム」→「アクセサリ」→「コマンドプロンプト」でも開ける。

Page 8: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

コマンドプロンプトの設定項目

• 「簡易編集モード」をONにしておくと、マウスの左右ボタンだけでコピペ出来る。

Page 9: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

コマンドプロンプトの設定

• ウインドウ左上のアイコンをクリックするとメニューが出る。

「プロパティ」で現在開いているプロンプトのみ、「規定値」で次回以降開くプロンプト全てに対する設定を変更出来ます。

Page 10: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

コマンドプロンプトと作業ディレクトリ

• 「作業ディレクトリ」とはコマンドプロンプトで作業した際に、ファイルが入出力されるディレクトリの事。

通常、コマンドプロンプトを開いた初期状態では、ユーザーのホームまたはプロファイルのディレクトリが作業ディレクトリ。

ディレクトリとはフォルダの別の言い方。 つまり「ディレクトリ=フォルダ」

Page 11: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

作業ディレクトリとコマンド

• コマンドプロンプトで「explorer .」と入力して ENTER キーを押す。

• 現在の作業ディレクトリが explorer で開く。

「explorer」とは、Windows上で、

いつもファイルを操作しているこのウインドウの事。

「explorer」がコマンド名(≒ プログラムの実行ファイル名)で、スペースで区切って与えた「.」はコマ

ンドライン引数と言います。この場合「.」は、現在の作業ディレクトリを表す。

Page 12: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

本来のディレクトリ名

• explorer 上では本来のディレクトリ名が日本語も用いて分かり易く(?)表示されている。

ここをクリックすると、コマンドプロンプト上の作業ディレクトリの表示と一致していることが確認出来る。

これが本来のディレクトリ名 explore 以外ではこちらを使う。

異なる名前に見える

「C:¥Users¥kou」は C ドライブの Users フォルダの中にある kou フォルダを意味する。

Page 13: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

プログラミング言語、計算機言語、 情報処理言語とは?

• コンピュータに命令するための人工言語

• AWK, BASIC, C, C++, C#, D, ECMAScript, Erlang, Fortran, F#, Haskell, Java, JavaScript, Lisp, Objective-C, OCaml, Perl, PHP, Python, Ruby, Smalltalk, Tcl, 等々

13

Page 14: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

プログラムとは?

• 値の保存・参照、各種演算、条件分岐等を組み合わせた計算の手順

処理

データ

保存

データ

参照

条件判定

処理

処理

処理

14

Page 15: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

プログラムが出来ると 何が良いのか?

• コンピュータに仕事をやってもらえる!!! • ルーチンワークからの解放

• 工作の世界も広がる!!! • 最近は Arduino 等の安くて高機能なキットがある • http://thinkit.co.jp/story/2013/02/12/3960

• 楽しい!!! • 遊び方は遊ぶ人次第

• 仕事にもあぶれない? • Facebook元役員「プログラミングを学ぶのなら、生

涯仕事に困らないことを私が保証しよう。」 • http://goo.gl/I8nCDm

15

Page 16: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

C言語

• AT&T の Bell 研で UNIX を作ってた Brian Wilson Kernighan と Dennis MacAlistair Ritchie らによって UNIX を作成するための言語として生まれた。

• K&R 「プログラミング言語C」がC言語のバイブルと言われる所以。

16

Page 17: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

世界で最も有名なプログラム

• K&R の最初に出て来るプログラム hello.c

17

hello.c #include <stdio.h> main() { printf("hello, world¥n"); }

1 2 3 4 5 6

mintty + bash + GNU C $ gcc hello.c && ./a hello, world

Page 18: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

世界で最も有名なプログラム

• K&R の最初に出て来るプログラム hello.c

18

hello.c #include <stdio.h> main() { printf("hello, world¥n"); }

1 2 3 4 5 6

ヘッダファイル(stdio.h)の取り込み

mintty + bash + GNU C $ gcc hello.c && ./a hello, world

プログラムのソースコードを コンパイルして実行

文字列の表示

main関数の定義

Page 19: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

ヘッダファイル stdio.h

• 多くの入門書ではおまじないとして紹介

19

hello.c #include <stdio.h> main() { printf("hello, world¥n"); }

1 2 3 4 5 6

ヘッダファイル(stdio.h)の取り込み

mintty + bash + GNU C $ gcc hello.c && ./a hello, world

・C言語は言語本体だけでは、四則演算、条件分岐、繰り返し等の基本的な処理以外ほとんど何も出来ない。

・文字列の入出力や数学の関数等、基本的かつ必要性の高い機能は、標準ライブラリと呼ばれる、サブルーチン集として用意されている。 ・printf 関数は stdio.h (= STanDard Input Output Header file) で提供されている。

printf 関数の呼び出し

Page 20: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

C言語のプログラム

• コンパイラにより実行形式に変換する

.c ファイル

.h ファイル .h ファイル

.h ファイル

.c ファイル .c ファイル

Source files

C compiler

Preprocessor

linker

.o ファイル

Object files

.o ファイル .o ファイル

実行ファイル

Executable file

20

Page 21: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

C コンパイラによるコンパイル

• Cygwin の mintty で bash から gcc で行った例

$ ls hello.c $ gcc hello.c $ ls a.exe hello.c $ ./a hello, world

ファイル一覧の表示

コンパイル

ファイル一覧の表示

作成した実行ファイルを実行

21

Page 22: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

C/C++ リファレンス

• http://www.cppll.jp/cppreference/ Windows Help (.chm) 版を入

れておくと便利です。

22

Page 23: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

C 言語の規則

• 各処理の末尾はセミコロン「;」で終端する。

23

hello.c #include <stdio.h> main() { printf("hello, world¥n"); }

1 2 3 4 5 6

これがないとコンパイル時にエラーとなる。

Page 24: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

セミコロン「;」を忘れたエラーの例

• 各処理の末尾はセミコロン「;」で終端する。

24

hello_err.c #include <stdio.h> main() { printf("hello, world¥n") }

1 2 3 4 5 6

本当はここに「;」が必要。

mintty + bash + GNU C $ gcc hello_err.c hello_err.c: 関数 ‘main’ 内: hello_err.c:6:1: エラー: expected ‘;’ before ‘}’ token } ^

Page 25: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

エラーの例

• hello.c の 関数「main」の内にある 6 行目の1文字目にあるトークン「}」の前に「;」が(あることが)予想されますよ、と言っている。

25

mintty + bash + GNU C $ gcc hello_err.c hello_err.c: 関数 ‘main’ 内: hello_err.c:6:1: エラー: expected ‘;’ before ‘}’ token } ^

Page 26: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

C 言語の規則

• { } で複数の処理をまとめる。

26

hello1.c #include <stdio.h> main() { printf("hello"); printf(", world¥n"); }

1 2 3 4 5 6 7

{ } の間に ; で終端

された複数の処理を書いてよい。

Page 27: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

C 言語の規則

• " " で囲まれた部分は文字列

27

hello1.c #include <stdio.h> main() { printf("hello"); printf(", world¥n"); }

1 2 3 4 5 6 7

{ } の間に ; で終端

された複数の処理を書いてよい。

Page 28: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

C 言語の構造

• プログラムは関数の形でまとめる。

28

関数定義の書式 戻り値の型 関数名(引数の宣言, ...) { // 処理; // ... // return 戻り値; }

1 2 3 4 5 6

関数は上記のように定義し、( ) の中に書かれた引数で(呼び出し元や呼び出し先の)他の関数と値の受け渡しを行う。

Page 29: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

C 言語の規則

• プログラムは main 関数から実行される。

29

main.c main() { // ここに処理を書く }

1 2 3 4

mintty + bash + GNU C $ gcc main.c && ./a

これは何もしないで終わるだけのプログラム。

// から行末までと /* から */ までは プログラムとして解釈はされない。 コメントと呼ばれる要素で、

メモや覚書として主に人間が読む際の注釈を書くために使う他、一時的にプログラムの一部を無効にするために使う。

Page 30: プログラミング言語Ⅰ(実習を含む。),web.cc.yamaguchi-u.ac.jp/~okadalab/CLangI2015/CLangI2015_1p.pdf · •キーボードから直接命令を入力して実行する

宿題

• 次回までに以下の事をやっておくこと。

• 教科書の第1章までを読み、指示された操作を試して動作を確認する。

• 不明な点、疑問点についてメモし、次回の授業に持参する。または、本講義の Moodle コース上にある第1週宿題用フォーラムに書き込んでおく。

30