C语言编数组写程序 给出年、月、日,问是当年的第几天

如题所述

//方法(一)使用结构体做法
#include <stdio.h>
struct datetype{//定义结构体(有年、月、日)
int year;
int month;
int day;
}date;
main( )
{
int i,day_sum;
static int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//静态定义数组,记录每个月的天数
printf("\nPlease input your date:(eg:2010 5 26)\n");
scanf("%d%d%d",&date.year, &date.month, &date.day);//输入
day_sum=0;
for(i=1;i<date.month;i++)
day_sum+=day_tab[i];
day_sum+=date.day;////要加上该月的第几天,比如输入2010 5 19 <enter>day_sum就要
//加上1、2、3、4月分总共的天数,然后再加上19天,这就是这一年的第几天
if((date.year % 4 == 0 && date.year % 100 != 0 || date.year % 400 ==0) && date.month>=3 )
day_sum+=1;//闰年要加一天
printf("%d %d %d is No. %d of this year.\n",date.year,date.month,date.day,day_sum);
getch();
}

//方法(二)一般做法
#include "stdio.h"
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);
getch();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-26
#include<iostream.h>
class date
{
public:
date(){}
void set(int p1,int p2,int p3)
{
year=p1;month=p2;day=p3;
}
int year,month,day;
};

int a[]={31,28,31,30,31,30,31,31,30,31,30,31},*p1,*p2,*p3,i=1,k=0;

int main()
{
int days(date k);
date m,n;
int p1,p2,p3;
cout<<"请依次输入年·月·日:"<<endl;
cin>>p1>>p2>>p3;
if(p1%4==0&&p1%100!=0||p1%400==0)
a[1]=29;
if(p2>12||p3>a[p2-1])
cout<<"您的输入有误!"<<endl;
else m.set(p1,p2,p3);
cout<<"这天是该年的第"<<days(m)<<"天。"<<endl;

return 0;
}

int days(date k)
{int i,c=0;
for(i=0;i<k.month-1;i++)
c+=a[i];
c+=k.day;
return c;
}
第2个回答  2010-05-26
#include <stdio.h>
void main()
{int year,month,day,sum,M,Y,W,k;

printf("请输入年月日,如下输入: ****.**.**\n");

scanf("%d.%d.%d",&year,&month,&day);

switch(month)
{
case 1:
{sum=0;M=0;
if (day>31) { k=0;
printf("错误输入\n");}};break;

case 2:
{sum=31;M=3;
if ((day>28)&&(year%4==0&&year%100!=0||year%400==0))
printf("\0");
else {k=0;
printf("错误输入\n");}};break;

case 3:
{sum=31+28;M=3;
if (day>31) { k=0;
printf("错误输入\n");}};break;

case 4:
{sum=31*2+28;M=6;
if (day>30) {k=0;
printf("错误输入\n");}};break;

case 5:
{sum=31*2+30+28;M=1;
if (day>31) {k=0;
printf("错误输入\n");}};break;

case 6:
{sum=31*3+30+28;M=4;
if (day>30){ k=0;
printf("错误输入\n");}};break;

case 7:
{sum=31*3+30*2+28;M=6;
if (day>31) { k=0;

printf("错误输入\n");}};break;

case 8:
{sum=31*4+30*2+28;M=2;
if (day>31) {k=0;
printf("错误输入\n");}};break;

case 9:
{sum=31*5+30*3+28;M=5;
if (day>30) {k=0;
printf("错误输入\n");}};break;

case 10:
{sum=31*6+30*3+28;M=0;
if (day>31) {k=0;
printf("错误输入\n");}};break;

case 11:
{sum=31*6+30*4+28;M=3;
if (day>30)
{k=0;
printf("错误输入\n");}};break;

case 12:
{sum=31*6+30*4+28;M=5;
if (day>31)
{k=0;
printf("错误输入\n");}};break;

default: printf("错误输入\n");k=0;}

if(k)
{if(year%4==0&&year%100!=0||year%400==0&&month>2)
{sum++;
sum+=day;
printf("%d是闰年\n",year);}

else
{sum+=day;
printf("%d不是闰年\n",year);}

printf("今天是一年的第%d天\n",sum);

Y=(year+year/4+year/400)%7;

W=(Y+M+day)%7;

switch (W)

{
case 1: printf("今天是星期一\n");break;
case 2: printf("今天是星期二\n");break;
case 3: printf("今天是星期三\n");break;
case 4: printf("今天是星期四\n");break;
case 5: printf("今天是星期五\n");break;
case 6: printf("今天是星期六\n");break;
case 7: printf("今天是星期日\n");break;}}
}
相似回答