Ex14

From Prog0

Jump to: navigation, search

演習第14回

Contents

演習問題

以下の問題を解いて期限内に解答を提出してください。

出席確認

演習時間中に出席確認をLMS上の「演習出欠」で行ってください。出席確認用のパスワードは演習時間のどこかのタイミングで提示されます。


A問題

A-1 BMI計算

ファイル名: ex14a1.c

身長と体重の情報を読み込み、個々のボティマス指数(BMI)と肥満度分類を判定する プログラムを、以下の仕様にもとづき作成しなさい。


[仕様]

  • 身長(cm)と体重(kg)は空白で区切って入力する。
  • 入力可能な最大の人数はマクロMAXで定義する。
  • MAXの値は12とする。
  • 入力はControl+dで終えることができる。
  • 入力後に身長と体重からBMI を計算する。
    • BMI の計算式は、体重(kg)÷(身長(m)の二乗)である。
  • 日本肥満学会が定義しているBMIを用いた肥満度分類に基づく肥満度の判定を行う。
  • 肥満度の判定のために、BMI を引数として、肥満度分類結果を戻り値とするbmi_hantei関数を定義して使用すること。
    • 肥満度分類とbmi_hantei関数の戻り値の定義は別表を参照すること。
  • 関数 bmi_hantei を利用して実行例のようにその人の状態を表示すること。
  • 最後に、肥満度分類が「普通体重」となった人の割合を表示する。割合はパーセントで示し、小数点以下第 1 位を四捨五入した値を表示すること。
    • double型の値をint型にキャストしたり、表示時にprintfの書式を"%2.0f"などのようにする方法では正しく四捨五入になることは保証されていないため、割合の四捨五入を適切に行う処理を組み込むこと。


日本肥満学会の肥満度分類とbmi_hantei関数の戻り値
BMI 肥満度分類 bmi_hantei関数の戻り値
BMI<18.5 低体重 -1
18.5≦BMI<25 普通体重 0
25≦BMI<30 肥満(1度) 1
30≦BMI<35 肥満(2度) 2
35≦BMI<40 肥満(3度) 3
40≦BMI 肥満(4度) 4


[実行例(途中でControl+dにより入力を終えた場合)]

% ./a.out 
身長(cm)と体重(kg)を空白で区切って入力してください。
入力可能な最大の人数は 12 人です。
175.4  64.2
175.7  53.2
180.3  62.1
^D
        BMI  肥満度分類
 1 人目 20.9 普通体重
 2 人目 17.2 低体重
 3 人目 19.1 普通体重

肥満度分類が普通体重である人の割合は 67 パーセントです。

[実行例(MAX人分のデータを入力した場合)]

% ./a.out 
身長(cm)と体重(kg)を空白で区切って入力してください。
入力可能な最大の人数は 12 人です。
175.4  64.2
175.7  53.2
180.3  62.1
163.1  42.7
164.7  86.5
175.4  64.2
175.7  53.2
180.3  62.1
163.1  42.7
164.7  86.5
175.4  64.2
175.7  53.2

        BMI  肥満度分類
 1 人目 20.9 普通体重
 2 人目 17.2 低体重
 3 人目 19.1 普通体重
 4 人目 16.1 低体重
 5 人目 31.9 肥満(2度)
 6 人目 20.9 普通体重
 7 人目 17.2 低体重
 8 人目 19.1 普通体重
 9 人目 16.1 低体重
10 人目 31.9 肥満(2度)
11 人目 20.9 普通体重
12 人目 17.2 低体重

肥満度分類が普通体重である人の割合は 42 パーセントです。

B問題

B-1 三つ子素数

ファイル名: ex14b1.c

連続した4つの奇数の中に素数が3つある場合、それら3つの素数を三つ子素数と定義する。ただし、連続した3つの奇数には必ず3の倍数が含まれるので、連続した3つの奇数だけで三つ子素数になることはない。

以下に、三つ子素数の例を示す。

  1. (5,7,9,11) という連続した奇数のうち、9 を除いたものは素数なので、(5,7,11) は三つ子素数である。
  2. (7,9,11,13) という連続した奇数のうち、9 を除いたものは素数なので、(7,11,13) も三つ子素数である。


以下の仕様を満たすように、200以下の三つ子素数の組をすべて求め、その組を小さい順に表示するプログラムを作成しなさい。

  1. 調べる素数の上限として、マクロ NUM (値は200) を定義し、全ての素数が NUM 以下であるような三つ子素数を検出する。
  2. 引数(int型)が素数である時に真 (1) 、素数でない時は偽 (0) を返す素数判定関数 int isPrime(int a) を定義して使用する。
  3. 素数 2 と 3 は三つ子素数に含まれないので、探索する奇数は 5 以上とする。

[実行例]

% ./a.out
200 以下の三つ子素数の組は次の通り:
三つ子素数{   5,   7,  11}
三つ子素数{   7,  11,  13}
三つ子素数{  11,  13,  17}
三つ子素数{  13,  17,  19}
三つ子素数{  17,  19,  23}
三つ子素数{  37,  41,  43}
三つ子素数{  41,  43,  47}
三つ子素数{  67,  71,  73}
三つ子素数{  97, 101, 103}
三つ子素数{ 101, 103, 107}
三つ子素数{ 103, 107, 109}
三つ子素数{ 107, 109, 113}
三つ子素数{ 191, 193, 197}
三つ子素数{ 193, 197, 199}
%

素数判定についてヒントが必要な場合はこちらをクリックしてください。

Extra問題

E-1 三角形の面積

ファイル名: ex14e1.c

3点の座標 (x1,y1),(x2,y2),(x3,y3) が入力されたとき、 この3点を頂点とする三角形の面積を求めるプログラムを作成しなさい。

[実行例]

%./a.out 
3点の座標 (x0, y0), (x1, y1), (x2, y2) を入力してください
x0, y0: 0 0
x1, y1: 7 8
x2, y2: 13 29 
三角形の面積: 49.500000 
%./a.out 
3点の座標 (x0, y0), (x1, y1), (x2, y2) を入力してください
x0, y0: -1.5 4.3
x1, y1: 5.2 7.8
x2, y2: 2.1 -3.6 
三角形の面積: 32.765000

課題提出上の注意事項

解答ファイルはmenuコマンドを使って提出してください。以下のようにmenuコマンドを実行し、表示されるメッセージに沿って操作すること。

% ~prog0/bin/menu

menuコマンドは、解答ファイルが ~/Prog0/Ex## のディレクトリに指定されたファイル名で置かれているものとして処理します。正常に提出された場合は ○ が、何らかのエラーが生じた場合は × が表示されます。

解答の提出期間は以下のとおりです。

問題提出受付開始提出〆切
A問題 演習日の6日前の午後9時演習終了時刻
B, Extra問題 演習日の6日前の午後9時演習日の6日後の午後9時

提出は〆切前であれば何度でもやり直すことができます。再提出すると、前に提出したファイルは新しい内容で上書きされます。

Personal tools