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
© Copyright 2024 Paperzz