首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么计算某日为该年的第几天

2012-06-19 
如何计算某日为该年的第几天?如何计算某日为该年的第几天?这题应该怎么想?不用写程序!说说算法![解决办法]

如何计算某日为该年的第几天?
如何计算某日为该年的第几天?这题应该怎么想?不用写程序!说说算法!

[解决办法]
daysofmonth[] = {31,28,...}
x月就把前x-1个加起来再加y日,闰年2月以后再加1
[解决办法]
算法:

1,先判断是否是润年:公式都已经普的很普及了
2,如果是润年,则2月是29天,不是28天

3,列表:int days[12]= {31,28,31,30,31,30,31,31,30,31,30,31}
列表:润年:int days2[12]= {31,29,31,30,31,30,31,31,30,31,30,31}

4, m月 d 号:

m==1, n=d;
m>1
n= days[0]+days[1]+...days[m-2] +d

n 表示改年第几天

[解决办法]
# include "stdio.h"
void main ()
{
int leap (int);
int year,month,day,i,n=0;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf ("请输入日期(形如:2007/4/19)");
scanf ("%d/%d/%d",&year,&month,&day);
if(leap(year))
a[1]=29;
if(month!=1)
for(i=0;i<=month-2;i++)
n+=a[i];
n+=day;
printf ("这是%d年的第%d天",year,n);
}
int leap(int year)
{
int z;
z=(year%400==0)||(year%4==0&&year%100!=0);
return z;
}
[解决办法]
原帖:
http://topic.csdn.net/u/20100310/19/685e161c-d246-45af-a5e8-12d8d518095c.html

C/C++ code
#include <stdio.h> struct date {    int year;    int month;    int day;};int is_leap_year(int year){    return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;}int day_of_year(struct date *d){    static int data[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31},                            {31,29,31,30,31,30,31,31,30,31,30,31}};    int i, j;    int result = d->day;    j = is_leap_year(d->year);    for (i = 0; i < d->month-1; ++i) {        result += data[j][i];    }    return result;}int main(){    struct date d;    /*    d.year = 2010;    d.month = 3;    d.day = 10;    */    printf("请输入年月日(yyyy-mm-dd): ");    scanf("%d-%d-%d", &d.year, &d.month, &d.day);    printf("%d年%d月%d日是该年中的第%d天.\n", d.year, d.month, d.day, day_of_year(&d));    return 0;}
[解决办法]
题目:输入某年某月某日,判断这一天是这一年的第几天? 
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 
      情况,闰年且输入月份大于3时需考虑多加一天。 
2.程序源代码: 
main() 

int day,month,year,sum,leap; 
printf("\nplease input year,month,day\n"); 
scanf("%d,%d,%d",&year,&month,&day); 
switch(month)/*先计算某月以前月份的总天数*/ 

 case 1:sum=0;break; 
 case 2:sum=31;break; 
 case 3:sum=59;break; 
 case 4:sum=90;break; 
 case 5:sum=120;break; 
 case 6:sum=151;break; 
 case 7:sum=181;break; 
 case 8:sum=212;break; 
 case 9:sum=243;break;
 case 10:sum=273;break; 
 case 11:sum=304;break; 
 case 12:sum=334;break; 
 default:printf("data error");break; 

sum=sum+day;  /*再加上某天的天数*/ 
 if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ 
  leap=1; 
 else 
  leap=0; 
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ 
sum++; 
printf("It is the %dth day.",sum);} 



从这抄的:http://tieba.baidu.com/f?kz=8618367
[解决办法]
探讨

引用:
算法:

1,先判断是否是润年:公式都已经普的很普及了
2,如果是润年,则2月是29天,不是28天

3,列表:int days[12]= {31,28,31,30,31,30,31,31,30,31,30,31}


列表:润年:int days2[12]= {31,29,31,30,31,30,31,31,30,31,30,31}

……

n= days[0]+days[1]+...days[m-2] +d 这个地方怎么用循环实现?

热点排行