C第三天任务//写一个判断这个日期是本年第几天的程序
程序员文章站
2022-07-15 08:58:07
...
C第三天任务
输入某年某月某日,判断这一天是这一年的第几天?
如下:
代码1:(情况未考虑完全)
#include <stdio.h>
int i,j,time1,time2,T1,T2,Days,Year;
void tell();
void main()
{
char time[9],year[3],month[1],day[1];
printf("请按当前格式输入年月日:xxxx-xx-xx\n");
gets(time);
for (i=0,j=0;i<4;i++,j++)
{
year[j]=time[i];
// printf("%c\n",year[j]);
}
// sscanf(year,"%d",&Year);//因为转化出来的整型变量会重复两次,原因不知道,所以就线放弃使用了
// printf("%d\n\n",Year);
for (i=5,j=0;i<7;i++,j++)
{
month[j]=time[i];
}
time1=atoi(month);
for (i=8,j=0;i<10;i++,j++)
{
day[j]=time[i];
}
time2=atoi(day);
if((time1==1)|(time1==3)|(time1==5)|(time1==7)|(time1==8)|(time1==10)|(time1==12))//限定大月份的天数上限
{
if(time2>31)
printf("输入的日期有误");
}
if((time1==4)|(time1==6)|(time1==9)|(time1==11)) //限定小月份的天数上限
{
if(time2>30)
printf("输入的日期有误");
}
switch (time1) //根据月份确定大体时间
{
case 1:T1=0;break;
case 2:tell();break;//需要判断下输入的日期是否有误。
case 3:T1=59;break;
case 4:T1=90;break;
case 5:T1=120;break;
case 6:T1=151;break;
case 7:T1=181;break;
case 8:T1=212;break;
case 9:T1=243;break;
case 10:T1=273;break;
case 11:T1=304;break;
case 12:T1=334;break;
default:printf("输入的月份或日期有误");
}
T2=time2;
Days=T1+T2;
printf("当前为");
for (i=0;i<4;i++)
{
printf("%c",time[i]);
}
printf("年第%d天\n",Days);
}
void tell()
{
T1=31;
if(time2>28)
printf("输入的月份或日期有误");
}
答案2:(情况考虑充分)
#include <stdio.h>
int Dbuf[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int Dbuf1[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
/***************
1.判断闰年/平年
2.按月累加 时间
****************/
int main()
{
int year,mon,date;
int i,temp;
temp =0;
printf("请按当前格式输入年月日:xxxx-xx-xx\n");
scanf("%d-%d-%d",&year,&mon,&date);
if((year%4==0&&year%100!=0)||year%400==0) //闰年
{
if(mon>12||date>Dbuf1[mon-1]) //判定月日
{
printf("月份或日期不符!\n");
return 0;
}
for(i=1;i<mon;i++)
temp +=Dbuf1[i-1];
}
else //平年
{
if(mon>12||date>Dbuf[mon-1])
{
printf("月份或日期不符!\n");
return 0;
}
for(i=1;i<mon;i++)
temp +=Dbuf[i-1];
}
temp += date; //加上每月的天数
printf("当前为%d的%d天\n",year,temp);
return 0;
}