#include <stdlib.h>
int leap(int)//判断是否为闰年
int md(int m,int y)//返回本月的天数
void prtweek(void)//输出表头
int fw(int m,int y)//返回本月一号是星期几
void prtmonth(int m)//输出月份表头
int main(int argc, char* argv[])
{
int y,m,i,test,week
printf("Year:")
scanf("%d",&y)
for (m=1m<=12m++) {
test=1
prtmonth(m)
prtweek()
week=fw(m,y)
if (week!=6)
for (i=0i<=weeki++) {
putchar('\t')
test++
}
for (i=1i<=md(m,y)i++,test++) {
printf("%d\t",i)
if (test%7==0) {
putchar('\n')
}
}
putchar('\n')
system("pause")//含禅暂停,以便观察输出
}
return 0
}
int leap(int y)
{
return (y%4==0&&y%100||y%400==0)?1:0
}
int md(int m,int y)
{
int d
switch (m) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:d=31break
case 4:
case 6:
case 9:
case 11:d=30break
case 2:d=leap(y)?29:28break
}
return d
}
void prtweek(void)
{
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","Sun","Mon","Tue","Wed","Thur","Fri","Sat")
}
int fw(int m,int y)
{
int f
if (m<3) {
m+=12
y--
}
f=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7
return f
}
void prtmonth(int m)
{
switch (m) {
default:
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
}
}
此题不是很难,我会前三个关键是算那一年的第一天是周几
给你个基本算法,一年是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=0i<yi++)
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=0i<12i++)
{
printf("周几英文的打印")
for(j=0j<kj++)
printf("一般是四个空格,就是月份前面空缺的打印")
for(j=1j<=mo[i]j++)
{
printf("%4d",j)
k++
if((k+j)%7==0)
printf("\n"知颂)
}
k%=7
if(k!=0)
printf("\n")
}
}
如果像你那样,感觉需要赋值一个大一点的数组,在吧数组打印出来更好,呵呵
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)