# Function (1)

Exercises 1 to 5 calculate BMI (Body Mass Index), an index related to obesity, with input of height and weight. Final program is composed of a few functions. Start with Exercise 1 step by step.

## Exercise 1

Below is a source code to calculate BMI with input of height and weight. In the source code, a function, "bmi_cal", is defined to calculate BMI. Write the source code, save it as "func1.c", and confirm whether it can run properly.

```/*
Calculation of BMI (Body Mass Index)
*/

#include <stdio.h>

double bmi_cal(double h, double w) {

// BMI = weight(kg) / height(m) / height(m)

return w/h/h;
}

int main(void) {

double height, weight, bmi;

printf("Input height(m) and weight(kg) ");
scanf("%lf%lf", &height, &weight);

// Calculation of BMI
bmi = bmi_cal(height, weight);

printf("%5.2f m, %6.2f kg: BMI = %6.2f\n", height, weight, bmi);

return (0);
}
```
```(Execution result)
\$
\$ ./a.out
Input height(m) and weight(kg) 1.65 70
1.65 m,  70.00 kg: BMI =  25.71
\$
```

## Exercise 2

Below is a source code to calculate BMI with input of height and weight. In the source code, a function, "bmi_cal", is defined to calculate BMI. Write the source code, complement the expression hidden by "******" and save it as "func2.c". Confirm whether it can run properly.

```/*
Calculation of BMI (Body Mass Index) and Standard weight
*/

#include <stdio.h>

double bmi_cal(double h, double w) {

// BMI = weight(kg) / height(m) / height(m)

return w/h/h;
}

double std_weight(double h) {

// Standard weight (kg) = height(m) * height(m) * 22

return h*h*22;
}

int main(void) {

double height, weight, bmi, sweight;

printf("Input height(m) and weight(kg) ");
scanf("%lf%lf", &height, &weight);

// Calculation of BMI
bmi = bmi_cal(height, weight);

printf("%5.2f m, %6.2f kg: BMI = %6.2f\n", height, weight, bmi);

// Calculation of standard weight
sweight = std_weight(***********);

printf("%5.2f m, %6.2f kg: Standard weight = %6.2f kg\n", height, weight, sweight);

return (0);
}
```
```(Execution result)
\$
\$ ./a.out
Input height(m) and weight(kg) 1.60 68.5
1.60 m,  68.50 kg: BMI =  26.76
1.60 m,  68.50 kg: Standard weight =  56.32 kg
\$
```

## Exercise 3

Below source code is almost same as func2.c, but values returned by function are different. With reference to such difference, type the source code and save it as "func3.c".

```/*
Calculation of BMI (Body Mass Index) and Standard weight
*/

#include <stdio.h>

void bmi_cal(double h, double w) {

// BMI = weight(kg) / height(m) / height(m)

printf("%5.2f m, %6.2f kg: BMI = %6.2f\n", h, w, w/h/h);
}

void std_weight(double h) {

// Standard weight (kg) = height(m) * height(m) * 22

printf("%5.2f m: Standard weight = %6.2f kg\n", h, h*h*22);
}

int main(void) {

double height, weight;

printf("Input height(m) and weight(kg) ");
scanf("%lf%lf", &height, &weight);

// Calculation of BMI
bmi_cal(height, weight);

// Calculation of standard weight
std_weight(***********);

return (0);
}
```
```(Execution result)
\$
\$ ./a.out
Input height(m) and weight(kg) 1.60 68.5
1.60 m, 68.50 kg: BMI =  26.76
1.60 m, Standard weight =  56.32 kg
\$
```

## Exercise 4

Based on func2.c, below source code is intended to show message of obesity. Write the source code, complement the expression hidden by "******" and save it as "func4.c". Confirm whether it can run properly.

```/*
Calculation of BMI (Body Mass Index) and Standard weight
*/

#include <stdio.h>

double bmi_cal(double h, double w) {

// BMI = weight(kg) / height(m) / height(m)

return w/h/h;
}

double std_weight(double h) {

// Standard weight (kg) = height(m) * height(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, w/h/h);
printf("%5.2f m: Standard weight = %6.2f kg\n", h, h*h*22);

if (bmi < 18.5) {
printf("You have low weight\n");

} else if (bmi < 25) {
printf("You have normal weight\n");

} else if (bmi < 30) {
printf("Obesity (1st-degree)\n");

} else if (bmi < 35) {
printf("Obesity (2nd-degree)\n");

} else if (bmi < 40) {
printf("Obesity (3rd-degree)\n");

} else {
printf("Obesity (4th-degree)\n");
}
}

int main(void) {

double height, weight, bmi, sweight;

printf("Input height(m) and weight(kg) ");
scanf("%lf%lf", &height, &weight);

// Calculation of BMI
bmi = bmi_cal(height, weight);

printf("%5.2f m, %6.2f kg: BMI = %6.2f\n", h, w, bmi);

// Calculation of standard weight
sweight = std_weight(***********);

// Message of obesity
message(********************);

return (0);
}
```
```(Execution result)
\$
\$ ./a.out
Input height(m) and weight(kg) 1.60 68.5
1.60 m,  68.50 kg: BMI =  26.76
1.60 m, Standard weight =  56.32 kg
Obesity (1st-degree)
\$
```

## Exercise 5

Based on func4.c, we want to keep showing the program until Ctrl-d is input. Write the source code to meet this requirement using while-loop or for-loop, save it as "func5.c", and confirm whether it can run properly.

```(Execution result)
\$
\$ ./a.out

[No. 1] Input height(m) and weight(kg) 1.80 78
1.80 m,  78.00 kg: BMI =  24.07
1.80 m,  Standard weight =  71.28 kg
You have low weight

[No. 2] Input height(m) and weight(kg) 1.56 70
1.56 m,  70.00 kg: BMI =  28.76
1.56 m,  Standard weight =  53.54 kg
Obesity (1st-degree)

[No. 3] Input height(m) and weight(kg) 1.60 90
1.60 m,  90.00 kg: BMI =  35.16
1.60 m,  Standard weight =  56.32 kg
Obesity (3rd-degree)

[No. 4] Input height(m) and weight(kg)  <- Ctrl + d
\$
```

Lessons for C programming
Junichi Susaki, Kyoto University