用C语言输入年,月得到该年该月的日历
该方法计算了当前月在该年是第几天,该年到1900年之间共经过了多少天,较为复杂
#include<stdio.h>
void main()
{
int n,y,day=0,xq,d=1,f=1;
scanf("%d,%d",&n,&y);
switch(y)
{
case 1:day=0;break;
case 2:day=31;break;
case 3:day=31+28;break;
case 4:day=31+28+31;break;
case 5:day=31+28+31+30;break;
case 6:day=31+28+31+30+31;break;
case 7:day=31+28+31+30+31+30;break;
case 8:day=31+28+31+30+31+30+31;break;
case 9:day=31+28+31+30+31+30+31+31;break;
case 10:day=31+28+31+30+31+30+31+31+30;break;
case 11:day=31+28+31+30+31+30+31+31+30+31;break;
case 12:day=31+28+31+30+31+30+31+31+30+31+30;break;
}
if(((n%4==0&&n%100!=0) || n%400==0) && y>=3)
day=day+1;
if((n-1900)%4==0)
day=day+(n-1900)/4*(3*365+366);
else
day=day+((n-(n-1900)%4-1900)/4)*(365*3+366)+((n-1900)%4)*365;
xq=(day+1)%7;
printf("一\t二\t三\t四\t五\t六\t日\n");
for(int i=1;i<=31;i++)
{
if(i==1)
{
for(int j=0;j<xq-1;j++)printf(" \t");}
printf("%d\t",d);
d++;
xq++;
if(xq==8)
{
printf("\n");
xq=1;
}
if((n%4==0&&n%100!=0) || n%400==0)
{if(y==2 && d==30)break;}
else
{
if(y==2 && d==29)break;
else if((y==4||y==6||y==9||y==11)&& d==31)
break;
}
}
printf("\n");
}
找到的一段代码
#include <stdio.h>
int year(int y)
{
if ((y%4==0) && (y%100!=0) || y%400==0)
return 366;
else
return 365;
}
int main()
{
int y,m;
int i,j,sum=0;
int begin,week;
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d,%d",&y,&m);
for(i=1900;i<y;i++)
sum+=year(i);
week=(sum+1)%7; //表示该年1月1日为星期几
if(year(y)==366)
days[1]=29;
printf("\n%d年%d月日历如下:\n\n",y,m);
printf(" %d月 \n",m);
printf(" 7 1 2 3 4 5 6\n");
printf("=====================\n");
begin=1;
for(j=0;j<week;j++)
printf(" ");
while(begin<=days[m+1])
{
printf("%3d",begin);
begin++;
week=(week+1)%7;
if(week%7==0)
printf("\n");
}
printf("\n\n");
return 0;
}
用数组来存放每一个月的天数,使用起来更为方便,判断是否是闰年用到两次可以使用函数。
下面是根据找到的代码进行修改
#include<stdio.h>
int tian(int x)
{
if(x%4==0&&x%100!=0||x%400==0)
return 366;
else return 365;
}
void main()
{
int n,y;
scanf("%d,%d",&n,&y);
int d[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int sum=0,xq=0;
for(int i=1900;i<y;i++)
sum+=tian(i);
xq=(sum+1)%7;
if(tian(n)==366)
d[1]++;
printf("一\t二\t三\t四\t五\t六\t日\n");
for(int j=0;i<xq-1;i++)
printf("\t");
for(int k=1;k<=d[y-1];k++)
{
printf("%d\t",k);
xq++;
if(xq==8)
{printf("\n");xq=1;}
}
printf("\n");
}