関数を使って1

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
すず

関数を使って1

#1

投稿記事 by すず » 17年前

以下の問題を教えて下さい。

以下に示すように、身長と体重を実数値として読み込み、BMI指数(肥満の程度を示す指数)と肥満度の判定を表示するプログラムを作成せよ。ここで、BMI指数は身長h(m)、体重w(kg)に対して BMI=w÷h×hと定義され、また肥満度の判定は、以下に基づき行うものとする。
BMI指数 18.5未満 18.5以上25.0未満 25.0以上30.0未満 30.0以上35.0未満 35.0以上40.0未満 40.0以上
判定 やせ 普通 肥満度1 肥満度2 肥満度3 肥満度4

なお、以下のプロトタイプ宣言により示される関数を作成し、これを用いること。
double bmi_index(double height,double weight);
void bmi_judge(double index);
ここで関数bmi_indexは身長heightに、体重をweightに受け取り、BMI指数を計算する関数である。また関数bmi_judgeはBMI指数をindexに受け取り、判定結果を表示する関数である。

一応出来たのはここまでです。
#include <stdio.h>
double bmi_index(double height,double weight);
void bmi_judge(double index);
int main(void)
{
double a,b,bmi,bmi2;
printf("あなたのBMIを求めてみましょう\n");
printf("身長:");
scanf("%lf",&a);
printf("体重:");
scanf("%lf",&b);
printf("<結果>\n");
bmi=bmi_index(a,b);
printf("BMI指数:%f\n",bmi);
printf("肥満度:%f");
bmi_judge(bmi);

return 0;
}

double bmi_index(double height,double weight)
{
double bmi;
bmi=weight/height/height*10000;
return bmi;
}

void bmi_judge(double index)
{
double a,b;

a=bmi_index(index,b);

if(a<18.5)printf("やせ\n");
if(a>=18.5&&a<25.0)printf("普通\n");
if(a>=25.0&&a<30.0)printf("肥満度1\n");
if(a>=30.0&&a<35.0)printf("肥満度2\n");
if(a>=35.0&&a<40.0)printf("肥満度3\n");
if(a>=40.0)printf("肥満度4");

}

よろしくお願いします

バグ

Re:関数を使って1

#2

投稿記事 by バグ » 17年前

確認なのですが、計算式はw÷h×hであっていますか?
この式では、必ず体重の数値になってしまうと思うのですが…

miki

Re:関数を使って1

#3

投稿記事 by miki » 17年前

いくつか問題点があります。

【main関数】
・身長と体重の変数名をわかりやすくする方がよい。
 a, bでは意味がわかりにくい。
・変数bmi2は、定義しただけで使っていない。
 不要ならば、定義しない。
・身長と体重を入力する際の単位が不明。
 bmi_index関数で10000を掛けているので、
 身長はセンチメートル単位での入力を想定している?
 であるなら、printfで単位を明記する方がよい。
・printf("肥満度:%f"); の %f は不要。

【bmi_judge関数】
・引数indexの値によって肥満度を判定するので、
 変数a, bやbmi_index関数の実行は不要。
・すべてのif文で、aによる判定をindexによる判定に変更する。

すず

Re:関数を使って1

#4

投稿記事 by すず » 17年前

すみません。
w÷h÷hです。
よろしくお願いします。

バグ

Re:関数を使って1

#5

投稿記事 by バグ » 17年前

#include <stdio.h> 

double	bmi_index( double height , double weight ); 
void	bmi_judge( double index ); 

int		main( void ) 
{ 
	double	a ,b , bmi; 

	// 入力用の変数は初期化しておく方が望ましいです(^-^)
	a = 0.0;
	b = 0.0;

	printf( "あなたのBMIを求めてみましょう\n" );
	// 身長の入力
	printf( "身長(m):" );
	scanf( "%lf" , &a );
	// 体重の入力
	printf( "体重(kg):" );
	scanf( "%lf" , &b );

	// BMIの計算 & 表示
	printf( "<結果>\n" );
	bmi = bmi_index( a , b );
	printf( "BMI指数:%f\n" , bmi );

	// 肥満度の判定 & 表示
	printf( "肥満度:" );
	bmi_judge( bmi );	// ここで引数にbmiと指定すると…①に続く

	return 0; 
} 

double	bmi_index( double height , double weight ) 
{ 
	double	bmi;

	// BMIの計算
	bmi = weight / height / height;

	// 戻り値はbmiです
	return( bmi );
}

void bmi_judge( double index )	// ①この関数の引数であるdouble型のindexにbmiの値が一時的に代入されます。
{
	// つまり、わざわざ新しい変数を用意しなくても、そのままindexを判定に使用する事ができる訳です。
	if( index < 18.5 ) printf( "やせ\n" ); 
	if( index >= 18.5 && index < 25.0 ) printf( "普通\n" ); 
	if( index >= 25.0 && index < 30.0 ) printf( "肥満度1\n" ); 
	if( index >= 30.0 && index < 35.0 ) printf( "肥満度2\n" ); 
	if( index >= 35.0 && index < 40.0 ) printf( "肥満度3\n" ); 
	if( index >= 40.0 ) printf( "肥満度4" ); 
}

すず

Re:関数を使って1

#6

投稿記事 by すず » 17年前

なんとなく分かりました。ありがとうございました。
またよろしくお願いいます。

管理人

Re:関数を使って1

#7

投稿記事 by 管理人 » 17年前

一連の質問・回答が終わってしまってましたね^^;
回答が遅くてごめんなさい;
mikiさん、バグさん、keichanさん、boxさん、お答えありがとうございます^^
すずさん、BMIの計算はきっと
体重÷身長の二乗という計算から
体重/(身長*身長)
を間違ったんだと思います。
割り算は逆数の掛け算なので、かっこをはずすとかけざんと割り算は、割り算になります^^

閉鎖

“C言語何でも質問掲示板” へ戻る