Classes/Fall 2024/csci218/Assignments/BMI.c

147 lines
4.7 KiB
C

/* Name: Garrett Haldrup
BMI.c
Problem: Take in the weight, heightm, and gender of a user and calculate and display their BMI, Life Expectancy, and BSA score using multiple methods.
Certification of Authenticity:
I certify that this assignment is entirely my own work.
*/
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
int main(){
// Declare Variables
// Float values for calculations
float bmi, weight, height, mostellar, duBois, boyd, lifeExpect;
// Int values to store the result of the scanf fucntion
int weightResult, heightResult;
// Char to store the gender with max length of 7 and a line string for formatting
char gender[7];
// declare and set bools to false as default
bool isMale = false;
bool isFemale = false;
bool overWeight = false;
// Display Program Purpose
printf("***Purpose**********************************************************************\n");
printf("* This program will calculate your BMI, Life Expectancy, and *\n");
printf("* BSA(multiple methods) with just your weight(kg), height(cm), and *\n");
printf("* gender. *\n");
printf("********************************************************************************\n");
// Nice little space
printf("\n");
// Litte overview of the data input section
printf("***Data Input*******************************************************************\n");
printf("* Please enter your weight in kg fmt: XX.X and your height in cm fmt: *\n");
printf("* XXX.X, Male and Female are the only valid options for gender. *\n");
printf("********************************************************************************\n");
// Read in weight, height, and gender from user
// Make sure correct values for weight is entered
printf("Please enter your weight(kg): ");
weightResult = scanf("%f", &weight);
while (weight <= 0 || weightResult != 1) {
while (getchar() != '\n');
if (weight <= 0) {
printf("Bad Value: Weight must greater than 0! fmt: XX.X\n");
} else {
printf("Bad Value: Please enter a decimal input! fmt: XX.X\n");
}
printf("Please re-enter your weight(kg): ");
weightResult = scanf("%f", &weight);
}
// Make sure correct values for weight is entered
printf("Please enter your height(cm): ");
heightResult = scanf("%f", &height);
while (height <= 0 || heightResult != 1) {
while (getchar() != '\n');
if (height <= 0) {
printf("Bad Value: Height must greater than 0! fmt: XX.X\n");
} else {
printf("Bad Value: Please enter a decimal input! fmt: XX.X\n");
}
printf("Please re-enter your height(cm): ");
heightResult = scanf("%f", &height);
}
// Make sure correct values for gender are entered
while (1) {
// Read in gender from user
printf("Please enter your gender(male or female): ");
scanf("%s", gender);
// Loop through all chars in gender and convert to lower case
for (int i = 0; i < (int)strlen(gender); i++) {
gender[i] = tolower(gender[i]);
}
isMale = !strcmp("male", gender);
isFemale = !strcmp("female", gender);
// Check if gender is valid
if (isMale || isFemale) {
break;
} else {
printf("Bad value: Please enter either male or female\n");
}
}
// nice space
printf("\n");
// Calculate the BMI
bmi = 10000 * (weight / pow(height, 2));
// Assign bool
overWeight = bmi > 25;
// Calculate the BSA(Mosteller's)
mostellar = sqrt((height * weight) / 3600);
// Calculate the BSA(Dubois)
duBois = (0.20247 * pow((height / 100), 0.725)) * pow(weight, 0.425);
// Calculate the BSA(boyd)
boyd = (0.0003207 * pow(height, 0.3)) * pow((1000 * weight), (0.6721 - (0.0188 * log10(weight))));
// Check if overweight and gender to select correct life expectancy message
// Only need to check one since the input screens to just two options
if (isFemale) {
if (overWeight) {
lifeExpect = 81.4;
} else {
lifeExpect = 83.5;
}
} else {
if (overWeight) {
lifeExpect = 77.3;
} else {
lifeExpect = 79.4;
}
}
// Demark output
printf("***Output***********************************************************************\n");
// Display values and output
printf("For a %s with weight(kg) of %.1fkg and height(cm) of %.1fcm\n", gender, weight, height);
printf("You have a BMI of %.1f and a life expectancy of %.1f years\n", bmi, lifeExpect);
printf("You also have a BSA calculated using\n");
printf(" - Mosteller's:\t%.3f\n", mostellar);
printf(" - DuBois:\t\t%.3f\n", duBois);
printf(" - Boyd:\t\t%.3f\n", boyd);
return 0;
}