ID非公開

2015/12/6 15:31

22回答

構造体についての質問です。bmi値を関数を呼び出して計算したいです。 構造体を用いてBMI値を表示させるためのプログラムを教えて下さい。

構造体についての質問です。bmi値を関数を呼び出して計算したいです。 構造体を用いてBMI値を表示させるためのプログラムを教えて下さい。 #include <stdio.h> #include <string.h> struct bmi{ char name[20]; double height; double weight; double bmi; }; struct employee bmi(struct employee bmi); int main(void){ struct employee seData; strcpy(seData.name,"田中太郎"); seData.height = 160; seData.weight = 56; seData.bmi; bmi(seData.bmi); printf("名前:%s\n",seData.name); printf("身長:%.2lf\n",seData.height); printf("体重:%.2lf\n",seData.weight); printf("BMI値:%.2lf\n",seData.bmi); return 0; } struct employee bmi(struct employee n){ struct employee wk; n.height /=100; wk.bmi =n.weight/(n.height*n.height); return wk; }

C言語関連180閲覧xmlns="http://www.w3.org/2000/svg">50

ベストアンサー

0

4行目 【修正前】struct bmi{ 【修正後】struct employee{ 構造体のタグ名ですけど、どうやら employee が正しそうですね。構造体として bmi と employee の2つがあるのかと思ったのですけど、bmi って、ひとつの数値ですよね。「構造」とか無いわけだから。で、employee だけで良いと気付きました。 10行目 【修正前】struct employee bmi(struct employee bmi); 【修正後】double bmi(struct employee bmi); bmi を計算する関数ですが、構造体を返すということは無いかと。bmi の数値を返せば良いんですよね。 17行目 【修正前】seData.bmi; 【修正後】seData.bmi = 何かの書き間違いだと思います。次行で bmi 関数を呼び出しているのでその結果を受け取ることにします。セミコロン(;)は書きませんからね。 18行目 【修正前】bmi(seData.bmi); 【修正後】bmi(seData); bmi 関数には構造体を渡すかたちになっています。bmi の数値ではなくて、その元ネタになる構造体データ丸ごとです。通常、構造体をそのまま渡すことはしないのですけれども、とりあえそのままとしました。 26行目 【修正前】struct employee bmi(struct employee n){ 【修正後】double bmi(struct employee n){ 10行目の修正と同じ話です。 30行目 【修正前】return wk; 【修正後】return wk.bmi; これもそうなんですけれども、bmi の計算結果を返せば良いわけ。構造体全体を返したらダメですよね。wk の中って、bmi だけしか有効なデータが無い状況ですので。 《備考》 bmi 関数ですけど、 void bmi(struct employee* n){ const double height = n->height / 100; n->bmi = n->weight / (height * height); } とか、 double bmi(double height, double weight){ height /= 100; return weight / (height * height); } とかの形が良いのではないかと思いました。

ID非公開

質問者

2015/12/6 18:09

適切な指導ありがとうございます。 構造体のポインタが理解できていないのですが、例えば関数でbmi値以外に身長-体重や身長の2乗を計算する時には、関数で計算した値をポインタで返したいのですが、よく分かりませんでした。よろしければ どのようになるか教えて下さい。

ThanksImg質問者からのお礼コメント

詳しく解説して頂き分かりやすかったです。 ありがとうございました。

お礼日時:2015/12/8 17:17

その他の回答(1件)

0

ID非公開さん 1. BMI値の式を書く。 2. 定数に敏感になる。 100 100.0 は違う。 3. テストはしてない。 struct employee{ char name[20]; double height; double weight; double bmi; }; void bmi2(struct employee *p); int main(void){ struct employee seData = {"田中太郎",160.0,56.0,0.0}; bmi2(&seData); printf("名前:%s\n",seData.name); printf("身長:%.2lf\n",seData.height); printf("体重:%.2lf\n",seData.weight); printf("BMI値:%.2lf\n",seData.bmi); return 0; } void bmi2(struct employee *p){ double wk; wk = p->height / 100.0; p->bmi =p->weight / (wk * wk); }