出自谭浩强c语言第五版第九章第2题,供大家学习参考结构体使用。
以下是函数部分:
struct Time{
int year;
int month;
int day;
};
int is_run(int x){
if(x%400==0 || x%100 !=0 && x%4==0){
return 1;
}else{
return 0;
}
}
int days(struct Time * time){
int mon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int days = 1;
if(is_run(time)){
mon[1] = 29;
}
struct Time date = {0,1,1};
while(date.month != time -> month || date.day != time->day){
days ++;
date.day ++;
if(date.day > mon[date.month - 1]){
date.day = 1;
date.month += 1;
}
if(date.month == 13){
printf("error of date.\n");
return 0;
}
}
return days;
}
关于while循环的两种思考方式(将while看成可以循环的判断的if语句):
1.当变化的时间和目标时间重合时,终止循环。(!(date.month == time -> month && date.day == time->day))
2.月日只要有一个不为目标时间,即进行循环。(date.month != time -> month || date.day != time->day)
逻辑一致,!(p&&q) == !p || !q。
以下为主函数部分:
struct Time{
int year;
int month;
int day;
};
int days(struct Time * time);
int main()
{
struct Time tt = {2021,10,9};
printf("%d",days(&tt));
return 0 ;
}