小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
说实话这题做了好久,在判断日期的合法性上纠结了,究竟需不需要判断如果输入的年份是润年的话,二月份的日期是否>29,大家谁有好的判别日期合法性,给俺说说呗,下边是我的代码
#include <stdio.h>
#include <string.h>
int LeapYear (d,e,f);
int DateLegal(a,b,c);
int DateLegal(a,b,c){//定义一个函数来检测输入日期的合法性
if(LeapYear (a,b,c)){
if((b=2)&&(c>28))
printf("您所输入的年份是平年!二月只有28天\n");
return 1;
}
if (a < 2006) return 1;
if(b>12) return 1;
if(c>31) return 1;
else
return 0;
}
int LeapYear (int d,int e,int f){//定义一个函数,判断xxxx年是否是闰年
if(d%400==0||(d%4==0&&d%100!=0)) return 0;
else
return 1;
}
int main(){
int sum1=0;
int i=2006;
int sum2=0;
int j=1;
int year,month,day;//定义三个参数用来存放用户输入的年-月-日
int sumDay;
int PYear[12]={31,28,31,30,31,30,31,31,30,31,30,31};//定义数组存放平年的12个月份的天数
int RYear[12]={31,29,31,30,31,30,31,31,30,31,30,31};//定义数组存放闰年的12个月份的天数
printf("请输入2006年1月1日后的任意一天,格式按照2015-4-10形式书写:\n");
scanf("%d-%d-%d",year,month,day);
if (DateLegal(year,month,day)){//判别用户输入的日期是否合法
printf("日期不合法,请重新输入\n");
return -1;//非正常退出程序
}
//算出相差的年的天数的和
for (i=2006;i<year;i++){
if(LeapYear (year,month,day))
sum1+=366;
else
sum1+=365;
}
//算出相差月的天数的和;
for (j=1;j<month;j++){
if (LeapYear (year,month,day)){
sum2+=RYear[j-1];
}else
sum2+=PYear[j-1];
}
sumDay=sum1+sum2+day;
//判别小明今天结识的是美女还是帅哥
if ((sumDay%2==0)&&(sumDay%3!=0)){
printf("小明%d-%d-%d结识了美女\n",year,month,day);
}
else if((sumDay%3 == 0)&&(sumDay%2!=0))
printf("小明%d-%d-%d结识了帅哥\n",year,month,day);
else if((sumDay%3 == 0)&&(sumDay%2 == 0))
printf("小明%d-%d-%d既结识了美女,也结识了帅哥\n",year,month,day);
else
printf("小明今天谁也没结识\n");
//程序正常退出
return 0;
}
|
|