C语言编程 编程序实现如下功能:输入任意一个年份和月份,求出从公元1年1月1日到这个月的1日总共有

供稿:hz-xin.com     日期:2024-04-28
C语言编程 输入任意一个日期的年、月、日的值,求出从公元1年1月1日到该日期前一年的年末总共有多少

#include "stdio.h"int main(void){ int y,m,d; char *w[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; while(1){ printf("Please enter y, m, d(int >0)...
"); if(scanf("%d%d%d",&y,&m,&d) && y>0) break; printf("Error! Must be y>0: "); } y--; y=y*365+y/4-y/100+y/400; printf("A total of %d days, the day is %s.
",y,w[y%7]); return 0;}

用蔡勒公式即可:
#include
int main ()
{
int y, m, d, c, w;
printf ("输入年 月 日(空格间隔):");
scanf ("%d %d %d", &y, &m, &d);
if (m ==1 || m == 2)
{ //判断月份是否为1或2y--;m += 12;}
c = y / 100;
y = y - c * 100;
w = (c / 4) - 2 * c + (y + y / 4) + (13 * (m + 1) / 5) + d - 1;
while (w < 0) w += 7;
w %= 7;
if (w == 0) printf ("星期日");
else printf ("星期%d", w);
return 0;
}
方法二:
#include
void main ()
{
int y,m,d,c,s,w;
printf("请输入8位年月日,以空格隔开:");
scanf("%d%d%d",&y,&m,&d);
if (m==1) c=d;
else if (m==2) c=31 d;
else if (m==3) c=31 28 d;
else if (m==4) c=31 28 31 d;
else if (m==5) c=31 28 31 30 d;
else if (m==6) c=31 28 31 30 31 d;
else if (m==7) c=31 28 31 30 31 30 d;
else if (m==8) c=31 28 31 30 31 30 31 d;
else if (m==9) c=31 28 31 30 31 30 31 31 d;
else if (m==10) c=31 28 31 30 31 30 31 31 30 d;
else if (m==11) c=31 28 31 30 31 30 31 31 30 31 d;
else if (m==12) c=31 28 31 30 31 30 31 31 30 31 30 d;
if (m>2)
{if (y0==0) {if (y@0==0) c=c 1;}
else if (y%4==0) c=c 1;}
s=(y-1)*365 (y-1)/4-(y-1)/100 (y-1)/400 c;
w=s%7;
switch (w)
{
case 0: printf("星期日");break;
case 1: printf("星期一");break;
case 2: printf("星期二");break;
case 3: printf("星期三");break;
case 4: printf("星期四");break;
case 5: printf("星期五");break;
case 6: printf("星期六");break;
printf("");
}
}

扩展资料:
C语言日期函数,日期处理函数:
定义一个表示日期的结构体类型,再分别定义函数完成下列功能:计算某一天是对应年的第几天,这一年一共多少天;计算两个日期之间相隔的天数。两个日期由键盘输入。
算法思想:
设定结构体类型表示日期类型名为 Date,利用 typedef 将其定义为日期型类型名,有三个整型类型的成员分别表示年、月、日。
设定函数计算输入的日期是这一年的第几天。函数的形参为日期型变量,函数体中设定整型数组存放每个月的天数,二月份的天数为 28 天。
设定函数判断年份是否为闰年以决定二月份的天数。根据输入的日期月份,在数组中将相应的月份天数求和,假日曰期即为天数。
设定函数完成两个日期的比较,比较形参 d 和 s 两个日期的大小。首先比较年,同年的比较月,同月的比较日。变量 start 保存输入的小的日期年份,end 保存输入日期大的年份,然后计算两个日期之间的天数。
程序由 6 个函数构成,yearday() 函数计算某年的天数,monthday() 函数计算某年二月份的天数,dayofyeaK() 函数计算某日期是某年的第几天。
cmpdate() 函数比较两个日期的大小,interday() 函数计算两个日期之间的天数。
dayofyear() 函数调用 monthday() 函数,interday() 函数调用 cmpdate() 函数。
yearday() 函数、dayofyear() 函数;主函数调用 yearday() 函数、dayofyear() 函数、interday() 函数。

#include<stdio.h>
int Month[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int print_month[7][8];
bool leap_year(int year)
{
    return year%4==0&&year%100!=0||year%400==0;
}
int get_days(int year,int month,int day)
{//返回从公元1年1月1日到该日期的天数
    int i;
    int sum=0;
    for(i=1; i<year; i++)
    {
        if(leap_year(i))
            sum+=366;
        else sum+=365;
    }
    if(leap_year(year))
        Month[2]=29;
    for(i=1; i<month; i++)
        sum+=Month[i];
    Month[2]=28;
    return sum+day;
}
void Print(int year,int month)
{//打印该月的日历
    int i,j;
    for(i=0; i<7; i++)
        for(j=0; j<8; j++)
            print_month[i][j]=0;
    int sum=get_days(year,month,1);
    if(leap_year(year))
        Month[2]=29;
    int t=1;
    j=sum%7;
    i=0;
    while(t<=Month[month])
    {
        print_month[i][j]=t++;
        j++;
        if(j>=7)
        {
            i++;
            j=0;
        }
    }
    printf("%d月
");
    printf("****************************
");
    printf("日  一  二  三  四  五  六
");
    for(i=0; i<6; i++)
    {
        for(j=0; j<7; j++)
        {
            if(print_month[i][j]==0)printf("    ");
            else printf("%-3d ",print_month[i][j]);
        }
        printf("
");
    }
    printf("***************************
");
    Month[2]=28;
}
int main()
{
    int year,month,day;
    printf("输入日期:");
    scanf("%d%d%d",&year,&month,&day);
    printf("%d年%d月%d日是星期",year,month,day);
    int t=get_days(year,month,day)%7;
    if(t%7==0)printf("日
");
    else printf("%d
",t%7);
    Print(year,month);
    return 0;
}