c语言计算从1月1号到给定日期的天数

作者&投稿:诸葛怖 (若有异议请与网页底部的电邮联系)
C语言编程 编程序实现如下功能:输入任意一个年份和月份,求出从公元1年1月1日到这个月的1日总共有~

#includeint 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=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;}

问题不难。
思路如下:
1. 要判断时间的合法性(如果不想判断也可以)
参考资料:(使用的是C++,修改之后TC下也可运行,主要是看思路)
http://hi.baidu.com/ctralt/blog/item/ee937c167e87db4b21a4e96b.html

2. 判断两个日期之间的天数
判断输入的年份是不是闰年;年份是否相同;月份是否相同;日是否相同?
同年同月最好计算,日数相减就出来了;同年不同月也好计算,计算中间相隔几个月,转换成天数,小的日期距月底有多少天,大的日期距月初多少天,三个数相加;关键是不同年的日期计算:先计算中间相隔几年,这几年的天数就出来了,再计算小的日期到年底有多少天,其次计算大的日期距年初有多少天,三个数相加就可以了。
参考资料:(也是用C++编写的,你可以把类修改为结构体,一样可以使用)
http://zhidao.baidu.com/question/55367386

以下为计算两个日期之间天数的代码:
/* 返回绝对值 */
int abs(int a,int b)
{
if(a>=b)
return (a-b);
else
return (b-a);
}

/* 判断是否为闰年:是,返回 1 ; 不是, 返回 0 . */
int IsLeap(int year)
{
if(((year%4==0)&&(year%100!=0))||year%400==0)
return 1;
else
return 0;
}

/* 判断某个日期从年初(y年1月1日)到该天(y年m月d日)的天数 */
int Days(int y,int m,int d)
{
int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
int sum = 0 ; /* 计算天数 */
if(IsLeap(y)) /* 如果为闰年,2月有 29 天 */
days[2] = 29 ;
for(i=0;i<m;i++)
sum = sum +days[i] ;
sum = sum + d - 1 ;
return sum;
}

/*
判断两个日期之间的天数.
日期一:年 y1,月 m1,日 d1;
日期一:年 y2,月 m2,日 d2;
*/
int DiffDays(int y1,int m1,int d1,int y2,int m2,int d2)
{
int s1,s2; /* 计算两个日期从年初到该日期的天数 */
int count; /* 计算两个年份之间的差值 */
int sum=0; /* */
int t,t1,t2;
if(y1==y2)
{
s1 = Days(y1,m1,d1);
s2 = Days(y2,m2,d2);
return abs(s1,s2);
}
else if(y1>y2)
{
count = y1 - y2 ;
if(count == 1)
{
t1 = Days(y1,m1,d1);
t2 = Days(y2,12,31) - Days(y2,m2,d2);
return (t1+t2+count);
}
else
{
for(t = y2+1;t<y1;t++)
sum = sum + Days(t,12,31);
cout<<sum<<endl;
t2 = Days(y2,12,31) - Days(y2,m2,d2);
t1 = Days(y1,m1,d1);
return (sum+t1+t2+count);
}

}
else
{
count = y2 - y1 ;
if(count == 1)
{
t2 = Days(y2,m2,d2);
t1 = Days(y1,12,31) - Days(y1,m1,d1);
return (t1+t2+count);
}
else
{
for(t = y1+1;t<y2;t++)
sum = sum + Days(t,12,31);
t2 = Days(y2,m2,d2);
t1 = Days(y1,12,31) - Days(y1,m1,d1);
return (sum+t1+t2+count);
}

}

}

/*
以上代码在Viusal C++ 6.0 编译下通过,TC下也可以通过。
使用DiffDays(int,int,int,int,int,int)这个函数就可计算出两个日期之间的天数.
至于日期的合法性,没有进行判断;也就是说,你如果输入一个不合法的日期,计算出来的结果是不正确的;如果是合法日期,那就没问题。
*/

#include<stdio.h>

#include<math.h>

int main()

{int n,m,d,i;

char mon[13][10]={"","January","February","March","April",

"May","June","July","August","September",

"October","November","December"};

scanf("%d",&n);

for(i=0;i<n;i++)

{scanf("%d%d",&m,&d);

printf("%d %s
",d,mon[m]);

}

return 0;

}



#include <stdio.h>
  
int IsLeapYear(int year)    
{   
    return ((year % 4 == 0) && (year % 100 != 0) || year % 400 == 0);   
}
  
int dayOfMonth(int year, int month)
{
    int day = 0;
    switch(month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            day = 31;
            break;
        case 2:
            day = 28 + IsLeapYear(year);
            break;
        default:
            day = 30;
            break;
    }
    return day;
}

int days(int y, int m, int d)
{
    int i, j;
    int total = 0;
    for(i = 1; i <= y -1;i++)
    {
        //1.1 - 12.23
        for(j = 1;j <= 12;j++)
            total += dayOfMonth(i, j);
    }
    //1 - m-1
    for(j = 1;j <= m-1;j++)
        total += dayOfMonth(y, j);
    total += d;
    return total;
}

char* month_str = {"January", "February", "March", "April",
     "May", "June", "July", "August", "September", "October", 
         "November", "December"};
         
int main()
{
    int n, i;
    int year = 1;//默认是公元1年,需要计算闰年,可以通过输入修改
    int a[20][3] = {0};
    scanf("%d", &n);
    for(i = 0;i < n;i++)
    {
        scanf("%d%d", &a[i][0], &a[i][1]);
        a[i][2] = days(year, a[i][0], a[i][1]) - days(year, 1, 1);
    }
    printf("TABLE OF DATES AND DAYS FROM 1 JANUARY
");
    printf("DATEDAYS FROM 1 JANUARY
");
    for(i = 0;i < n;i++)
        printf("%d%s%d
", a[i][1], month_str[(a[i][0]-1)%12], a[i][2]);
}



用C语言确定从1950年到2017年之间的年数的1月1日是周几
include #include <stdio.h>int find(int n){struct tm *date;struct tm tm;time_t t;tm.tm_year = n - 1900;tm.tm_mon = 0;tm.tm_mday = 1;tm.tm_hour = tm.tm_min = tm.tm_sec = 0;t = mktime(&tm); \/\/构造时间为:XXXX年1月1日date = localtime(&t); \/...

C语言循环结构求教从键盘上输入年、月、日,计算自当年元旦到这个日期...
day,i,sum;scanf("%d",&year);scanf("%d",&month);scanf("%d",&day);if(isLeapYear(year))days[1]=29;sum=0;for(i=0,i<month-1;i++)sum+=days[i];sum+=(day-1);printf("从%d年1月1日到%d年%d月%d日总共有%d天\\n",year,year,month,day,sum);} 求采纳,不懂可追问。

c语言,已知1980年1月1日为星期二,求1980年1月1日之后任意一个日期是星期...
4:case 6:case 9:case 11:return 30;default: \/\/ 2 月if (is_leap_year(year))return 29;elsereturn 28;}}\/\/ 输出是星期几void print_week(int weekday){switch (weekday){case 0:printf ("星期天\\n");break;case 1:printf ("星期一\\n");break;case 2:printf ("星期二\\n")...

C语言 假定2000年1月1日周六,用户输入年、月、日后计算这一天是周...
W = [C\/4] - 2C + y + [y\/4] + [13 * (M+1) \/ 5] + d - 1 w:0-6对应星期日-星期六 c:世纪-1(前两位数)y:年(后两位数)m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,d:日[ ]代表取整,即只要整数部分。这个...

C语言的一道题 知道1900年1月1日是星期一,设计一个程序,输入年月日...
int mon[12]={0,31,28,31,30,31,30,31,31,30,31,30};printf("Please input year month day like this xxxx,xx,xx\\n");scanf("%d,%d,%d",&year,&month,&day);for(a=1900;a<year;a++)if(a%100!=0&&a%4==0||a%400==0)count+=2;else count+=1;for(a=1;a<month;a++...

已知公元1年1月1日是星期一,计算输入的年月日是星期几?(用C语言...
for(i=1;i<m;i++)day+=day_tab[i];day=day+d-1+(y1-1)*2+y; \/*减1是减去了1月1日那一天,乘2是因为365除7余2*\/ if(n==1&&m<3)day--;return(day);} include<stdio.h> main(){int year1,month1,day1,y,day,s;printf("year\/month\/day:");scanf("%d\/%d\/%d",&...

C语言编程:已知2006年1月1日是星期日,打印万年历。(结果是任意输入一个...
\/\/输出每个月非第一个星期 printf("%d\\t",i);if(test%7 == 0) putchar('\\n');} putchar('\\n');system("pause");\/\/暂停,以便观察输出 } return 0;} \/\/判断是否润年 int JudgeLeapYear(int y) { return ((y%4 == 0) && (y%100) || (y%400 == 0)) ? 1 : 0;} ...

C语言编程1970年1月1日0时0分0秒,输入N秒,要求打印X年X月X日X时X分...
while(1) \/\/方便测试,一直可以输入 { scanf("%ld",&v);v = v+60*60*8; \/\/我们位于东八区 int d = v\/(60*60*24)+1; \/\/得到距离1970年1月1日到输入秒数的天数 int n = (d+671)\/1461; \/\/求中间过了多少个2月29日 int year = (d-n)\/365+1970; \/\/得到年份 if((d-n)...

...类似日历的C语言程序:输入4个天数,是从2000年1月1日起之后的天数。然...
time_t t;\/\/存储需要计算时间距1900的秒数 struct tm test ;\/\/填充这个结构 memset(&test, 0, sizeof(tm));\/\/先清空下 test.tm_year = year - 1900;test.tm_mon = mon -1;test.tm_mday = day ;t = mktime(&test);\/\/ 转换成秒 struct tm *now = localtime(&t);\/\/再转回...

用c语言调用函数编程,1990年1月1日是星期一 要求输入某年某月某日,输出...
case 1:yearday+=31;} yearday = yearday+day;if ((year-1984)%4==0 && month > 2){ yearday+=1;} sum=sum+yearday;if (year==1984){ sum-=1;} printf("距1984年1月1日一共有%d天\\n",sum);\/*上面是计算输入的日期距1984年1月1日一共经历了多少天*\/ weekday = (sum-1)...

内乡县15295323019: C语言循环结构求教从键盘上输入年、月、日,计算自当年元旦到这个日期一共有多少天并输出. -
雪狄胃灵: int isLeapYear(int year) { if(year%100==0) { if(year%400==0) return 1; else return 0; } else { if(year%4==0) return 1; else return 0; } } void main() { int days[12]={31,28,31,30,31,30,31,30,31,30,31,30}; int year,month,day,i,sum; scanf("%d",&year); ...

内乡县15295323019: 用C语的条件语句计算从2005年1月1日到今天的总天数 -
雪狄胃灵: 今天是2012年12月21日,可以订到2013年1月1日的票,但要等到下午3点才开始.注:我指的是订火车票.我记得是要到下午才开始的(我这里是这样).

内乡县15295323019: 编程序实现:输入一个年份y,求出从公元1年1月1日到y年的1月1日,总共有多少天. 求C语言程序 -
雪狄胃灵: 刚好这个我做过,而且我还把它做成MFC格式,连几月几日都可以计算,下面这个C语言的格试. #include "stdio.h" main() { int i,year1,year2,month1,month2,day1,day2,a[13],days1=0,days2=0,b=0,c=0,d=0,asum=0,alldays=0; a[1]=a[3]=a[5]=a[...

内乡县15295323019: C语言中,计算1900年1月1日到某年1月1日的总天数
雪狄胃灵: main() {int i,j,sum=0;int yy,mm,dd;int ly=0,lm=0;int m;printf("please input the date:yy mm dd\n");scanf("%d %d %d",&yy,&mm,&dd);for(i=1990;i<yy;i++)if(i%400==0||i%100&&i%4==0)ly++;if(mm>2) if(yy%400==0||yy%100&&yy%4==0) ...

内乡县15295323019: 已知2012年1月1日是星期日,输入2012年的一个日期(月和日),判断这天是星期几? -
雪狄胃灵: 方法:计算从1月1日(含1日)开始至要计算的这天的天数,然后除以7,余几即为星期几.

内乡县15295323019: 假如给定一个日期为2010年1月1日 要求输入天数 然后自动计算出年份和日期数 (用C语言程序编写)
雪狄胃灵: //solve the problem #include<stdio.h> int Is_This_Run_Nian(int n) { if((n%4==0&&n%100)||n%400==0) return 366; else return 365; } int Month(int y,int m) { switch(m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:return 31; case 6: case 4...

内乡县15295323019: 输入一个日期(年、月、日),计算从当年1月1日起到这一天的天数 -
雪狄胃灵: #include int day_of_year(int a[13],int b[13],int year,int month,int day);int main(void){ int a[13]={0,31,28,31,30,31,30,31,31...

内乡县15295323019: 紧急悬赏:类似日历的C语言程序:输入4个天数,是从2000年1月1日起之后的天数.然后输出对应的天数和星期 -
雪狄胃灵: 我之前写过的,类似你的需求,供参考#include <stdio.h> #include <string.h> #include <time.h>const char *Week[]= {"星期天","星期一","星期二","星期三","星期四","星期五","星期六" };#if 0struct tm {int ...

内乡县15295323019: C++程序设计:计算一年的开始到某日期的天数
雪狄胃灵: #include void main(){ int month,data,zd,year; cout cin>>year; cout cin>>month; cout cin>>data; cout switch(month){ case(1):zd=0;break; case(2):zd=31;break; case(3):zd=59;break; case(4):zd=90;break; case(5):zd=120;break; case(6):zd=151;break; ...

内乡县15295323019: c语言,已知1980年1月1日为星期二,求1980年1月1日之后任意一个日期是星期几. -
雪狄胃灵: 看代码:#include // 判断是否是闰年 int is_leap_year(int year) { return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; }// 给定年份和月份,获得这个月有多少天 int get_days (int year, int month) { switch (month) { case 1: case 3: case 5: ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网