十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
//-----------------------------------------
发展壮大离不开广大客户长期以来的信赖与支持,我们将始终秉承“诚信为本、服务至上”的服务理念,坚持“二合一”的优良服务模式,真诚服务每家企业,认真做好每个细节,不断完善自我,成就企业,实现共赢。行业涉及成都餐厅设计等,在网站建设公司、成都全网营销、WAP手机网站、VI设计、软件开发等项目上具有丰富的设计经验。
//前端时间看到的一断代码看到不错就留下来了,不知道作者是谁,看到勿怪
#includestdio.h
long int f(int year,int month)
{//f(年,月)=年-月,如月3;否则,f(年,月)=年
if (month 3)
return year-1;
else
return year;
}
long int g(int month)
{//g( 月)=月+13,如月3;否则,g(月)=月+1
if(month3)
return month + 13;
else
return month + 1;
}
long int n(int year,int month,int day)
{
return 1461L*f(year,month)/4+153L*g(month)/5+day;
}
int w(int year,int month,int day)
{
return(int) ((n(year,month,day)%7-621049L%7+7)%7);
}
int date[12][6][7];
int day_tbl[][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 main()
{
int sw,leap,i,j,k,wd,day;
int year;
char title[]="SUN MON TUE WED THU FRI SAT";
printf("Please input the yewr whose calendar you want to know:");
scanf("%d%*c",year);
sw=w(year,1,1);
leap=year%4==0year%100||year%400==0;//判断闰年
for(i=0;i12;i++)
for (j=0;j6;j++)
for(k=0;k7;k++)
date[i][j][k]=0;//将日期表置0
for(i=0;i12;i++)//一年12个月
for(wd=0,day=1;day=day_tbl[leap][i];day++)
{//将i+1月的日期填入日期表
date[i][wd][sw]=day;
sw=++sw%7;//每星期7天,以0~6计数
if (sw==0)
wd++;//日期表每七天一行,星期天开始新的一行
}
printf("\n|====================The Calendar of Year %d====================|\n|",year);
for(i=0;i6;i++)
{//先测算地i+1月和第i+7月的最大星期数
for(wd=0,k=0;k7;k++)//日期表的第六行有日期,则wd!=0;
wd+=date[i][5][k]+date[i+6][5][k];
wd=wd?6:5;
printf("%2d %s %2d %s |\n|",i+1,title,i+7,title);
for(j=0;jwd;j++)
{
printf(" ");
//左栏为i+1月,右栏为i+7月
for (k=0;k7;k++)
{
if(date[i][j][k])
printf("%4d",date[i][j][k]);
else
printf(" ");
}
printf(" ");
for(k=0;k7;k++)
{
if(date[i+6][j][k])
printf("%4d",date[i+6][j][k]);
else
printf(" ");
}
printf(" |\n|");
}
}
puts("=================================================================|");
puts("Please input any key to quit...");
getchar();
return(0);
}
#includestdio.h
int monthDay(int,int);
int IsLeapYear(int);
main()
{
int days,weekDay,year,month=1,d,i;
printf("please input the year:\n");
scanf("%d",year);
days=year-1+(year-1)/400+(year-1)/4-(year-1)/100;
while(month=12){
printf("\t\t\t%d-%d\n",year,month);
printf("Sun\tMon\tTues\tWed\tThur\tFir\tSat\n");
d=1,i=1;
weekDay=(days+1)%7;
while(i=weekDay)
{
printf("\t");
i++;
}
while(d=monthDay(month,year))
{
weekDay=(days+1)%7;
if(weekDay==6)
printf("%d\n",d);
else
printf("%d\t",d);
if(d==monthDay(month,year))
printf("\n");
d++;
days++;
}
month++;
}
system("PAUSE");
return 0;
}
int monthDay(int month, int year)
{
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
return 31;
break;
case 4: case 6:case 9:case 11:
return 30;
break;
case 2:
if((IsLeapYear(year))==1)
return 29;
else
return 28;
break;
}
}
int IsLeapYear(int year)
{
if((year%4==0)(year%100!=0))
return 1;
if(year%400==0)
return 1;
return 0;
}
此题不是很难,我会前三个
关键是算那一年的第一天是周几
给你个基本算法,一年是365天,闰年366天
364是7的倍数,这样一年多出一天,中间多少个闰年,在加上相应的天数即可
400年多出来的天数是400+97=497也是7的倍数,那么400年一轮回,这样就算400年以内的即可
一个子函数,返回这一年的第一天是周几,很好做
int ye(int year)
{
int y=year%400;
int day=y;
int i;
for(i=0;iy;i++)
if(闰年判断)
day++;
return day%7;
}
做一个月份天数的全局数组
int mo[12]={31,28,31,30,31,30,31,31,30,31,30,31};
需要时用一个if判断闰年改变m0[1]的值是28还是29
打印子函数,有一个小技巧,就是每个月前面的空缺部分,这个1月份是ye子函数的返回值,后面的你看和前面月份是不是重合啊,吧这个记录下来在下一月份用即可
1 2
3 4
这样月份排列更好打印一些,你的那个截图有点麻烦
int pr(int year)
{
int k=ye(year);
int i,j,;
if(闰年判断)
mo[1]=29;
else
mo[1]=28;
for(i=0;i12;i++)
{
printf("周几英文的打印");
for(j=0;jk;j++)
printf("一般是四个空格,就是月份前面空缺的打印");
for(j=1;j=mo[i];j++)
{
printf("%4d",j);
k++;
if((k+j)%7==0)
printf("\n");
}
k%=7;
if(k!=0)
printf("\n");
}
}
如果像你那样,感觉需要赋值一个大一点的数组,在吧数组打印出来更好,呵呵
#includestdio.h
//输出指定月份的名称以及星期表头
void prt_title(int month)
{
switch (month)
{
case 1:puts("January");break;
case 2:puts("February");break;
case 3:puts("March");break;
case 4:puts("April");break;
case 5:puts("May");break;
case 6:puts("June");break;
case 7:puts("July");break;
case 8:puts("August");break;
case 9:puts("September");break;
case 10:puts("October");break;
case 11:puts("November");break;
case 12:puts("December");break;
}
printf("Sun.\tMon.\tTues.\tWed.\tThur.\tFri.\tSat.\n");
}
//计算指定月的第一天是星期几
int first_day_month(int year, int month)
{
if (month3)
{
month += 12;
year--;
}
return (1 + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
}
//计算指定月有几天
int days_of_month(int year, int month)
{
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:return 31;break;
case 4:
case 6:
case 9:
case 11:return 30;break;
case 2:return ((year % 4 == 0 year % 100) || (year % 400 == 0)) ? 29 : 28;break;
}
}
//输出指定月的日历
void prt_the_month(int year, int month)
{
int fd, i, sp = 0, days;
putchar('\n');
prt_title(month);
fd = first_day_month(year, month);
for (i = 0;i(fd + 1) % 7;i++)
{
putchar('\t');
sp++;
}
days = days_of_month(year, month);
for (i = 1;i = days;sp++, i++)
{
if (spsp % 7 == 0) putchar('\n');
printf("%2d\t", i);
}
putchar('\n');
}
//输出指定年的日历
void prt_the_year(int year)
{
int i;
printf("Calendar of %d : \n", year);
for (i = 1;i = 12;i++)
{
prt_the_month(year, i);
}
}
//主函数,用2012年进行测试
int main(void)
{
prt_the_year(2012);
getchar();
return 0;
}
谢谢采纳
#include stdio.h
void main()
{
int i,j,k,year,week;
int day[]=;
char month[12][10]=;
printf("Input year you want to print:");
scanf("%d",year);
if((year%4==0year%100!=0)||(year%400==0)) day[1]++; //判断是否闰年
week=(35+year+year/4-year/100+year/400)%7; //计算当年的1月1日是周几的公式
for(i=0;i12;i++)
{
printf("\n%s\n",month[i]); //输出月份的英文
printf("Sun Mon Tue Wed Thu Fri Sat\n"); //输出表头
for(k=0;kweek;k++) printf(" "); //每月一号对齐它的星期数
for(j=1;j=day[i];j++)
{
printf("%3d ",j);
if(++week=7)
{
printf("\n");
week=week%7;
}
}
printf("\n");
}
}
没想到这个程序会做这么长,要不得多要点分。
#include stdio.h
void main()
{
int i,j,k,year,week;
int day[]={31,28,31,30,31,30,31,31,30,31,30,31};
char month[12][10]={"January","February","March","April","May","June","July","August","September","October","November","December"};
printf("Input year you want to print:");
scanf("%d",year);
if((year%4==0year%100!=0)||(year%400==0)) day[1]++;
week=(35+year+year/4-year/100+year/400)%7; //计算当年的1月1日是周几的公式
for(i=0;i12;i++)
{
printf("\n%s\n",month[i]);
printf("Sun Mon Tue Wed Thu Fri Sat\n");
for(k=0;kweek;k++) printf(" ");
for(j=1;j=day[i];j++)
{
printf("%3d ",j);
if(++week=7)
{
printf("\n");
week=week%7;
}
}
printf("\n");
}
}