用c语言实现【问题描述】输入一组人员的姓名 身高(以cm为单位),输出这组人员中身高的中位数,以及位于中位数位置的人员信息。 当输入姓名为#时结束信息输入。人数不超过15人。 中位数是按大小顺序排列的一组数据中居于中间位置的数。 例如,输入N人信息,当N为奇数时,身高中位数就是身高为正中间的数;中位数位置人员为正中1人 当N为偶数时,身高中位数就是处于正中间2个身高数的平均值,中位数位置人员为中间2人。
时间: 2024-02-17 16:02:31 浏览: 100
好的,以下是 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 15
typedef struct {
char name[20];
int height;
} Person;
int cmp(const void *a, const void *b) {
const Person *p1 = (const Person *)a;
const Person *p2 = (const Person *)b;
return p1->height - p2->height;
}
void print_person(const Person *p) {
printf("%s %dcm\n", p->name, p->height);
}
int main() {
Person people[MAX_N];
int n = 0;
while (n < MAX_N) {
printf("请输入第%d个人的姓名(输入#结束):", n + 1);
if (scanf("%s", people[n].name) != 1 || people[n].name[0] == '#') {
break;
}
printf("请输入第%d个人的身高(cm):", n + 1);
scanf("%d", &people[n].height);
n++;
}
if (n == 0) {
printf("没有输入人员信息!\n");
return 0;
}
qsort(people, n, sizeof(Person), cmp); // 按身高排序
printf("中位数为:%dcm\n", (people[(n - 1) / 2].height + people[n / 2].height) / 2);
printf("中位数位置的人员信息为:\n");
if (n % 2 == 1) { // 奇数个人
print_person(&people[n / 2]);
} else { // 偶数个人
print_person(&people[n / 2 - 1]);
print_person(&people[n / 2]);
}
return 0;
}
```
在这个代码中,我们使用了结构体来表示人员信息。在主函数中,我们使用一个循环读入每个人的姓名和身高,直到输入字符 `#` 或者达到最大人数。然后,我们使用 `qsort` 函数按身高将人员信息排序。最后,我们根据人数的奇偶性来计算中位数,并输出位于中位数位置的人员信息。
希望这个代码对你有帮助!
阅读全文