练习-定义日期结构体类型(包括年、月、日),实现输入一批日期,将日期按从大到小的顺序输出
时间: 2024-03-25 09:41:53 浏览: 121
好的,我来帮你解决这个问题。
首先,我们需要定义一个日期结构体类型,包含年、月、日三个成员变量。可以这样定义:
```c
typedef struct {
int year;
int month;
int day;
} Date;
```
接着,我们可以编写一个比较函数,用于比较两个日期的大小。可以按照年、月、日的顺序比较,如果年、月、日都相同,则两个日期相等。比较函数可以这样实现:
```c
int compare(Date d1, Date d2) {
if (d1.year != d2.year) {
return d1.year > d2.year ? 1 : -1;
} else if (d1.month != d2.month) {
return d1.month > d2.month ? 1 : -1;
} else if (d1.day != d2.day) {
return d1.day > d2.day ? 1 : -1;
} else {
return 0;
}
}
```
然后,我们可以编写一个排序函数,对输入的日期进行排序。可以用冒泡排序或选择排序等简单的排序算法实现。这里我们使用选择排序。排序函数可以这样实现:
```c
void sort(Date dates[], int size) {
int i, j, max_index;
Date temp;
for (i = 0; i < size - 1; i++) {
max_index = i;
for (j = i + 1; j < size; j++) {
if (compare(dates[j], dates[max_index]) > 0) {
max_index = j;
}
}
if (max_index != i) {
temp = dates[i];
dates[i] = dates[max_index];
dates[max_index] = temp;
}
}
}
```
最后,我们可以编写一个主函数,用于输入一批日期,并输出按从大到小排序后的日期。主函数可以这样实现:
```c
int main() {
int n, i;
Date dates[100];
printf("请输入日期个数:");
scanf("%d", &n);
printf("请输入%d个日期,每个日期用空格隔开,年月日之间用'-'隔开:\n", n);
for (i = 0; i < n; i++) {
scanf("%d-%d-%d", &dates[i].year, &dates[i].month, &dates[i].day);
}
sort(dates, n);
printf("日期按从大到小的顺序排序如下:\n");
for (i = 0; i < n; i++) {
printf("%04d-%02d-%02d\n", dates[i].year, dates[i].month, dates[i].day);
}
return 0;
}
```
这样就完成了。你可以试着运行一下这个程序,输入一些日期,看看它能否正确地输出按从大到小排序后的日期。
阅读全文