質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

Q&A

解決済

5回答

4522閲覧

計算式が違うのでしょうか。。

bjbjeknr

総合スコア26

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

0グッド

0クリップ

投稿2016/12/04 00:43

編集2016/12/04 01:24

身長 [cm] と体重 [kg] を標準入力して BMI を計算するプログラムを作りたいのですが
BMI の値によって「やせ型」「標準型」「肥満型」の判
断と表示を行う(この部分もユーザー関数で行う)
• やせ型: BMI が 18.5 未満
• 標準型: BMI が 18.5 以上、25 未満
• 肥満型: BMI が 25 以上
とし、

実行例

% a.out 身長 [cm] ? -172 身長 [cm] ? 172 体重 [kg] ? 63 身長 = 172 [cm] 体重 = 63 [kg] BMI = 21.3(標準型)

としたいのですが、私のコードですと、

身長 [cm] ? -172

身長 [cm] ? 172
体重 [kg] ? 63
身長 = 172 [cm]
体重 = 63 [kg]
BMI = 0.0 (標準型)

となり、
(1)BMIの値が違う
(2)また、BMIが0.0なのに”標準型”となっている
という問題が発生します。。

※BMIの求め方は
BMI = 体重 [kg] / (身長 [m] ) 2

どのように書けばいいのでしょうか。

私のコードです。
どのように書けばいいのでしょうか。

私のコードです。

C

1#include <stdio.h> 2 3double bmi_keisan(int height, int weight) /*このユーザー関数でBMIの計算を行う*/ 4{ 5 6 double body_mass_index; 7 8 body_mass_index=(weight)/(height)*(height); /*BMIの求め方*/ 9 10 return (body_mass_index); /*BMIの値を返す*/ 11} 12 13int main(void) 14{ 15 int height; 16 int weight; 17 double bmi; 18 char* result; 19 do{ 20 printf("身長 [cm] ? "); 21 scanf("%d",&height); 22 }while(height<0); /*身長は0よりもおおきい*/ 23 24 do{ 25 printf("体重 [kg] ? "); 26 scanf("%d",&weight); 27 }while(weight<0); /*体重は0よりもおおきい*/ 28 29 printf("身長 = %d [cm]\n",height); 30 printf("体重 = %d [kg]\n",weight); 31 32 bmi = bmi_keisan(height,weight); /*ユーザー関数の呼び出し*/ 33 if(bmi>=18.5 || bmi<25){ /*結果の判定*/ 34 result = "標準型"; 35 }else if(bmi>=25){ 36 result = "肥満型"; 37 }else{ 38 result = "やせ型"; 39 } 40 41 printf("BMI = %.1lf (%s) \n",bmi,result); /*結果の表示*/ 42 43 return 0; 44}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

granfa_yuzo

2016/12/04 00:46

質問者のコードを追記してください。
granfa_yuzo

2016/12/04 00:47

失礼しました。質問者様のコードを追記してください。
guest

回答5

0

計算式が違います
BMI= 体重kg ÷ (身長m)2
なので身長は1.7になります
63/170^2=0.002179931
63/1.7^2=21.799307958

これでcm単位だと分母が大きくなりすぎてbmiが小さくなり、表示するときに下一桁までにしているので何も表示されていないように見えるのでしょう

入力者にm単にの入力を乞うか、一回プログラムの中でheight/100をすれば治るでしょう。

body_mass_index = weight / (height * height)等は他の質問者の解答を参考にすれば十分かと

投稿2016/12/04 02:43

sakakendo0321

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bjbjeknr

2016/12/04 03:09

わかりやすい説明有難うございました。助かりました。
guest

0

rkhsさん、archiverさんのおっしゃる点に加えて、

c

1body_mass_index=(weight)/(height)*(height);

この計算式、計算順序が意図したものと違うと思われます。また、変数名を () でくくる必要はありませんよ。なので、形としては

c

1body_mass_index = weight / (height * height)

とするのが正しいと思います。
あとは計算をintでしてしまっている点、cmをmに直していない点を修正すれば、BMIが計算できます。

投稿2016/12/04 02:31

Eki

総合スコア429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bjbjeknr

2016/12/04 03:09

わかりやすい説明有難うございました。助かりました。
guest

0

ベストアンサー

タイトル見てintで割り算しているんだろうなと思ったらその通りでした。

あとそこを直しても、
(weight)/(height)*(height)

これは

(weight / height) * heightと解釈されるので
= weightです。

投稿2016/12/04 02:16

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bjbjeknr

2016/12/04 03:09

わかりやすい説明有難うございました。助かりました。
guest

0

コードはこの質問に載せてるものですよね。ここを見ている人たちは逐一あなたの質問を追ってるわけではないので、コードをきちんと掲載するか、関連質問であることを示してください。

で、回答ですが、計算についてはrkhsさんの指摘の通りです。また、BMIを計算する時は身長はセンチメートルではなくて、メートルで計算するはずです。
(センチメートルで計算したら、分子に対して分母がかなり大きい数になって、解としてはかなり小さい数になります。となるので、変数の型も…)
それと、判定部分ですが、

C

1if(bmi>=18.5 || bmi<25){

ここ、OR判定になっています。これだとbmiが18.5以上か25未満となり、後の25未満に該当するので、「標準」と判定されてしまいます。となると、どう判定するかは…。
(おそらく、課題でしょうから明記は避けます。難しい問題ではないので、自分で考えてみましょう)

投稿2016/12/04 01:09

archiver

総合スコア1557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bjbjeknr

2016/12/04 03:09

わかりやすい説明有難うございました。助かりました。
guest

0

int型で計算してませんか?

投稿2016/12/04 00:47

WathMorks

総合スコア1582

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bjbjeknr

2016/12/04 03:09

有難うございました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問