请用C语言写一个程序要求如下一、软件开发目的 用C语言实现班级同学身体质量指数BMI的统计分析 二、数据结构 用结构体数组存储班级同学的数据 55 包括:身高、体重、BMI 要求:输入原始是每个同学的身高、体重。 三、软件功能说明 (1)计算每个同学的BMI值 (2) 统计各个BMI段的同学人数(正常、瘦、胖、肥胖等) (3) 同时把数据写入文件中 同时找到其中的最大和最小BMI值的同学信息 (5) 并对所有的同学按BMI值排序(从小到大)
时间: 2024-03-17 16:41:28 浏览: 15
以下是一个实现班级同学BMI统计分析的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 55
struct student {
char name[20];
float height;
float weight;
float bmi;
};
void calculate_bmi(struct student *s) {
s->bmi = s->weight / ((s->height / 100) * (s->height / 100));
}
int main() {
struct student students[MAX_STUDENT];
int i, j;
int normal_count = 0, thin_count = 0, fat_count = 0, obese_count = 0;
float max_bmi = 0, min_bmi = 999;
int max_bmi_index, min_bmi_index;
FILE *fp;
// 输入每个同学的身高、体重和姓名
for (i = 0; i < MAX_STUDENT; i++) {
printf("请输入第 %d 个同学的姓名、身高(cm)、体重(kg):", i + 1);
scanf("%s%f%f", students[i].name, &students[i].height, &students[i].weight);
calculate_bmi(&students[i]);
// 统计BMI段人数
if (students[i].bmi < 18.5) {
thin_count++;
} else if (students[i].bmi < 24) {
normal_count++;
} else if (students[i].bmi < 28) {
fat_count++;
} else {
obese_count++;
}
// 找到最大和最小BMI值的同学信息
if (students[i].bmi > max_bmi) {
max_bmi = students[i].bmi;
max_bmi_index = i;
}
if (students[i].bmi < min_bmi) {
min_bmi = students[i].bmi;
min_bmi_index = i;
}
}
// 写入数据到文件中
fp = fopen("student_bmi.txt", "w");
for (i = 0; i < MAX_STUDENT; i++) {
fprintf(fp, "%s %f %f %f\n", students[i].name, students[i].height, students[i].weight, students[i].bmi);
}
fclose(fp);
// 按BMI值排序
for (i = 0; i < MAX_STUDENT - 1; i++) {
for (j = i + 1; j < MAX_STUDENT; j++) {
if (students[i].bmi > students[j].bmi) {
struct student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
// 输出结果
printf("正常:%d人,瘦:%d人,胖:%d人,肥胖:%d人\n", normal_count, thin_count, fat_count, obese_count);
printf("最大BMI值的同学信息:%s %.2f %.2f %.2f\n", students[max_bmi_index].name, students[max_bmi_index].height, students[max_bmi_index].weight, students[max_bmi_index].bmi);
printf("最小BMI值的同学信息:%s %.2f %.2f %.2f\n", students[min_bmi_index].name, students[min_bmi_index].height, students[min_bmi_index].weight, students[min_bmi_index].bmi);
printf("按BMI值排序后的同学信息:\n");
for (i = 0; i < MAX_STUDENT; i++) {
printf("%s %.2f %.2f %.2f\n", students[i].name, students[i].height, students[i].weight, students[i].bmi);
}
return 0;
}
```
程序的思路如下:
1. 定义一个结构体`student`来存储每个同学的姓名、身高、体重和BMI值。
2. 输入每个同学的身高、体重和姓名,并计算出对应的BMI值。
3. 统计不同BMI段的同学人数。
4. 找到BMI值最大和最小的同学信息。
5. 将所有同学的信息写入文件中。
6. 对所有同学按BMI值进行排序,从小到大输出排序结果。
上述程序可以满足题目要求,但是为了提高程序的可读性和可维护性,还可以将一些功能拆分成不同的函数来实现。例如,可以将计算BMI值的功能封装成一个函数`calculate_bmi`,将统计BMI段人数的功能封装成一个函数`count_bmi`,将按BMI值排序的功能封装成一个函数`sort_by_bmi`等等。