用c语言解决输入一组人员的姓名 身高(以cm为单位),输出这组人员中身高的中位数,以及位于中位数位置的人员信息。 当输入姓名为#时结束信息输入。人数不超过15人。 中位数是按大小顺序排列的一组数据中居于中间位置的数。
时间: 2024-03-14 10:47:43 浏览: 75
好的,以下是使用C语言实现您的需求的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PERSONS 15
// 定义一个用于存储人员信息的结构体
struct person {
char name[20];
int height;
};
// 按身高排序的比较函数
int cmp(const void *a, const void *b) {
return ((struct person*)a)->height - ((struct person*)b)->height;
}
int main() {
// 定义一个用于存储人员信息的数组
struct person persons[MAX_PERSONS];
// 输入人员信息,姓名为#时结束输入
int n = 0;
while (n < MAX_PERSONS) {
printf("请输入人员姓名:");
scanf("%s", persons[n].name);
if (strcmp(persons[n].name, "#") == 0) {
break;
}
printf("请输入人员身高(cm):");
scanf("%d", &persons[n].height);
n++;
}
// 对人员数组按身高进行排序
qsort(persons, n, sizeof(struct person), cmp);
// 计算中位数的位置
int mid = n / 2;
// 输出中位数和对应的人员信息
if (n % 2 == 0) {
// 如果人数为偶数,则取中间两个人的平均身高作为中位数
int mid_height = (persons[mid-1].height + persons[mid].height) / 2;
printf("身高中位数为:%d\n", mid_height);
printf("身高为%dcm的人员信息为:\n", mid_height);
printf("%s %dcm\n", persons[mid-1].name, persons[mid-1].height);
printf("%s %dcm\n", persons[mid].name, persons[mid].height);
} else {
// 如果人数为奇数,则取中间一个人的身高作为中位数
int mid_height = persons[mid].height;
printf("身高中位数为:%d\n", mid_height);
printf("身高为%dcm的人员信息为:\n", mid_height);
printf("%s %dcm\n", persons[mid].name, persons[mid].height);
}
return 0;
}
```
这个程序也是先让用户输入人员信息,姓名为#时结束输入。然后对输入的人员信息按照身高进行排序,并计算出中位数所在的位置,最后输出中位数和对应的人员信息。注意,如果人数为偶数,则中位数为中间两个人的平均身高。
阅读全文