病人登记看病,用c语言编写一个程序,将登记的病人按照以下原则排出看病的先后顺序: 老年人(年龄 >= 60岁)比非老年人优先看病。 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。 非老年人按登记的先后顺序看病。
时间: 2023-11-05 14:25:38 浏览: 203
好的,以下是满足您要求的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PATIENTS 100 // 最大病人数量
#define MAX_NAME_LENGTH 20 // 病人姓名最大长度
// 病人结构体
typedef struct {
char name[MAX_NAME_LENGTH]; // 姓名
int age; // 年龄
int priority; // 优先级,老年人为1,非老年人为2
} Patient;
// 根据年龄降序排列
int cmp_age_desc(const void *a, const void *b) {
const Patient *pa = (const Patient *)a;
const Patient *pb = (const Patient *)b;
if (pa->age != pb->age) {
return pb->age - pa->age;
} else {
return 0;
}
}
// 根据登记顺序升序排列
int cmp_reg_asc(const void *a, const void *b) {
const Patient *pa = (const Patient *)a;
const Patient *pb = (const Patient *)b;
return pa->priority - pb->priority;
}
int main() {
Patient patients[MAX_PATIENTS];
int num_patients = 0;
// 输入病人信息
printf("请逐个输入病人信息(输入0结束):\n");
while (num_patients < MAX_PATIENTS) {
printf("姓名:");
scanf("%s", patients[num_patients].name);
if (strcmp(patients[num_patients].name, "0") == 0) {
break;
}
printf("年龄:");
scanf("%d", &patients[num_patients].age);
patients[num_patients].priority = (patients[num_patients].age >= 60) ? 1 : 2;
num_patients++;
}
// 按照优先级和年龄排序
qsort(patients, num_patients, sizeof(Patient), cmp_age_desc);
qsort(patients, num_patients, sizeof(Patient), cmp_reg_asc);
// 输出排队顺序
printf("排队顺序如下:\n");
for (int i = 0; i < num_patients; i++) {
printf("%s\n", patients[i].name);
}
return 0;
}
```
程序流程如下:
1. 定义了一个病人结构体,包含姓名、年龄和优先级三个属性。
2. 定义了两个比较函数,用于排序。第一个函数按照年龄降序排列,第二个函数按照登记顺序升序排列。
3. 输入病人信息,将年龄大于等于60岁的病人优先级设为1,其余设为2。
4. 对病人数组进行两次排序,先按年龄降序排列,再按登记顺序升序排列。
5. 输出排队顺序,即按照排序后的顺序输出病人姓名。
希望以上程序能够满足您的要求!
阅读全文