C万年暦グレゴリオ版
1950 ワード
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void display(int x,int y,int m,int max)
{
int s[6][7]={0};int i=0,j=0;
s[0][m]=1;//
for(j=m;j<7;j++)s[0][j]=(j-m)+s[0][m];
s[1][0]=s[0][6]+1;
for(i=2;i<6;i++)s[i][0]=s[1][0]+(i-1)*7;
for(i=1;i<6;i++)
{ for(j=1;j<7;j++)
s[i][j]=s[i][0]+j;
}
printf("\t%d %d
",x,y);
printf("----------------------
");
printf("
");
for(i=0;i<6;i++)
{ for(j=0;j<7;j++)
{
if(s[i][j]==0)printf(" ");
if(s[i][j]!=0&&s[i][j]<=max)printf("%3d",s[i][j]);}
printf("
");
}
}
int Year(int year)
{
if(year%4==0&&year%100!=0||year%400==0)return 1;
else return 0;
}
void fun()
{
int i,j;
int max[13]={0,30,31,32,33,30,30,30,30,30,30,30,30};
int star[13]={1,2,3,4,5,5,1,6,5,4,3,2,1,};
int x[42]={0};
for(i=1;i<=12;i++)
{printf("%d year %d math
",2015,i);
printf(" 7 1 2 3 4 5 6
");
printf("---------------------
" );
for(j=star[i];j<42;j++)
{ x[j]=x[j-1]+1;}
for(j=0;j<42;j++)
{
if(j>0&&j%7==0)printf("
");
if(x[j]==0)printf(" ");
if(x[j]!=0&&x[j]<max[i])printf("%3d",x[j]);
}
printf("-----happy new year---
");
}
}
void main()
{
int max[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int year=2016;
int month=2;//1-12
int star[13]={0,1,32,60,91,121,152,182,213,244,274,304,334};//0-6
int i=1;
int count=0;
if(Year(year)) {max[2]++;for(i=3;i<=12;i++)star[i]++;}
for(i=1;i<year;i++)
{if(Year(i))count++;}
for(i=1;i<=12;i++)
{//star[i]= (1+2*i+3*(i+1)/5+year+year/4-year/100+year/400)%7;
star[i]=(star[i]+(year-1)*365+count)%7;
display(year,i,star[i],max[i]);
}
//fun();
}
funは1次元印刷とパラメータのために少なくなる関数yearを準備して複数の扇出利用があります