Cプログラミング入門

Cプログラミング入門 第4回 ー プログラム実行・条件分岐 ー 本日の授業内容 •  講義で使うC言語のコンパイラ(GCC)
について •  GCCによるプログラムのコンパイル・
プログラムの実行方法 •  C言語で体格指数BMIを計るプログラ
ムを完成させる 2
GCCについて •  GCC (GNU C Compiler) – 多くのプラットホームに移植されてい
るフリーなCコンパイラ。 – ほとんどのPC-UNIXには標準搭載 – Windowsでも、Cygwinという環境を導入
すると使うことが可能 3
コンパイル・実行(1) XEmacsなどのエディタを使って、C言語のプログラ
ムを作った後に、それをコンパイルして実行。 srcfile.c ⇒ .c : C言語のファイル コンパイル&リンク $ gcc srcfile.c ⇒ a.out という実行ファイルが作成される。 カレントディレクトリに a.out が既にある場合
はそれを上書きしてしまうため良くない。 $ ./a.out 実行 4
コンパイル・実行(2) コンパイルをするときに、オプションをつ
けることによって、作成される実行ファ
イル名を自分で指定することができる。 $ gcc srcfile.c -o exefile ⇒ exefile という実行ファイルが作成される。 $ ./exefile 実行 5
BMIとは? (再) •  身長と体重から肥満度を測定するための指数 BMI指数 = 体重(kg) ÷ 身長(m)2 BMI指数 18.5未満 18.5以上25未満 25以上30未満 30以上 判定 やせぎみ 標準体重 やや肥満 太り過ぎ 6
失敗プログラム(2) $ xemacs bmi2-2.c & #include <stdio.h> int main(void) { int height; double meter_height; printf("Input height>"); scanf("%d", &height); meter_height = height / 100; printf("height..%f(m)\n", meter_height); return 0; } 7
失敗の理由(2) •  int型同士の演算の結果はint型になる(除算の場
合は、通常は切り捨て)。 meter_height = height / 100; int型 •  int型とdouble型の演算はdoubleで行われる。 ⇒ heightをdouble型にするか、100を100.0に変え
る(両方やっても良い)。 8
成功プログラム $ xemacs bmi2-3.c & #include <stdio.h> int main(void) { int height; double meter_height; printf("Input height>"); scanf("%d", &height); この演算はdoubleで実行
される meter_height = height / 100.0; printf("height..%f(m)\n", meter_height); return 0; } 9
BMI指数の計算プログラム $ xemacs bmi3.c & #include <stdio.h> int main(void) { int height; int weight; double meter_height; double bmi; printf("Input height>"); scanf("%d", &height);
printf("Input weight>"); scanf("%d", &weight); meter_height = height / 100.0; bmi = weight / (meter_height * meter_height); printf("BMI..%f\n", bmi); return 0; }
10
if文による条件分岐 •  BMI指数が計算できたとして、以下の場合
分けによって判定したい。 BMI指数 18.5未満 18.5以上25未満 25以上30未満 30以上 判定 やせぎみ (Underweight) 標準体重 (Normal) やや肥満 (Overweight) 太り過ぎ (Obese) 11
if文の形式 比較演算子 if (条件式) { 文の並び } else { 文の並び } 意味 数学 演算子 等しい = == 等しくない ≠ != より小さい < < より大きい > > 以下 ≦ <= 以上 ≧ >= 見やすくする ための字下げ (インデント) 論理演算子 意味 演算子 かつ && または || 12
if文の注意事項
•  else 以下は、必要な場合に書く(文法的には
無くても良い)。
•  if や else に続く中括弧内の文の並びが1文
の場合、中括弧は省略できる。
(例)
if (a > 5) { c = a + b; } if (a > 5) c = a + b; 13
BMIの判定表を素直に解釈すると・・・ if (bmi < 18.5) { printf("Underweight\n"); } if (bmi >= 18.5 && bmi < 25) { printf("Normal\n"); } if (bmi >= 25 && bmi < 30) { printf("Overweight\n"); } if (bmi >= 30) { printf("Obese\n"); } BMI指数 判定 18.5未満 Underweight 18.5以上25未満 Normal 25以上30未満 Overweight 30以上 Obese 14
•  一番最初のif文で「やせぎみ
(Underweight)」と判定された場合でも、
最後のif文まで実行される。 •  最初のif文で「18.5より小さいか?」の
比較と、次のif文で「18.5以上か?」の
比較がある。つまり、同じ数との比較が 2回もある。 ⇒ 無駄が多い 15
else を利用してみると・・・ BMI指数 if (bmi < 18.5) { 18.5未満 printf("Underweight\n"); 18.5以上25未満 } else { 25以上30未満 if (bmi < 25) { 30以上 printf("Normal\n"); } else { if (bmi < 30) { printf("Overweight\n"); } else { printf("Obese\n"); } } } 判定 Underweight Normal Overweight Obese 16
不要な中括弧を省くと・・・ BMI指数 if (bmi < 18.5) { 18.5未満 printf("Underweight\n"); 18.5以上25未満 } else 25以上30未満 if (bmi < 25) { 30以上 printf("Normal\n"); } else if (bmi < 30) { printf("Overweight\n"); } else { printf("Obese\n"); } 判定 Underweight Normal Overweight Obese 17
改行位置と字下げを調整すると・・・ if (bmi < 18.5) { printf("Underweight\n"); } else if (bmi < 25) { printf("Normal\n"); } else if (bmi < 30) { printf("Overweight\n"); } else { printf("Obese\n"); } BMI指数 判定 18.5未満 Underweight 18.5以上25未満 Normal 25以上30未満 Overweight 30以上 Obese このように else if を並べる書き方は、 非常によく使われる。 18
BMIの完成プログラム (実習) •  これまでの話を総合して、身長(cm)と体
重(kg)を入力したら、BMI指数と判定を画
面に出力するプログラムを作成する。 19
次回の予定 •  ループ(繰り返し)・配列 20