C语言运用结构体 指针函数写一个简单程序并作注解 void birth_sort(struct person p[],int n); (7分) 实现公民信息按照生日排序的函数,排序原则:按年龄从大到小排序。其中数组 p 存放 n 个公民信息。
时间: 2024-03-04 12:48:42 浏览: 108
好的,我来解答你的问题。
下面是一个简单的 C 语言程序,使用结构体和指针函数实现了按照生日排序的功能。程序中定义了一个 person 结构体,包含了姓名、出生日期等信息。birth_sort 函数接收一个 person 类型的数组和数组长度 n,通过比较出生日期,将数组中的元素按照年龄从大到小排序。
```c
#include <stdio.h>
#include <stdlib.h>
struct person {
char name[20];
int year;
int month;
int day;
};
void birth_sort(struct person p[], int n);
int main() {
int i, n;
struct person *people;
printf("请输入公民人数:");
scanf("%d", &n);
people = (struct person*)malloc(n * sizeof(struct person));
printf("请依次输入公民的姓名、出生年月日:\n");
for (i = 0; i < n; i++) {
scanf("%s%d%d%d", people[i].name, &people[i].year, &people[i].month, &people[i].day);
}
birth_sort(people, n);
printf("按年龄从大到小排序后的公民信息:\n");
for (i = 0; i < n; i++) {
printf("%s %d-%d-%d\n", people[i].name, people[i].year, people[i].month, people[i].day);
}
free(people);
return 0;
}
void birth_sort(struct person p[], int n) {
int i, j;
struct person temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (p[i].year < p[j].year || (p[i].year == p[j].year && p[i].month < p[j].month) || (p[i].year == p[j].year && p[i].month == p[j].month && p[i].day < p[j].day)) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
```
程序运行时,先输入公民的人数,然后输入每个人的姓名和出生日期,最后输出按照年龄从大到小排序后的公民信息。
注释如下:
```c
// 定义 person 结构体,包含姓名和出生日期等信息
struct person {
char name[20];
int year;
int month;
int day;
};
// 按照生日排序的函数,排序原则:按年龄从大到小排序
void birth_sort(struct person p[], int n) {
int i, j;
struct person temp;
// 冒泡排序
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
// 如果 p[i] 的年份小于 p[j] 的年份,或者年份相等但月份小于 p[j] 的月份,或者年份和月份都相等但日期小于 p[j] 的日期,那么交换两个元素的位置
if (p[i].year < p[j].year || (p[i].year == p[j].year && p[i].month < p[j].month) || (p[i].year == p[j].year && p[i].month == p[j].month && p[i].day < p[j].day)) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
int main() {
int i, n;
struct person *people;
// 输入公民人数
printf("请输入公民人数:");
scanf("%d", &n);
// 动态分配内存
people = (struct person*)malloc(n * sizeof(struct person));
// 输入公民的姓名和出生日期
printf("请依次输入公民的姓名、出生年月日:\n");
for (i = 0; i < n; i++) {
scanf("%s%d%d%d", people[i].name, &people[i].year, &people[i].month, &people[i].day);
}
// 按照生日排序
birth_sort(people, n);
// 输出排序后的公民信息
printf("按年龄从大到小排序后的公民信息:\n");
for (i = 0; i < n; i++) {
printf("%s %d-%d-%d\n", people[i].name, people[i].year, people[i].month, people[i].day);
}
// 释放内存
free(people);
return 0;
}
```
希望这个程序对你有所帮助!
阅读全文