電子書籍の厳選無料作品が豊富!

構造体employee 型の変数を配列で5つ宣言し、BMI 値、肥満率、理想体重を求めた後、BMI 値の昇順でソートをかけ、表示をするというプログラムを作成したいのですが、うまくいきません。

・引数は、配列(構造体employee []型 または、構造体employee *型)
・戻り値は、なし。
・関数名は、sort
・番号はint型
・名前はchar型
・身長・体重・BMI値・肥満率・理想体重はdouble型

という指定があります。


#include <stdio.h>
#define N 5

struct employee{
int number;
char name[20];
double height;
double weight;
double bmi;
double fat;
double ideal;
};

void bmi_fat(struct employee *);
void sort(struct employee []);

int main(void)

{
int i;
struct employee std[N]={
{1, "oohata", 173.0, 60.0, 0.0, 0.0, 0.0},{2, "suzuki", 168.8, 60.2, 0.0, 0.0, 0.0},
{3, "satou", 168.2, 80.5, 0.0, 0.0, 0.0},{4, "tanaka", 162.5, 45.2, 0.0, 0.0, 0.0},
{5, "yamada", 155.3, 55.7, 0.0, 0.0, 0.0}
};

for(i=0; i<N; i++){
sort(std);
bmi_fat(&std [i]);
}

for(i=0; i<N; i++){
sort(std);
printf("社員番号:%d番\n", std[i].number);
printf("名前:%s\n", std[i].name);
printf("身長:%2.1lfcm\n", std[i].height);
printf("体重:%2.1lfkg\n", std[i].weight);
printf("BMI:%2.1lf\n", std[i].bmi);
printf("肥満率:%2.1lf%\n", std[i].fat);
printf("理想体重:%2.1lfkg\n", std[i].ideal);


}

return 0;
}

void sort(struct employee a[])

{
int i, j;
struct employee x;

a->bmi=a->weight/((a->height/100.0)*(a->height/100.0));
a->ideal=(a->height-100)*0.9;
a->fat=a->weight/a->ideal*100.0;

for(i=0; i<N-1; i++){
for(j=0; j<N-i-1; j++){
if(a[j].bmi>a[j+1].bmi){
x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
}
}
}

以上が作成済みのプログラムなのですが、「外部シンボル'_bmi_fat'が未解決」と出てしまいます。
どこを直してよいのかが全く分かりません。
ご教授お願い致します。

A 回答 (2件)

sort関数の中に、BMIを求める機能を含んでいるように見えます。


その部分をbmi_fat関数とすればよいでしょう。
bmi_fat関数はBMIを求めるだけ、
sort関数はデータをソートするだけ、というように、
関数はその名前にふさわしい仕事だけをするように書けばよいでしょう。
ところで、

>for(i=0; i<N; i++){
>sort(std);
>printf("社員番号:%d番\n", std[i].number);

結果を出力するとき、ループの中で毎回ソートする必要が本当にありますか?
    • good
    • 0

bmi_fat関数がありません。


bmi_fat関数を実装しましょう。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!