関数1

課題1〜5は、身長と体重を入力させて、肥満度を判定する指標である BMI (Body Mass Index) を計算させ、 最終的に肥満かどうかを判定する一連のプログラムが示されている。 最終的なプログラムは複数の関数から構成されているが、 段階的にプログラムを完成させていくので、必ず課題1から順番に挑戦するよう に。

課題1

下記には、身長と体重を入力させて、BMIを計算させる プログラムが示されている。下記のプログラムでは、 bmi_calという関数を定義し、BMIの計算を行うように記述されている。 下記のプログラムをfunc1.cとして作成し、 正常に動作するか確認せよ。

/* 
    BMI (Body Mass Index) の計算方法:関数の利用
*/

#include <stdio.h>


double bmi_cal(double h, double w) {

  /* BMI = 体重(kg) / 身長(m) / 身長(m) */

  return w/h/h;
}


int main(void) {

  double height, weight, bmi;

  printf("身長(m)と体重(kg)を入力してください ");
  scanf("%lf%lf", &height, &weight);

  /* BMIの計算 */
  bmi = bmi_cal(height, weight);
  
  printf("身長%5.2f m、体重%6.2f kgの人のBMI = %6.2f\n", height, weight, bmi);  

  return (0);
}
(実行例)
hp3225[susaki]501:~/program% 
hp3225[susaki]501:~/program% ./a.out
身長(m)と体重(kg)を入力してください 1.65 70
身長 1.65m、体重 70.00kgの人のBMI =  25.71
hp3225[susaki]502:~/program% 

課題2

下記には、身長と体重を入力させて、BMIだけでなく標準体重も計算させる プログラムが示されているが、一部は********で隠されている。 隠されている部分を補った上で、下記のプログラムをfunc2.cとして作成し、 正常に動作するか確認せよ。

注意: 下記のプログラムでは、標準体重の計算も関数(std_weight)で定義してい る。main関数内では、std_weight関数からの返り値をsweightという変数で 受けている。

/* 
    BMI (Body Mass Index) の計算方法:関数の利用
*/

#include <stdio.h>

double bmi_cal(double h, double w) {

  /* BMI = 体重(kg) / 身長(m) / 身長(m) */

  return w/h/h;
}


double std_weight(double h) {

  /* 標準体重(kg) = 身長(m) * 身長(m) * 22 */

  return h*h*22; 
}


int main(void) {

  double height, weight, bmi, sweight;

  printf("身長(m)と体重(kg)を入力してください ");
  scanf("%lf%lf", &height, &weight);

  /* BMIの計算 */
  bmi = bmi_cal(height, weight);
  
  printf("身長%5.2f m、体重%6.2f kgの人のBMI = %6.2f\n", height, weight, bmi);  

  /* 標準体重の計算 */
  sweight = std_weight(***********);

  printf("身長%5.2f mの人の標準体重 = %6.2f kg\n", height, sweight);  

  return (0);
}
(実行例)
hp3225[susaki]501:~/program% 
hp3225[susaki]501:~/program% ./a.out
身長(m)と体重(kg)を入力してください 1.60 68.5
身長 1.60m、体重 68.50kgの人のBMI =  26.76
身長 1.60mの人の標準体重 =  56.32kg
hp3225[susaki]502:~/program% 

課題3

下記のプログラムは、本質的には課題2のプログラムfunc2.cと同じであるが、 関数の返り値などが異なる。両者の相違点を理解しながら、 下記のプログラムをfunc3.cとして作成し、正常に動作するか確認せよ。

/* 
    BMI (Body Mass Index) の計算方法:関数の利用
*/

#include <stdio.h>

void bmi_cal(double h, double w) {

  /* BMI = 体重(kg) / 身長(m) / 身長(m) */

  printf("身長%5.2f m、体重%6.2f kgの人のBMI = %6.2f\n", h, w, w/h/h);  
}


void std_weight(double h) {

  /* 標準体重(kg) = 身長(m) * 身長(m) * 22 */

  printf("身長%5.2f mの人の標準体重 = %6.2f kg\n", h, h*h*22);  
}


int main(void) {

  double height, weight;

  printf("身長(m)と体重(kg)を入力してください ");
  scanf("%lf%lf", &height, &weight);

  /* BMIの計算 */
  bmi_cal(height, weight);

  /* 標準体重の計算 */
  std_weight(***********);


  return (0);
}
(実行例)
hp3225[susaki]501:~/program% 
hp3225[susaki]501:~/program% ./a.out
身長(m)と体重(kg)を入力してください 1.60 68.5
身長 1.60m、体重 68.50kgの人のBMI =  26.76
身長 1.60mの人の標準体重 =  56.32kg
hp3225[susaki]502:~/program% 

課題4

今度は、課題2のfunc2.cに、 BMIを利用して肥満かどうかを判定する関数messageを追加している。 ********で隠されている部分を補った上で、 下記のプログラムをfunc4.cとして作成し、正常に動作するか確認せよ。

参考文献:
BMIによる判定: http://www.fuchu.hiroshima.med.or.jp/seikatsu2/cholesterol/1-8.html

/* 
    BMI (Body Mass Index) の計算方法:関数の利用
*/

#include <stdio.h>

double bmi_cal(double h, double w) {

  /* BMI = 体重(kg) / 身長(m) / 身長(m) */
  
  return w/h/h;
}


double std_weight(double h) {

  /* 標準体重(kg) = 身長(m) * 身長(m) * 22 */

  return h*h*22;
}


void message(double h, double w, double bmi, double sweight) {

  printf("身長%5.2f m、体重%6.2f kgの人のBMI = %6.2f\n", h, w, bmi);  
  printf("身長%5.2f mの人の標準体重 = %6.2f kg\n", h, sweight);

  if (bmi < 18.5) {
    printf("判定:低体重です\n");

  } else if (bmi < 25) {
    printf("判定:普通体重です\n");

  } else if (bmi < 30) {
    printf("判定:肥満(1度)です\n");

  } else if (bmi < 35) {
    printf("判定:肥満(2度)です\n");

  } else if (bmi < 40) {
    printf("判定:肥満(3度)です\n");

  } else {
    printf("判定:肥満(4度)です\n");
  }
}

int main(void) {

  double height, weight, bmi, sweight;

  printf("身長(m)と体重(kg)を入力してください ");
  scanf("%lf%lf", &height, &weight);

  /* BMIの計算 */
  bmi = bmi_cal(height, weight);

  /* 標準体重の計算 */
  sweight = std_weight(***********);

  /* 肥満度の判定 */
  message(********************);

  return (0);
}
(実行例)
hp3225[susaki]501:~/program% 
hp3225[susaki]501:~/program% ./a.out
身長(m)と体重(kg)を入力してください 1.60 68.5
身長 1.60m、体重 68.50kgの人のBMI =  26.76
身長 1.60mの人の標準体重 =  56.32kg
判定:肥満(1度)です
hp3225[susaki]502:~/program% 

課題5

最後は、課題4のfunc4.cを元に、Ctrl+dで入力を中止するまで、繰り返し BMI、標準体重、肥満かどうかの判定を行うプログラムを作成したい。 趣旨を満足するプログラムをfunc5.cとして作成し、 実行例のように正常に動作するか確認せよ。

参考:while文かfor文の無限ループを使う

(実行例)
hp3225[susaki]501:~/program% 
hp3225[susaki]501:~/program% ./a.out

[ 1人目] 身長(m)と体重(kg)を入力してください 1.80 78
身長 1.80m、体重 78.00kgの人のBMI =  24.07
身長 1.80mの人の標準体重 =  71.28kg
判定:普通体重です

[ 2人目] 身長(m)と体重(kg)を入力してください 1.56 70
身長 1.56m、体重 70.00kgの人のBMI =  28.76
身長 1.56mの人の標準体重 =  53.54kg
判定:肥満(1度)です

[ 3人目] 身長(m)と体重(kg)を入力してください 1.60 90
身長 1.60m、体重 90.00kgの人のBMI =  35.16
身長 1.60mの人の標準体重 =  56.32kg
判定:肥満(3度)です

[ 4人目] 身長(m)と体重(kg)を入力してください ← Ctrl + d
hp3225[susaki]502:~/program% 

須ア純一 京都大学大学院 工学研究科社会基盤工学専攻 空間情報学講座
[C言語 演習問題トップページ] [須ア純一ホームページ]