前回までの復習 初回 環境の確認 ubuntu で C のコンパイルができるか ? 前回 hello world プログラム 画面に"Hello, World" というメッセージを出力するプログラム 完全に動く意味のあるプログラム => プログラムの基本構造がわかる(おまじないの部分がわかる) これを、自分の作りたいプログラムのスタートにできる 「コンパイル」 「コンパイル」とは何か (what) 高級プログラミング言語(人間にわかりやすい言語)から、機械語(計算機がわかる唯一の言語)に翻訳する事 (why) 機械語は人間にわかりずらい(人間は書きたくない) 一方、計算機は、機械語しか理解(実行できない):そのままでは、意図が通じないない =>コンパイルが必要 (how to) ubuntu 上で cc コマンドで、コンパイルを行う => 実際の方法を説明した 課題 画面に「Hello, 自分の名前」を出力するプログラムを作る C言語で記述されたプログラムを実行する手順 # 以下、作業は、すべて ubuntu 1. コンパイル : xxxx.c -> xxxx.o cc -c xxxx.c # xxxx.c をコンパイルしてください 2. リンク : xxxx.o -> xxxx.exe cc -o xxxx.exe xxxx.o # 実行ファイル xxxx.exe を xxxx.o を材料に作くってください 3. 実行 : xxxx.exe を指定して、プログラムを実行する ./xxxx.exe # 実行ファイル xxxx.exe を実行してください C 言語でのプログラムの書き方(順接) # p-001.c 17 行目の 「printf ...」が「何かをしている」記述 => この「何かをしている記述」を「命令」と呼ぶ 順接(what) 複数の命令をつないで、その順に実行する命令を作る事 # (複数の)命令から(新しい)命令を作る仕組み # A, B が命令なら、 「A B」も命令 (how) 命令を並べるだけ(並べた順に実行される) # cf. 関数計算 # sin(cos(x)) # 式の計算 # 1 + 2 * 3 プログラムは、計算機に対して、まとめて命令を与える記述 => 複数の命令を与える場合 => 命令を並べればよい 順接 : 命令を並べる事 => 複数の命令を指定するだけでなく、するだけでなく、その順番も指定します 複数の命令から、新しい命令を作る、ひとつの方法が、順接 => 新しい命令が作れるのだから、それに名前を付けたい 「名前を付ける」事の重要さ(その 1) 「意味が分かるようになる」」 p-001.c の 17 行目に、名前「hello」をつけたい how to 1. main の前にその名前を書く 2. 名前の前に「void」 名前の後に 「(void)」をつける 3. さらにその後ろに 「{」と「}」を追加 4. 「{」と「}」の間に、名前つけたい命令を書く 名前を付けた命令を実行したい 5. 「名前();」とすればよい このように、命令に名前を付けたものを C 言語では、 「(C 言語)関数」(数学の「関数」とはちょっと違う) 命令に対して名前を付ける事 => 関数の定義 定義された関数を名前を使って利用する事 => 関数呼び出し 関数 (what)命令に名前をつけたもの (why) (その一つ) わかりやすい => 名前は「自分で決められる」ので、わかりやすい 複数の命令に対して一つの名前による関数呼び出しで実行ができる たくさん命令を少ない指示で実行可能になる # C 言語でプログラミンは、結局は、たくさんの関数を定義する事になる できるだけ、関数を作る習慣を身に着ける (how to) : 関数の利用法 関数を定義して、その名前で呼び出す 関数の定義 : main の上に void 名前 (void) { 名前を付けたい命令 } 関数の呼びだし 名前 () ; ! Hello World プログラムに ! printfがある ! <= これも、「関数」です ! ただし、違いが二つ ! 1. 定義が見当たらない ! => 別のところで定義されている ! <= それを、あとからくっつける必要がある ! => そのくっつける作業がリンク ! 2. printf では () の中に何か書く ! => これは、「関数実引数」なのだが、これは、来週 == コマンドの自動化(その 1) 1. shell script (what) ubuntu で、shell に対して、行うコマンドを記録したもの ! 「コマンド」ってなに ? => これは詳しくはいわない ! cc とか ./.. などだとおもってください。 作業内容をファイルに記述して、そのファイルを指定するだけで、自動的、その作業がなされる (why) ubuntu での作業を自動化したい (how) 作業内容をそのまま、ファイルに記録すればよい ./ファイル名 とすれば、その内容が実行される [注意] c-001.sh を winscp でコピーした場合は chmod +x c-001.sh とする必要がある shell script の中で 「$1」かくと、コマンドを実行するときに、 コマンドの後ろにかいた文字列に置き換わる