📄 cpp.cpp
字号:
/**
2007年10月08日
报研复试题目二:求任意两个日期之间相隔整个月份的数目
(当时没做出来,之后补上。)
其余两个题目是:
题一:用指针对字符串排序。听说要用链表才能真正用上指针;
题三:竖向打印二叉树;
**/
#include"iostream.h"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
typedef struct dateNode
{
int year;
int month;
int day;
int flag;//若月份天数满,则为1,否则为0;
}dateNode;
int IsLeapYear(int year)
{//若是闰年,返回1,否则为0
if( (year%4==0&&year%100!=0) || (year%400==0&&year%3200!=0) )
return 1;
else return 0;
}///~
int IsMonth31(int month)
{//若是31天的月份,则返回1,否则返回0
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return(1);
else
return(0);
}///~
void ProcessFlag(dateNode *x)
{//为日期节点x中的flag赋值:只需找出满月的情况标记1即可。
if((*x).month==2)//2月是否为满月,若是则进行处理
{
if( IsLeapYear((*x).year)==1 )//leap year
{
if( (*x).day==29 )
(*x).flag=1;
}
else if((*x).day==28)//not leap year
(*x).flag=1;
}
else if(IsMonth31((*x).month)==1)
{
if((*x).day==31)
(*x).flag=1;
}
else if((*x).day==30)
(*x).flag=1;
}///~
int CheckDate(dateNode x)
{//检查日期格式是否正确,1 right ,0 wrong;
if(x.month>12 || x.month<1)
{
printf("*****1、月份输入错误!*****\n");
return(0);
}
if(x.day<1 || x.day>31)
{
printf("*****2、天数错误!*****\n");
return(0);
}
else if( x.month==2 )
{
if( (IsLeapYear(x.year)==1 && x.day>29) || (IsLeapYear(x.year)==0 && x.day>28) )
{
printf("*****3、天数错误!*****\n");
return(0);
}
}
else if( (IsMonth31(x.month)==0) && x.day>30)
{
printf("*****4、天数错误!*****\n");
return(0);
}
return(1);
}///~
void main(void)
{
int j=0;
dateNode d[2];
for(int i=0;i<2;i++)
{
printf("输入第%d个日期的 年:",i+1);
scanf("%d",&d[i].year);
printf("输入第%d个日期的 月:",i+1);
scanf("%d",&d[i].month);
printf("输入第%d个日期的 日:",i+1);
scanf("%d",&d[i].day);
while(CheckDate(d[i])==0)//检查输入是否是正确日期格式1 right ,0 wrong
{
// printf("***%d*%d**\n",j++,CheckDate(d[i]));
printf("输入第%d个日期的 年:",i+1);
scanf("%d",&d[i].year);
printf("输入第%d个日期的 月:",i+1);
scanf("%d",&d[i].month);
printf("输入第%d个日期的 日:",i+1);
scanf("%d",&d[i].day);
}
d[i].flag=0;//初始化为0
ProcessFlag(&d[i]);//进一步标记flag
}//建立完毕
dateNode x;
long t1,t2;
t1=d[0].year*10000+d[0].month*100+d[0].day;
t2=d[1].year*10000+d[1].month*100+d[1].day;
if(t1>t2)
{
x=d[0];
d[0]=d[1];
d[1]=x;
}//排序完毕,使d[1]大于d[0];
// printf("d[0].flag=%d",d[0].flag);
// printf("d[1].flag=%d",d[1].flag);
int dy=0,dm=0;
dy=d[1].year-d[0].year;
if(d[0].day<=d[1].day || d[1].flag==1)
{
// printf("path1\n");
dm=d[1].month-d[0].month;
}
else
{
// printf("path2\n");
dm=d[1].month-d[0].month-1;
}
printf("\n差距为:%d个月\n",dy*12+dm);
}///~
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -