给定如下定义: struct date_rec { int day ; int month ; int year ; } ; struct date_rec current_date ; 写一个程序包含如下的函数,完成: (a) 输入current_date的值: void input_date(struct date_rec *current_date) (b) 将current_date增加1天: void increment_date(struct date_re
时间: 2023-05-31 12:19:11 浏览: 327
zhsy.rar_InitStack_pop_typedef struct st
### 回答1:
c *current_date) (c) 输出current_date的值: void output_date(struct date_rec current_date)
(a) 输入current_date的值:
void input_date(struct date_rec *current_date) {
printf("请输入日期(格式为dd/mm/yyyy):");
scanf("%d/%d/%d", &(current_date->day), &(current_date->month), &(current_date->year));
}
(b) 将current_date增加1天:
void increment_date(struct date_rec *current_date) {
int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个月的天数
if (current_date->year % 4 == && (current_date->year % 100 != || current_date->year % 400 == )) {
days_in_month[1] = 29; // 如果是闰年,2月有29天
}
current_date->day++;
if (current_date->day > days_in_month[current_date->month - 1]) { // 如果当前月份的天数超过了这个月的总天数
current_date->day = 1; // 将天数设为1
current_date->month++; // 月份加1
if (current_date->month > 12) { // 如果月份超过了12
current_date->month = 1; // 月份设为1
current_date->year++; // 年份加1
}
}
}
(c) 输出current_date的值:
void output_date(struct date_rec current_date) {
printf("%02d/%02d/%04d", current_date.day, current_date.month, current_date.year);
}
### 回答2:
c *current_date)
对于上面给定的结构体,我们可以很容易地定义出输入日期和增加日期的两个函数。
首先是输入日期的函数,我们需要在函数内部进行接收用户输入的处理,为了方便起见,我们可以使用scanf函数来接收用户输入。input_date函数的代码如下:
void input_date(struct date_rec *current_date){
printf("请输入日期(格式:dd mm yyyy):");
scanf("%d %d %d",¤t_date->day,¤t_date->month,¤t_date->year);
}
接着是增加日期的函数,我们需要在函数内部对current_date的值进行修改,增加1天的操作可以按照日期的规则进行计算。比如如果当前日期的day为28或29或30或31,我们需要分别处理一下。increment_date函数的代码如下:
void increment_date(struct date_rec *current_date){
int month_days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(current_date->month==2){
if((current_date->year%4==0&¤t_date->year%100!=0)||current_date->year%400==0)
month_days[1]=29;
}
if(current_date->day<month_days[current_date->month-1])
current_date->day++;
else{
current_date->day=1;
if(current_date->month==12){
current_date->month=1;
current_date->year++;
}
else
current_date->month++;
}
}
以上两个函数的代码实现很简单,但是需要注意的是需要考虑到闰年的情况,我们可以通过定义一个月份天数的数组来进行处理,其中2月份需要特殊处理。
完整代码:
#include<stdio.h>
struct date_rec{
int day;
int month;
int year;
};
void input_date(struct date_rec *current_date){
printf("请输入日期(格式:dd mm yyyy):");
scanf("%d %d %d",¤t_date->day,¤t_date->month,¤t_date->year);
}
void increment_date(struct date_rec *current_date){
int month_days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(current_date->month==2){
if((current_date->year%4==0&¤t_date->year%100!=0)||current_date->year%400==0)
month_days[1]=29;
}
if(current_date->day<month_days[current_date->month-1])
current_date->day++;
else{
current_date->day=1;
if(current_date->month==12){
current_date->month=1;
current_date->year++;
}
else
current_date->month++;
}
}
int main(){
struct date_rec current_date;
input_date(¤t_date);
increment_date(¤t_date);
printf("增加一天后的日期为:%02d %02d %d\n",current_date.day,current_date.month,current_date.year);
return 0;
}
### 回答3:
c *current_date) (c) 输出current_date的值: void output_date(struct date_rec *current_date)
在这个程序中,需要使用结构体来存储日期信息,结构体包括day(天)、month(月)和year(年)三个元素。在预处理指令中,定义了struct date_rec类型的变量current_date来存储当前日期。在完成上述功能时,需要定义三个函数:input_date、increment_date和output_date。
首先,input_date函数用于输入current_date的值。由于current_date是一个结构体指针类型的变量,因此在函数中需要使用指针来传递和修改变量的值。函数内部直接通过指针修改current_date的day、month和year值即可。函数代码如下:
void input_date(struct date_rec *current_date)
{
printf("请输入当前日期(格式:日 月 年):\n");
scanf("%d %d %d", ¤t_date->day, ¤t_date->month, ¤t_date->year);
}
其次,increment_date函数用于将current_date增加1天。因为日期涉及到每月的天数不同,因此需要根据当前日期所属的月份以及是否是闰年来判断增加天数。函数内部使用了一个days_in_month数组来存储每个月的天数。如果当前日期是该月的最后一天且不是12月31日,则需要将其月份加1,日期变为1日。如果当前日期是12月31日,则需要将其年份加1,月份和日期皆变为1。函数代码如下:
void increment_date(struct date_rec *current_date)
{
int days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (current_date->day < days_in_month[current_date->month-1]) {
current_date->day += 1;
} else if (current_date->month == 12 && current_date->day == 31) {
current_date->day = 1;
current_date->month = 1;
current_date->year += 1;
} else {
current_date->day = 1;
current_date->month += 1;
}
if (current_date->day == 29 && current_date->month == 2 && (current_date->year%4==0&¤t_date->year%100!=0||current_date->year%400==0)){
current_date->day += 1;
}
}
最后,output_date函数用于输出current_date的值。直接使用printf函数输出即可。函数代码如下:
void output_date(struct date_rec *current_date)
{
printf("当前日期:%d年%d月%d日\n", current_date->year, current_date->month, current_date->day);
}
将上述三个函数组合起来,即可完成程序的编写。主函数中先调用input_date函数读入当前日期,再调用increment_date函数增加1天,最后调用output_date函数输出结果。完整代码如下:
阅读全文