#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月\n",x,y); printf("----------------------\n"); printf(" 日 一 二 三 四 五 六 \n"); 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("\n"); } } 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\n",2015,i); printf(" 7 1 2 3 4 5 6 \n"); printf("---------------------\n" ); 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("\n"); if(x[j]==0)printf(" "); if(x[j]!=0&&x[j]<max[i])printf("%3d",x[j]); } printf("-----happy new year---\n"); } } 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为一维打印 并传参准备变少 函数year有多扇出利用