使い方 ①ソースプログラムの入力 今回の講義では、C++言語用の統合環境ソフトと いわれるプログラムを利用します。デスクトップに ある CPad for C++のアイコン(右参照)をダブルクリ ックしましょう。(同じアイコンで Java_pad とかい てあるものもありますので気をつけてください。)これで、起 動します。統合環境を立ち上げると、エディタ部とメッセー ジ部をもった画面が出てきます。エディタ部はソースを入 力・編集する部分で、メッセージ部はコンパイラ等のメッセ ージを表示します。 ではエディター部に次のとおり入力しましょう。 ex01.c #include <stdio.h> int main(void) { printf("Hello, world¥n"); return (0); } 入力が終われば、「ファイル」メニューから「名前をつけて 保存」を選んで保存してください。このとき、「保存する場 所」を変更するのを忘れないでください。ファイル名は必ず 「ex01.c」としてください。適当なフォルダ(例えば応プ ロ)を作成して、その中に保存しましょう。 ②コンパイル・実行 次にこれをコンパイルして実行形式のファイルを作成します。 アプリケーションの三角のボタン(右図参照)を押します。そうす ると、メッセージ部に次のように表示され(左)、プログラムがコ ンパイルされたものが、実行されます(右)。 エディタ部 メッセージ部
タイプミスなどがなければこのように実行されます。もし、タイプミスなどがありましたらエラーが 出ます。このときには、ソースプログラムに戻って、間違いを直してください。たとえば、「printf」 とすべきところを「print」としてしまうと、左のようなダイアログが出て、メッセージ部につぎの ようなエラーが出ます。 「警告 W8065 ex01.c 4:プロトタイプ宣言のない…」の部分のコロンの前の数字 4 がエラーのあ る行を意味しています。このときにはミスがある可能性があります ので、自分で調べてください。 「ソースファイルを作って、コンパイル、そして実行する」という流れを必ず覚えていてください。
講義の Web
http://hakuto.mis.ous.ac.jp/~yanagi/aprog2009/
講義で配布した資料をここに全ておいておきます。紛失、欠席したとには自分で印刷しておいてくだ さい、。また、レポート提出もこのページから行ってもらいます。応用プログラミング I・II
1.
基本型と演算子
1.1 基本型 「プログラミング基礎」では大きく分けて整数型(int) と実数型(double) の2通りだけを使っ ていました。しかし、実際は C 言語で使われる基本型は次のものがあります。 char 文字型・8 ビット(=1 バイト)整数型 int 整数型 float 単精度浮動小数点型 double 倍精度浮動小数点型 前の2つが整数の値を保持するための型、後2つが実数の値を保持するための型です。もちろん、実 数は正確な値が保持できるわけないので、近似値となります。 この基本型に次のような修飾子をつけることができます。 signed 符号付きを表す(char, int)unsigned 符号なしを表す(char, int) short 短い整数を表す(int)
long 長い整数を表す(int), 拡張精度を表す(double)
「短い」とか「長い」とかありますが、これに関しては C 言語の規格書で定義されていないためで す。short より long が長いビット数を持つということだけが規定されています。実際、この大き さはシステム・処理系によって異なります。 今回使っている Borland C++ Compiler では、次のようになっています。 short int = 16ビット = 2 バイト long int = 32ビット = 4 バイト では、「プログラミング基礎」で使った int は何ビットでしょうか? sizeof という型の大きさ (バイト) を調べる演算子がありますのでそれを使って調べてみましょう。 ex02a.c #include <stdio.h> int main(void) { int x; printf("%d¥n",sizeof(x)); return (0); }
ex02b.c #include <stdio.h> int main(void) { printf("%d¥n",sizeof(int)); return (0); }
結果をみると、4 バイトですから int = long int となっています。しかし、これは Borland C++ Compilerの仕様です。単に int としたとき、それを short int とみなすか long int とみなすか はシステムやコンパイラで異なります。
まとめると表 1 のような型が利用できます。
表 1 基本データ型
表記 ビット数 値の範囲
char, signed char 8ビット –128 ~ 127 unsigned char 8ビット 0 ~ 255 short, signed short,
short int,
signed short int
16ビット –32768 ~ 32767 unsigned short,
unsigned short int 16ビット 0 ~ 65535 int, signed int,
long, signed long, long int,
signed long int
32ビット -2147483648 ~ 2147483647
unsigned int, unsigned long, unsigned long int
32ビット 0 ~ 4294967295 float 32ビット 0, 1.210-37 ~ 3.410+38, -1.210-37~ -3.410+38 double 64ビット 0, 2.210-307 ~ 1.710+308, -2.210-307 ~ -1.710+308 long double 80ビット 0, 2.210-4931 ~ 1.110+4932, -2.210-4931 ~ -1.110+4932
1.2 演算子の優先順序 「プログラミング基礎」ではいくつかの演算子を習ってきました。このまとめをします。次のプロ グラムを実行するとどのような数値が表示されるでしょうか? ex03.c 1 :#include <stdio.h> 2 : 3 :int main(void) { 4 : int x, y; 5 : 6 : x = 1 + 2 * 3; 7 : y = 5 - 3 + 1; 8 : printf("x=%d, y=%d¥n",x,y); 9 : 10 : y = 5 +- x; 11 : printf("x=%d, y=%d¥n",x,y); 12 : 13 : y = x == 5; 14 : printf("x=%d, y=%d¥n",x,y); 15 : 16 : y = x = 5; 17 : printf("x=%d, y=%d¥n",x,y); 18 : 19 : return(0); 20 :} 10 行目ですが、「+-」という演算子は存在しません。「+」と「-」にわけて考えます。後の「-」は 負の記号を表す「-」です。つまり「y = 5 + (-x)」と同じ意味になるのです。13 行目は「x == 5」 を計算して、その結果を y に代入しているのです。同様に 16 行目は「x = 5」を計算して、その結 果を y に代入しています。 普通の加減乗除と同様に、C 言語でも演算に優先順位が定まっています。式はその優先順位の順序 で行われるのです。まだ習っていない演算子もありますが、まとめておきます。 なお、結合度というのは同じ優先順位のものがあったとき、それが右から計算されるか左から計算 されるかを表しています。実際、7 行目は「y = (5 - 3) + 1」と計算され、16 行目は「y = (x = 5)」と計算されています。この順序にも気をつけておきましょう。
演算子のまとめ 優先順位 演算子 名称 結合性 1 ( ) [ ] . -> ++ -- 関数呼出し演算子 添字演算子(配列) . 演算子(構造体・共用体) -> 演算子(構造体・共用体) 後置増分演算子 後置減分演算子 左 2 ++ -- sizeof & * + - ~ ! 前置増分演算子 前置減分演算子 sizeof演算子 単項 & 演算子(アドレス) 単項 * 演算子(間接演算子・ポインタ) 単項 + 演算子(符号設定) 単項 - 演算子(符号設定) ~ 演算子(補数) 論理否定演算子 右 3 (型) キャスト演算子 右 4 * / % 2項 * 演算子(積) 2項 / 演算子(商) 2項 % 演算子(剰余) 左 5 + - 2項 + 演算子(和) 2項 - 演算子(差) 左 6 << >> << 演算子(左シフト) >> 演算子(右シフト) 左 7 < <= > >= < 演算子(大小比較) <= 演算子(大小比較) > 演算子(大小比較) >= 演算子(大小比較) 左 8 == != == 演算子(等号) != 演算子(不等号) 左 9 & ビット単位の AND 演算子 左 10 ^ ビット単位の排他的 OR 演算子 左 11 | ビット単位の OR 演算子 左 12 && 論理積演算子 左 13 || 論理和演算子 左 14 = += -=他 単純代入演算子 複合代入演算子 右
練習問題 1.1 二つの整数を入力してもらい、その二つの整数の和、差、積、商、剰余を表示するプログラムを作成 しなさい。 ex04.c ________ <_______> int ____(____) { int ___, ___; printf("一つ目の整数を入力してください¥n"); _____("%d", &___); printf("二つ目の整数を入力してください¥n"); _____("%d", &___); printf("__と__の和は__です。¥n", ___, ___, ___ _ ____); printf("__と__の差は__です。¥n", ___, ___, ___ _ ____); printf("__と__の積は__です。¥n", ___, ___, ___ _ ____); printf("__を__で除算したときの商は__です。¥n", ___, ___, ___ _ ____); printf("__を__で除算したときの剰余は__です。¥n", ___, ___, ___ _ ____); return (0); } 練習問題 1.2 x, yの連立方程式