针对上面问题每个同学添加出生日期信息,编写程序输入全班同学的信息,并且按照年龄(出生日期)排序后输出。要求:判断二人的大小写成函数。并分别用选择排序和冒泡排序。
时间: 2024-02-11 13:08:10 浏览: 70
下面是针对上述问题的程序代码,包括输入全班同学的信息,按照年龄排序后输出,并且使用了选择排序和冒泡排序算法:
```c
#include <stdio.h>
#include <string.h>
#include <time.h>
#define N 3
struct student {
char name[10];
int num;
int score[3];
float aver;
struct tm birth;
};
// 判断两个日期的大小
int compare_date(struct tm date1, struct tm date2) {
if (date1.tm_year > date2.tm_year) {
return 1;
} else if (date1.tm_year < date2.tm_year) {
return -1;
} else if (date1.tm_mon > date2.tm_mon) {
return 1;
} else if (date1.tm_mon < date2.tm_mon) {
return -1;
} else if (date1.tm_mday > date2.tm_mday) {
return 1;
} else if (date1.tm_mday < date2.tm_mday) {
return -1;
} else {
return 0;
}
}
// 选择排序
void selection_sort(struct student stu[], int n) {
int i, j, k;
struct student temp;
for (i = 0; i < n - 1; i++) {
k = i;
for (j = i + 1; j < n; j++) {
if (compare_date(stu[j].birth, stu[k].birth) == -1) {
k = j;
}
}
if (k != i) {
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
}
// 冒泡排序
void bubble_sort(struct student stu[], int n) {
int i, j;
struct student temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (compare_date(stu[j].birth, stu[j + 1].birth) == 1) {
temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
}
int main() {
int i, j;
struct student stu[N];
// 输入学生信息
for (i = 0; i < N; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &stu[i].num);
printf("姓名:");
scanf("%s", stu[i].name);
printf("分数:");
for (j = 0; j < 3; j++) {
scanf("%d", &stu[i].score[j]);
}
printf("年份:");
scanf("%d", &stu[i].birth.tm_year);
printf("月份:");
scanf("%d", &stu[i].birth.tm_mon);
printf("日期:");
scanf("%d", &stu[i].birth.tm_mday);
stu[i].birth.tm_year -= 1900; // 调整年份
stu[i].birth.tm_mon -= 1; // 调整月份
stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
}
// 选择排序
selection_sort(stu, N);
printf("按照年龄从小到大输出:\n");
for (i = 0; i < N; i++) {
printf("%d %s ", stu[i].num, stu[i].name);
printf("%d %d %d %f ", stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].aver);
printf("%d/%d/%d\n", stu[i].birth.tm_year + 1900, stu[i].birth.tm_mon + 1, stu[i].birth.tm_mday);
}
// 冒泡排序
bubble_sort(stu, N);
printf("按照年龄从小到大输出:\n");
for (i = 0; i < N; i++) {
printf("%d %s ", stu[i].num, stu[i].name);
printf("%d %d %d %f ", stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].aver);
printf("%d/%d/%d\n", stu[i].birth.tm_year + 1900, stu[i].birth.tm_mon + 1, stu[i].birth.tm_mday);
}
return 0;
}
```
注意:这里使用了 C 语言标准库中的 `time.h` 头文件来处理日期,其中 `struct tm` 是一个结构体类型,用来存储日期和时间的信息,具体用法可以参考 C 语言标准库的相关文档。
阅读全文