本次实验要求大家使用数组编程,完成一个“学生身体肥胖程度”的统计分析程序。身体肥胖程度用“身体质量指数”(BMI, Body Mass Index)评判,BMI计算公式为: ,其中 是体重,单位千克, 表示身高,单位米。BMI超过一定阈值表明身体超重或肥胖,不同年龄和性别,肥胖和超重的评判阈值不同。程序包括三个类BodyMeasurement、BMICutoffs以及BMITable。要求如下:1.用类BodyMeasurement表示一个学生的体检信息,体检信息包括四项:年林、性别、身高、体重。
1.1)用四个私有成员表示四项体检信息。
1.2)编写带参数的构造函数,参数值为上述四个信息的初始值。
1.3)编写4个公有成员函数,分别返回上述四个信息值。
1.4)编写公有成员函数getBMI,计算并返回身体质量指数。
1.5)编写公有成员函数show,在控制台上输出体检信息以及BMI数值。
2. 用类BMICutoffs表示某个年龄的男、女生身体肥胖程度的评判阈值:
2.1)用一个私有成员变量表示年龄。
2.2)使用两个私有成员变量分别表示男生身体超重和肥胖的阈值。
2.3)使用两个私有成员变量分别表示女生身体超重和肥胖的阈值。
2.4)编写带参数的构造函数,参数为上述5个私有成员变量的初始值。
2.5)编写一个公有成员函数show,在控制台上输出年龄以及4个阈值。
2.6)声明BMITable为BMICutoffs的友元类。
3.用类BMITable维护一个BMI阈值表格:
3.1)用私有的数组型静态常成员变量cutoff_table表示6~18岁青少年的BMI阈值。cutoff_table是BMICutoffs数组,包含13个元素(BMICutoffs对象),并初始化cutoff_table为以下表格(你可以拷贝下面的代码),表格中每一行表示一组阈值,其中的数值依次对应年龄、男超重阈值、男肥胖阈值、女超重阈值、女肥胖阈值。比如第一行表示6岁男孩超重和肥胖的BMI阈值分别为16.6,18.1,6岁女孩的超重和肥胖BMI阈值分别为16.3,17.9:cutoff_table[13] = { { 6,16.6,18.1,16.3,17.9}, { 7,17.4,19.2,17.2,18.9}, { 8,18.1,20.3,18.1,19.9}, { 9,18.9,21.4,19.0,21.0}, {10,19.6,22.5,20.0,22.1}, {11,20.3,23.6,21.1,23.3}, {12,21.0,24.7,21.9,24.5}, {13,21.9,25.7,22.6,25.6}, {14,22.6,26.4,23.0,26.3}, {15,23.1,26.9,23.4,26.9}, {16,23.5,27.4,23.7,27.4}, {17,23.8,27.8,23.8,27.7}, {18,24.0,28.0,24.0,28.0}};
3.2)编写静态成员函数printTable,在控制台输出上述表格。请参考下图所示的输出格式:3.3)编写静态成员函数checkBMI,根据年龄、性别以及BMI数值,判断身体状况,身体状况分为四类:正常(Normal)、超重(Overweight)、肥胖(Obesity)以及未知(Unknown)。请用下面的枚举类表示这四种状态:enum class BodyState { Normal = 0, OverWeight = 1, Obesity = 2, Unknown = 3};判断方法为:首先根据年龄和性别,在cutoff_table中找到对应年龄和性别的超重阈值和肥胖阈值,如果没有找到,返回Unknown。如果BMI<超重阈值,返回Normal;否则如果BMI<肥胖阈值,返回Overweight;否则返回Obesity。 例如下面代码定义了一个体检记录John,经过BMITable::checkBMI判别后,应返回Normal://16岁,身高1.86米,体重80公斤BodyMeasurement John(16, 'M', 1.86, 80);BodyState state = BMITable::checkBMI(John.getGender(), John.getAge(), John.getBMI());
4.编写一个自由函数analyze,用于对一组体检信息进行统计分析:判别出其中哪些同学身体超重、哪些同学肥胖。输出超重和肥胖同学的体检信息以及超重/肥胖诊断结果。统计超重和肥胖同学所占的百分比,并输出。该函数的输入参数是一个BodyMeasurement对象数组,无返回值。请参考下面的输出结果: 图2 统计分析输出格式
5.1)定义一个体检信息对象,输出该体检信息以及肥胖程度检测结果。
5.2)用BMITable类输出BMI阈值表格(如图1所示)。
5.3)定义并初始化一个体检信息对象数组,数组中包含40个学生的体检信息,调用analyze函数对这一组信息进行统计分析,输出结果如图2所示。
c++类和数组实验代码
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
9条回答 默认 最新
关注 由人工智能和答主提供,可以参考如下,如果回答的不正确,及时评论区回复,我追加回答,谢谢。
以下代码可以正常跑通,您先看看是不是您要的结果:
代码:
#include <iostream> #include <iomanip> // 用于设置输出格式 #include <string> #include <locale.h> // 枚举类型定义身体状态 enum class BodyState { Normal = 0, OverWeight = 1, Obesity = 2, Unknown = 3 }; // 声明类 BMICutoffs,以便在 BMITable 中使用 class BMICutoffs; // 类 BodyMeasurement 表示一个学生的体检信息 class BodyMeasurement { public: // 带参数的构造函数 BodyMeasurement(int age, char gender, double height, double weight); // 公有成员函数,用于获取体检信息的各项数值 int getAge() const; char getGender() const; double getHeight() const; double getWeight() const; // 计算并返回身体质量指数 (BMI) double getBMI() const; // 在控制台上输出体检信息以及BMI数值 void show() const; private: int age; char gender; double height; double weight; }; // 类 BMICutoffs 表示某个年龄的男、女生身体肥胖程度的评判阈值 class BMICutoffs { private: int age; double maleOverweightThreshold, maleObesityThreshold, femaleOverweightThreshold, femaleObesityThreshold; public: // 带参数的构造函数 BMICutoffs(int age, double maleOverweight, double maleObesity, double femaleOverweight, double femaleObesity); // 在控制台上输出年龄以及4个阈值 void show() const; // 声明 BMITable 为 BMICutoffs 的友元类 friend class BMITable; }; // 类 BMITable 维护一个BMI阈值表格 class BMITable { private: static const BMICutoffs cutoff_table[]; public: // 在控制台上输出BMI阈值表格 static void printTable(); // 根据年龄、性别以及BMI数值,判断身体状况 static BodyState checkBMI(char gender, int age, double bmi); }; // 定义类 BodyMeasurement 的成员函数 BodyMeasurement::BodyMeasurement(int age, char gender, double height, double weight) : age(age), gender(gender), height(height), weight(weight) {} int BodyMeasurement::getAge() const { return age; } char BodyMeasurement::getGender() const { return gender; } double BodyMeasurement::getHeight() const { return height; } double BodyMeasurement::getWeight() const { return weight; } double BodyMeasurement::getBMI() const { return weight / (height * height); } void BodyMeasurement::show() const { std::wcout << L"年龄: " << age << L"岁, 性别: " << gender << L", 身高: " << height << L"米, 体重: " << weight << L"公斤" << std::endl; } // 定义类 BMICutoffs 的成员函数 BMICutoffs::BMICutoffs(int age, double maleOverweight, double maleObesity, double femaleOverweight, double femaleObesity) : age(age), maleOverweightThreshold(maleOverweight), maleObesityThreshold(maleObesity), femaleOverweightThreshold(femaleOverweight), femaleObesityThreshold(femaleObesity) {} void BMICutoffs::show() const { std::wcout << L"年龄: " << age << L", 男生超重阈值: " << maleOverweightThreshold << L", 男生肥胖阈值: " << maleObesityThreshold << L", 女生超重阈值: " << femaleOverweightThreshold << L", 女生肥胖阈值: " << femaleObesityThreshold << std::endl; } // 定义类 BMITable 的成员函数 const BMICutoffs BMITable::cutoff_table[] = { {6, 16.6, 18.1, 16.3, 17.9}, {7, 17.4, 19.2, 17.2, 18.9}, {8, 18.1, 20.3, 18.1, 19.9}, {9, 18.9, 21.4, 19.0, 21.0}, {10, 19.6, 22.5, 20.0, 22.1}, {11, 20.3, 23.6, 21.1, 23.3}, {12, 21.0, 24.7, 21.9, 24.5}, {13, 21.9, 25.7, 22.6, 25.6}, {14, 22.6, 26.4, 23.0, 26.3}, {15, 23.1, 26.9, 23.4, 26.9}, {16, 23.5, 27.4, 23.7, 27.4}, {17, 23.8, 27.8, 23.8, 27.7}, {18, 24.0, 28.0, 24.0, 28.0} }; void BMITable::printTable() { for (const BMICutoffs &cutoff : cutoff_table) { cutoff.show(); } } BodyState BMITable::checkBMI(char gender, int age, double bmi) { for (const BMICutoffs &cutoff : cutoff_table) { if (cutoff.age == age) { if (gender == 'M') { if (bmi < cutoff.maleOverweightThreshold) { return BodyState::Normal; } else if (bmi < cutoff.maleObesityThreshold) { return BodyState::OverWeight; } else { return BodyState::Obesity; } } else if (gender == 'F') { if (bmi < cutoff.femaleOverweightThreshold) { return BodyState::Normal; } else if (bmi < cutoff.femaleObesityThreshold) { return BodyState::OverWeight; } else { return BodyState::Obesity; } } } } return BodyState::Unknown; } // 自由函数 analyze,对一组体检信息进行统计分析 void analyze(const BodyMeasurement students[], int numStudents) { int overweightCount = 0; int obesityCount = 0; for (int i = 0; i < numStudents; ++i) { BodyMeasurement student = students[i]; student.show(); double bmi = student.getBMI(); BodyState state = BMITable::checkBMI(student.getGender(), student.getAge(), bmi); switch (state) { case BodyState::OverWeight: std::wcout << L"BMI状态: 超重" << std::endl; overweightCount++; break; case BodyState::Obesity: std::wcout << L"BMI状态: 肥胖" << std::endl; obesityCount++; break; default: std::wcout << L"BMI状态: 正常" << std::endl; break; } std::wcout << std::endl; } double overweightPercentage = static_cast<double>(overweightCount) / numStudents * 100.0; double obesityPercentage = static_cast<double>(obesityCount) / numStudents * 100.0; std::wcout << L"超重百分比: " << overweightPercentage << L"%" << std::endl; std::wcout << L"肥胖百分比: " << obesityPercentage << L"%" << std::endl; } int main() { setlocale(LC_ALL, ""); // 设置本地化环境为默认值 BodyMeasurement students[] = { {16, 'M', 1.86, 80}, // 添加更多学生信息 }; analyze(students, sizeof(students) / sizeof(students[0])); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用
悬赏问题
- ¥50 大区域的遥感影像匹配 怎么做啊
- ¥15 求解答:pytorch跑yolov8神经网络受挫
- ¥20 Js代码报错问题不知道怎么解决
- ¥15 gojs 点击按钮node的position位置进行改变,再次点击回到原来的位置
- ¥15 计算决策面并仿真附上结果
- ¥20 halcon 图像拼接
- ¥15 webstorm上开发的vue3+vite5+typeScript打包时报错
- ¥15 vue使用gojs,需求在link中的虚线上添加方向箭头
- ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
- ¥15 SPSS分类模型实训题步骤