用c语言写下面的代码:问题描述】输入一组人员的姓名 身高(以cm为单位),输出这组人员中身高的中位数,以及位于中位数位置的人员信息。 当输入姓名为#时结束信息输入。人数不超过15人。 中位数是按大小顺序排列的一组数据中居于中间位置的数。 例如,输入N人信息,当N为奇数时,身高中位数就是身高为正中间的数;中位数位置人员为正中1人 当N为偶数时,身高中位数就是处于正中间2个身高数的平均值,中位数位置人员为中间2人。 【输入形式】姓名 身高 以空格或回车分隔数据,输入姓名为#时,输入信息结束 【输出形式】先输出按身高排序后的各人姓名身高,一行输出一人信息。 然后输出中位数以及中位数人员信息如下: 人数为奇数时,输出mid height=身高,name=姓名 人数为偶数时,输出mid height=身高 (正中2人身高均值,保留1位小数输出) first person:姓名,身高 (正中第1人) second person:姓名,身高 (正中第2人)
时间: 2024-02-15 16:04:32 浏览: 135
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 15
struct Person {
char name[20];
double height;
};
void swap(struct Person *p1, struct Person *p2) {
struct Person temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int partition(struct Person arr[], int left, int right) {
struct Person pivot = arr[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (arr[j].height < pivot.height) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i+1], &arr[right]);
return i + 1;
}
void quicksort(struct Person arr[], int left, int right) {
if (left < right) {
int pivotIndex = partition(arr, left, right);
quicksort(arr, left, pivotIndex - 1);
quicksort(arr, pivotIndex + 1, right);
}
}
int main() {
struct Person people[MAX_N];
int n = 0;
while (scanf("%s", people[n].name) && strcmp(people[n].name, "#") != 0) {
scanf("%lf", &people[n].height);
n++;
}
quicksort(people, 0, n-1);
double midHeight;
struct Person midPerson1, midPerson2;
if (n % 2 == 1) {
midHeight = people[n/2].height;
midPerson1 = people[n/2];
} else {
midHeight = (people[n/2-1].height + people[n/2].height) / 2;
midPerson1 = people[n/2-1];
midPerson2 = people[n/2];
}
for (int i = 0; i < n; i++) {
printf("%s %.1f\n", people[i].name, people[i].height);
}
printf("mid height=%.1f", midHeight);
if (n % 2 == 1) {
printf(",name=%s\n", midPerson1.name);
} else {
printf("\nfirst person:%s,%.1f\nsecond person:%s,%.1f\n", midPerson1.name, midPerson1.height, midPerson2.name, midPerson2.height);
}
return 0;
}
```
输入格式:
每行输入一个人员的信息,格式为“姓名 身高”,以空格分隔。当姓名为#时,输入信息结束。
输出格式:
先按照身高从小到大的顺序输出每个人的信息,然后输出中位数以及中位数人员的信息。如果人数为奇数,则只输出一个人;如果人数为偶数,则输出两个人。
注意输出格式,保留小数点后一位。
阅读全文